クローズボックスをクリックしても、終了させない方法

解決


fyuji  2003-06-25 02:32:53  No: 3863

クローズボックスをクリックしても、そのアプリケーションを終了させない方法について、質問があります。

自分なりに考えた結果、以下のコードで実装することは出来たのですが、
なんか、動作が怪しい気がします。

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;

もっといい方法は無いでしょうか?
どなたか、よろしくお願いします。


Halbow  2003-06-25 02:58:25  No: 3864

TForm の OnCloseQuery イベントが使えます。

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if MessageDlg('終了しますか?',mtConfirmation,mbOKCancel,0) = mrCancel then
    Canclose := false;
end;


通りすがりです  2003-06-25 03:06:53  No: 3865

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;
ではだめなんでしょうか?


fyuji  2003-06-25 03:10:17  No: 3866

あぁ〜、なるほど。
FormCloseQueryを使えばよかったんですね・・・

的確なアドバイス、ありがとうございました。
(って、自分が無知なだけですね・・・)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加