2010-01-13 89 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