2013-07-23 2 views
2

Я занимаюсь разработкой Office Powerpoint (версии 2007, 2010 и 2013 годов) и ищет событие, которое будет инициировано при изменении размера объекта (например, текстового поля) в PowerPoint Slide. Я хотел бы зафиксировать это событие в надстройке COM, закодированной в C#. Есть ли способ достичь этого? Пожалуйста, порекомендуйте.Захват события После изменения размера объекта слайда PPT

Спасибо, Сатиш

ответ

0

Угу,

прочитать: http://msdn.microsoft.com/en-us/library/office/jj227375.aspx

в конструкторе или где-нибудь

Application.AfterShapeSizeChange += AfterShapeSizeChanged; 

Затем создайте функцию

// Object "shape" is the one you currently edit 
void AfterShapeSizeChange(Microsoft.Office.Interop.PowerPoint.Shape shape) 
{ 
    // do something 
} 

Обратите внимание, что это работает только в PPT 2013. Для предыдущих версий (2007 или 2010) вам может потребоваться больше усилий. Я реализовал этот подход себя и никогда не нашел лучшее решение:

1. Создать прокси-класс для всех вашего объекта формы

2. Записи атрибутов (позы, ширина, и высота), необходимо сравнить значения у вас есть с текущим объектом формы

3. Создать таймер (создать аналогичную функцию, как поток, но это один синхронизирован с WinForm), проверьте сверхурочно, установить его 15 раз в секунду d достаточно хорошо. только проверить выбранную форму, не проверять все формы у вас есть в вашем РРТ или это будет очень медленно

4. Объединить с событием WindowSelectionChange http://msdn.microsoft.com/en-us/library/office/ff743918.aspx (это одно, чтобы справиться с Ctrl + Z или Ctrl + y, где пользователи могут выполнять редактирование с отменой или повторением, тем самым редактируя фигуры, которые не находятся на текущем выбранном слайде). внутри WindowSelectionChange() Аналогично пункту 3, но теперь вам нужно проверить все фигуры, которые у вас есть.

+0

Привет, Спасибо за ваш ответ и ценную информацию. Да, событие AfterShapeSizeChange поддерживается только в PPT 2013. Но мне это нужно и для 2007 и 2010 годов. Я попытался, но не получил никакого решения. Есть ли способ достичь этого в 2007 и 2010 годах? – user2609159

+0

yep, это в моем ответе – azer89

+0

Привет, спасибо! Я понимаю ваш подход. Есть ли ссылка на код для этого подхода, пожалуйста? – user2609159

Смежные вопросы