Нужно событие, прежде чем в Delphi отобразится диалоговое окно «Открыть» или «Сохранить».

Я ищу какой-то механизм, с помощью которого я могу перехватывать все методы TSaveDialog.Execute или TOpenDialog.Execute с каким-то событием OnDialogBeforeExecute.

Мне было интересно узнать о TVirtualMethodInterceptor, используя какой-то класс интерпозера или каким-то образом предварительно заполняя событие OnShow каждого диалога.

Кто-нибудь знает способ достижения этого?


person Alister    schedule 08.09.2020    source источник
comment
Мероприятие OnShow слишком поздно?   -  person Dave Nottage    schedule 08.09.2020
comment
@DaveNottage Было бы хорошо, но я не хочу менять каждый диалог в приложении. Фон в том, что я играю с ThinFinity. Некоторые диалоги я хочу работать на стороне клиента в браузере, а другие на сервере.   -  person Alister    schedule 08.09.2020
comment
Не могли бы вы объяснить, зачем вам нужен такой механизм? На первый взгляд, вы можете заменить TSaveDialog и TOpenDialog своей версией. Просто скопируйте их исходный код в новый блок и измените его.   -  person fpiette    schedule 08.09.2020
comment
На ум приходит использование модуля с некоторыми классами Interceptor/Interposer.   -  person Uwe Raabe    schedule 08.09.2020


Ответы (1)


Если это ваш код, я бы предложил наследовать от класса TSaveDialog и переопределить метод Execute.

Я никогда не использовал TVirtualMethodInterceptor, но это похоже на способ сделать то же самое во время выполнения, что было бы полезно для кода, который не принадлежит вам или для которого у вас нет доступа к исходному коду или по какой-то причине вы не можете скомпилировать. Поскольку вы используете Thinfinity, это может иметь место с приложениями, разработанными для использования на рабочем столе Windows, которые вы хотите поддерживать независимо, но которые изменили функциональность при размещении. Вроде разумный подход.

В любом случае вы можете включить события для BeforeExecute и AfterExecute, если хотите, и предоставить альтернативный Execute с событием OnExecute, которое может запускаться вместо вызова унаследованного Execute.

person Rob Lambden    schedule 08.09.2020