3
我有一個應用程序隱藏自己關閉的紅十字。用戶可以通過右鍵單擊托盤圖標並選擇退出來退出它。但是,這將顯然是從關停阻止Windows,所以我做了一個程序,一個WM_QUERYENDSESSION響應,使收盤,這是相關代碼:不會阻止窗口關閉OnCloseQuery
procedure TMainForm.OnWindowsEnd(var Msg: TMessage); // responds to message WM_QUERYENDSESSION;
begin
AllowClose:=true;
Close;
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=AllowClose;
if NOt AllowClose then
Hide;
end;
但奇怪的事情持續發生。當我發出關機時,此應用程序關閉很好。但就是這樣。當我發出第二次關機時,系統退出正常。 (我在WinXP中測試這個)。
可能是什麼原因?謝謝
ANSWER 代碼應該是這樣的
procedure TMainForm.OnWindowsEnd(var Msg: TMessage); // responds to message WM_ENDSESSION;
begin
// Possible checking for flags, see http://msdn.microsoft.com/en-us/library/aa376889%28v=vs.85%29.aspx
AllowClose:=true;
Msg.Result:=1;
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=AllowClose;
if NOt AllowClose then
Hide;
end;
啊我忘了提及我試過WM_ENDSESSION和WM_QUERYENDSESSION(根據MSDN,這兩個與關閉Windows有關)。將嘗試。 –
好吧,現在我又發現自己又傻了。我閱讀了關於MSDN關閉的描述,並且在那裏解釋了這一點,但在處理消息時,我無法確定如何「返回TRUE」。你能幫我解決嗎? –
在你的消息處理程序中,執行'msg.Result:= 1'。真的是不是0的東西。 –