クローズボックスをクリックしても、そのアプリケーションを終了させない方法について、質問があります。
自分なりに考えた結果、以下のコードで実装することは出来たのですが、
なんか、動作が怪しい気がします。
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
Ret:Integer;
msg: TMsg;
begin
Ret := MessageBox(Handle, '終了しますか?', '終了', MB_OKCANCEL or MB_ICONHAND);
if Ret = IDCANCEL then
begin
while GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
Halt(Msg.wParam);
end;
end;
もっといい方法は無いでしょうか?
どなたか、よろしくお願いします。
TForm の OnCloseQuery イベントが使えます。
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MessageDlg('終了しますか?',mtConfirmation,mbOKCancel,0) = mrCancel then
Canclose := false;
end;
OnCloseイベントではなくOnCloseQueryイベントで
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MessageBox(Handle,
'終了しますか?','終了',MB_OKCANCEL or MB_ICONHAND)=IDCANCEL
then CanClose := False
else CanClose := True;
end;
ではだめなんでしょうか?
あぁ〜、なるほど。
FormCloseQueryを使えばよかったんですね・・・
的確なアドバイス、ありがとうございました。
(って、自分が無知なだけですね・・・)
ツイート | ![]() |