小编Dim*_*ima的帖子

正确地覆盖WndProc

一天前,我开始重写我的一个旧组件,并决定提高其可读性.我的组件是一个典型的TWinControl被覆盖WndProc来处理我自己的很多消息.每条消息都有很多代码,我阅读代码成了一个问题.
因此,在寻找改进内部代码的解决方案时WndProc,我已经在程序中组织了这些大量代码,每次在适当的消息传递时调用WndProc.这就是它现在的样子:

procedure TMyControl.WndProc(var Message: TMessage);
begin
  case Message.Msg of        
    WM_WINDOWPOSCHANGED: 
      WMWINDOWPOSCHANGED(Message);
    WM_DESTROY: 
      WMDESTROY(Message);
    WM_STYLECHANGED: 
      WMSTYLECHANGED(Message);
    //  lots of the same procedures for Windows messages
    //  ...
    MM_FOLDER_CHANGED: 
      MMFOLDERCHANGED(Message);
    MM_DIRECTORY_CHANGED: 
      MMDIRECTORYCHANGED(Message);
    //  lots of the same procedures for my own messages
    //  ...
  else
    Inherited WndProc(Message);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

不幸的是Inherited,这些程序中的单词不再起作用了!

重要提示:在某些WM_XXX消息中,我没有调用Inherited自己处理此类消息,因此下面显示的代码将分解我实现某些功能的努力.

procedure TMyControl.WndProc(var Message: TMessage);
begin
  Inherited WndProc(Message);
  case Message.Msg of        
    WM_WINDOWPOSCHANGED: 
      WMWINDOWPOSCHANGED(Message);
    //  further messages
    //  ... …
Run Code Online (Sandbox Code Playgroud)

delphi controls wndproc

3
推荐指数
1
解决办法
797
查看次数

标签 统计

controls ×1

delphi ×1

wndproc ×1