2010-01-13 128 views
0

我使用下面的代码来捕获当我的程序的最小化按钮被按下时,这样我就可以从任务栏隐藏窗体,并且因此最小化到系统托盘。WM_SysCommand防止在delphi中移动窗口

procedure TForm1.WMSysCommand; 
begin 
    if (Msg.CmdType = SC_MINIMIZE) then 
    begin 
    form1.Hide; 
    show1.Checked :=false; 
    hide1.Checked :=true; 
    end; 
    if (Msg.CmdType = SC_CLOSE) then form1.Close; 
end; 

我不得不把捕获的关闭按钮也因为此代码防止通过关闭按钮程序结束。我需要帮助的是如何修复通过已停止使用此代码的标题栏拖动程序窗口。

+1

你不应该叫Form1.XYZ方法因为你的代码已经在TForm1的一个方法中。只需致电XYZ,例如Form1.Hide - >隐藏。 – dummzeuch 2010-01-13 09:46:00

回答

6

如果重写Windows消息的,你需要照顾要么处理所有可能的情况,或呼吁所有未处理的情况下继承的代码的处理:

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand); 
begin 
    if (Msg.CmdType = SC_MINIMIZE) then 
    begin 
    Hide; 
    show1.Checked := False; 
    hide1.Checked := True; 
    Msg.Result := 0; 
    exit; 
    end; 
    inherited; 
end; 
+1

不要忘记设置消息结果。 (对于这个消息,它应该是零)。 – 2010-01-13 08:52:37