как мога да заключа фигури в PowerPoint?

Работя върху добавка за PowerPoint 2010 (C#) и искам да попреча на крайния потребител да премества или редактира всички фигури, които съм създал програмно.

Вече потърсих в рамката, но мисля, че не е разрешено програмно. Някой срещал ли е вече такъв вид ограничения и може ли да ми помогне да намеря решение?

Знам, че някои хора създават своите добавки благодарение на C++, защото има много ограничения в офиса.


person monstergold    schedule 05.08.2013    source източник
comment
Въпросът е редактиран: Опитах се да бъда възможно най-точен   -  person monstergold    schedule 05.08.2013
comment
В обектния модел няма нищо, което да ви позволява да заключвате форми на PowerPoint. Има начин да го направите чрез XML, който е в основата на PPT 2007 и по-нататък. Проверете тази тема за връзка към Джон Уилсън, който е измислил как да го направи: answers.microsoft.com/en-us/office/forum/office_2007-powerpoint/ Другият подход е да се прихване събитието за промяна на избора и ако новоизбраната форма е заключена форма, върнете я обратно на известна позиция, след като селекцията се промени отново.   -  person Steve Rindsberg    schedule 05.08.2013
comment
Намерих този примерен код за откриване на всички събития, възникващи благодарение на commandsBars.OnUpdate: code.msdn .microsoft.com/ Работи, но не е идеалното решение   -  person monstergold    schedule 06.08.2013


Отговори (2)


Намерих две решения:

  • Първият е да улови всички събития от "commandBars.OnUpdate" като този страхотен примерен код: http://code.msdn.microsoft.com/CSExcelNewEventForShapes-0e26b1f2#content След това можете да наложите позицията/цвета или всичко, което искате, на вашата форма.
  • Вторият е по-брутален > незабавно премахнете избора от формата. Когато уловите всички събития от "CommandBars.OnUpdate", направете следното:

За да видите коя форма е избрана:

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

Във всички мои фигури съм задал етикет с идентификатор. Трябва само да проверя дали има ID в таговете на selectedShape и ако случаят е такъв:

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

След това показвам поле за съобщения, за да предупредя потребителя да не избира този вид форма. Не ми харесва това решение, но е единственото, което намерих и работи.

person monstergold    schedule 21.08.2013
comment
Прихващате вграденото поведение на PowerPoint по неестествен начин. Какво става, ако потребителят щракне върху бутона за отмяна, след като премахнете избора от формата? Формата се избира отново. Моят съвет е никога да не се опитвате да заключите формата, защото не можем да контролираме списъка за отмяна. - person chipbk10; 10.10.2014
comment
ти си прав. Пробвал съм го. Премахването на избора на фигура не се съхранява в стека за отмяна. - person chipbk10; 13.10.2014

Вярвам, че това не е възможно. Начин за постигане на това до известна степен (хората могат да го заобиколят, ако разберат как да изберат фигурите по-долу) е като направят прозрачен правоъгълник с размера на платното и обвържат персонализирано събитие към това (както описахте във вашия коментар). Прозрачният правоъгълник наслагва формите, които сте създали, така че хората вече нямат достъп до формите по този начин. Разбира се, ако са в състояние да разберат как да избират фигурите, те могат да ги преместят така или иначе...

Като алтернатива, за да накарате хората да не правят подобни неща (спирате само неопитните), можете също да ги настроите като главни слайдове.

Единственото „истинско“ решение за хората, които не правят това? Изображения .. но след това те могат да преместят и изображението!

person ranieuwe    schedule 12.08.2013
comment
Тъй като OP спомена, че иска да заключи всички фигури, които той/тя е създал програмно, но не непременно ВСИЧКИ форми, триковете с прозрачен правоъгълник и изображения не е задължително да работят. Но както предполагате, решителният идиот почти винаги може да победи най-умния софтуер. Като цяло целта трябва да бъде да се улесни потребителите да правят това, което трябва, вместо да се опитвате да им попречите да правят това, което не трябва. - person Steve Rindsberg; 14.08.2013