开始对控件进行子类化的正确位置/时间是什么?
恢复原始窗口proc的适当时间是什么?
现在我在表单创建:
中进行子类化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中对控件进行子类化和取消子类化的正确记录时间是什么?
答案 0 :(得分:3)
从您的问题中不清楚,但我假设您在尝试恢复表单的OnDestroy事件处理程序中的旧窗口过程时会收到错误。
在处理控件的WM_DESTROY
时,ThemeManager会恢复其子类化。因此,您可能必须这样做:在新窗口过程中注意WM_DESTROY
并首先恢复子类,然后调用旧窗口过程(并让ThemeManager执行相同的操作)。
我没有对此进行测试,但我认为它应该可行。