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

解決


fyuji  2003-06-25 02:32:53  No: 3863  IP: [192.*.*.*]

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

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

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  IP: [192.*.*.*]

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  IP: [192.*.*.*]

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  IP: [192.*.*.*]

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

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

編集    削除