Delphi 2009 - 通过双击SysMenu恢复窗口时的句柄?

Jam*_*mes 3 delphi vcl devexpress window-messages delphi-2009

当用户通过双击标题栏恢复表单时,我需要处理.我尝试处理WM_SYSCOMMAND窗口消息但是这仅在用户通过单击系统菜单中的恢复按钮来恢复表单时才有效.

如果这很重要,我正在使用DevExpress功能区表单组件.

谢谢.

Fra*_*ois 6

我认为你的意思是双击标题栏,因为双击系统菜单会关闭表单.
WM_SYSCOMMAND应该工作,因为双击标题栏以恢复表单时的消息序列是:

Message posted: hwnd=$004E0820 WM_NCLBUTTONDBLCLK wParam $00000002 lParam $000705D4 Process Project1.exe (2380)
=> Message sent: hwnd=$004E0820 WM_SYSCOMMAND restore cmd requested (-44,-44) Process Project1.exe (2380)
Message sent: hwnd=$004E0820 WM_WINDOWPOSCHANGING wParam $00000000 lParam $0012F4CC Process Project1.exe (2380)
Message sent: hwnd=$004E0820 WM_GETMINMAXINFO wParam $00000000 lParam $0012EF6C Process Project1.exe (2380)
Message sent: hwnd=$004E0820 WM_NCCALCSIZE wParam $00000001 lParam $0012F4A0 Process Project1.exe (2380)
Message sent: hwnd=$004E0820 WM_NCPAINT update region  40040F4B Process Project1.exe (2380)
Message sent: hwnd=$004E0820 WM_ERASEBKGND wParam $31011DCA lParam $00000000 Process Project1.exe (2380)
Message sent: hwnd=$004E0820 WM_WINDOWPOSCHANGED wParam $00000000 lParam $0012F4CC Process Project1.exe (2380)
Run Code Online (Sandbox Code Playgroud)

问题是Windows.pas中缺少CmdType const SC_RESTORE2 = 61730 // 0xF122 .

请参阅下面的工作代码:

type
  TForm7 = class(TForm)
  private
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
  end;

var
  Form7: TForm7;

implementation

{$R *.dfm}

{ TForm7 }

const
  SC_RESTORE2 = 61730; //0xF122

procedure TForm7.WMSysCommand(var Message: TWMSysCommand);
begin
  case Message.CmdType of
    SC_RESTORE2 : beep;
  end;
  inherited;
end;
Run Code Online (Sandbox Code Playgroud)

更新:SC_RESTORE2MSDN上的WM_SYSCOMMAND通知引用(请参阅"C#中的值"部分)