2013-08-05 2 views
2

Я работаю над надстройкой для PowerPoint 2010 (C#), и я хочу, чтобы конечный пользователь не перемещал и не редактировал все формы, которые я программно создал.Как заблокировать фигуры в PowerPoint?

Я уже искал в рамке, но я думаю, что это не разрешено программно. Кто-нибудь уже сталкивался с такими ограничениями и мог помочь мне найти решение?

Я знаю, что некоторые люди создают свою надстройку благодаря C++, потому что в офисе существует множество ограничений.

+0

Вопрос отредактирован: я постарался быть как можно точнее – monstergold

+1

В объектной модели ничего нет, что позволяет блокировать формы PowerPoint. Есть способ сделать это через XML, который лежит в основе PPT 2007 и далее. Просмотрите эту тему для ссылки на John Wilson, который разработал, как это сделать: http://answers.microsoft.com/en-us/office/forum/office_2007-powerpoint/locking-shapes/945e3424-4994-488c- a575-8e7a94c76925 Другой подход заключается в том, чтобы улавливать событие изменения выбора, и если вновь выбранная фигура является заблокированной формой, установите ее обратно в известную позицию после повторного изменения выбора. –

+0

Я нашел этот пример кода для обнаружения всех событий, происходящих благодаря commandsBars.OnUpdate: http://code.msdn.microsoft.com/CSExcelNewEventForShapes-0e26b1f2#content Это работает, но это не является идеальным решением – monstergold

ответ

2

Я нашел два решения:

  • Первый поймать все события из «commandBars.OnUpdate», как этот великий пример кода: http://code.msdn.microsoft.com/CSExcelNewEventForShapes-0e26b1f2#content Затем вы можете наложить положение/цвет или все, что вы хотите свою форму.
  • Второй - более «жестокий»> немедленно отменить выбор формы. Когда вы ловите все события из «CommandBars.OnUpdate» сделать это:

Чтобы узнать, какую форму выбрано:

var selectedShape = this.Application.ActiveWindow.Selection.ShapeRange[1] 

Во всех моих формах, я поставил тег с идентификатором. Я только проверить, что есть идентификатор в тегах в selectedShape, и если это так:

this.Application.ActiveWindow.Selection.Unselect(); 

Тогда я показываю MessageBox, чтобы предупредить пользователя, чтобы не выбирать этот вид формы. Мне не нравится это решение, но это единственный, который я нашел, и он работает.

+0

Вы перехватываете встроенное поведение PowerPoint неестественным образом. Что делать, если пользователь нажимает кнопку «отменить» после того, как вы отмените выбор формы? Форма снова выбирается. Мой совет никогда не пытается заблокировать форму, потому что мы не можем контролировать список отмены. – chipbk10

+1

Вы пробовали это? Потому что у меня нет проблемы, о которой вы говорите ... – monstergold

+1

Вы правы. Я попробовал. Отмена выбора фигуры не сохраняется в стеке отмены. – chipbk10

1

Я считаю, что это невозможно. Способ достижения этого в определенной степени (люди могут обойти его, если они придумают, как выбрать фигуры ниже), сделав прозрачный прямоугольник размером с холстом и привязывая к нему настраиваемое событие (как вы описали в своем комментарий). Прозрачный прямоугольник накладывает формы, которые вы создали, чтобы люди больше не могли получить доступ к таким формам. Конечно, если они способны выяснить, как выбрать фигуры, они могут перемещать их в любом случае ...

В качестве альтернативы, чтобы люди не делали подобные вещи (вы останавливаете неопытных), вы также можете настроить их как мастер-слайды.

Только «реальное» решение для людей, которые этого не делают? Изображения .. но тогда они могут перемещать изображение тоже!

+0

Поскольку ОП упоминается желая «заблокировать» все формы, которые он/она программно создал, но не обязательно ВСЕ фигуры, прозрачный прямоугольник и трюки изображения не обязательно будут работать в любом случае.Но, как вы полагаете, определенный идиот может почти всегда одолевать самое умное программное обеспечение. Цель должна заключаться в том, чтобы облегчить пользователям делать то, что им нужно, а не пытаться помешать им делать то, что им не нужно. –