- Сообщения
- 588
- Реакции
- 4
Задача: перед удалением некоторого объекта необходимо выполнить некоторые действия, зависящие от свойств удаляемого объекта.
Проблема в том, что имеется только одно событие, генерируемое при удалении объекта - SelectionChange.
Один из вариантов: в Document.History проверяем последнее действие. Если "удаление", то отменяем последнюю операцию, выполняем необходимые действия, затем удаляем объект. Проблема: в объектной модели Corel нет объекта History. Есть только методы Undo и ClearUndoList (может, ошибаюсь ?), с помощью которых вышеописанные операции не выполнишь.
Другой вариант. В обработчике SelectionChange постоянно заносим в свойства документа всю необходимую информацию о выделенном объекте, которая необходима для выполнения наших действий при удалении объекта. Также в свойствах документа сохраняем StaticID последнего выделенного объекта. В этом же обработчике проверяем, уменьшилось ли число объектов по сравнению с предыдущим вызовом обработчика. Если уменьшилось, то берём StaticID последнего выделенного объекта и проверяем его наличие в документе. Если его нет, значит он удалён => выполняем необходимые операции, используя сохранённую в документе информацию, связанную с удалённым объектом.
Есть ли более лаконичный и безопасный способ ?
Проблема в том, что имеется только одно событие, генерируемое при удалении объекта - SelectionChange.
Один из вариантов: в Document.History проверяем последнее действие. Если "удаление", то отменяем последнюю операцию, выполняем необходимые действия, затем удаляем объект. Проблема: в объектной модели Corel нет объекта History. Есть только методы Undo и ClearUndoList (может, ошибаюсь ?), с помощью которых вышеописанные операции не выполнишь.
Другой вариант. В обработчике SelectionChange постоянно заносим в свойства документа всю необходимую информацию о выделенном объекте, которая необходима для выполнения наших действий при удалении объекта. Также в свойствах документа сохраняем StaticID последнего выделенного объекта. В этом же обработчике проверяем, уменьшилось ли число объектов по сравнению с предыдущим вызовом обработчика. Если уменьшилось, то берём StaticID последнего выделенного объекта и проверяем его наличие в документе. Если его нет, значит он удалён => выполняем необходимые операции, используя сохранённую в документе информацию, связанную с удалённым объектом.
Есть ли более лаконичный и безопасный способ ?