Delphi: Подходящее время для создания подкласса и восстановления контроля? - PullRequest
1 голос
/ 18 ноября 2009

Каково правильное место / время для начала создания подкласса элемента управления?

Сколько времени восстанавливать исходный процесс окна?

Прямо сейчас я подкласс во время формы создание :

procedure TForm1.FormCreate(Sender: TObject);
begin
   FOldPanel1WindowProc := Panel1.WindowProc;
   Panel1.WindowProc := Panel1WindowProc;
end;

и я восстанавливаю подклассы во время формы уничтожения :

procedure TForm1.FormDestroy(Sender: TObject);
begin
   Panel1.WindowProc := FOldPanel1WindowProc;
end;

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

Я предполагаю, что это потому, что я не должен запускать подкласс во время Создать и восстановить его во время Уничтожить . Итак, каково надлежащим образом документированное время для подкласса и отмены подкласса элемента управления в Delphi?

1 Ответ

3 голосов
/ 19 ноября 2009

Из вашего вопроса непонятно, но я предполагаю, что вы получаете ошибки, когда пытаетесь восстановить старую оконную процедуру в обработчике события OnDestroy формы.

ThemeManager восстанавливает свои подклассы при обработке WM_DESTROY для элемента управления. Следовательно, вам, вероятно, придется сделать то же самое: посмотреть на WM_DESTROY в новой оконной процедуре и сначала откатить подклассы, затем вызвать старую оконную процедуру (и пусть ThemeManager сделает то же самое).

Я не проверял это, но думаю, что оно должно работать.

...