Formを閉じるにはclose or release??

解決


AS  2013-12-02 06:55:27  No: 45664

昨夜の質問はありがとうございました。
いろいろと昔を思い出しながら下のプログラムを作ってみましたが、
動きが思うようにならないので質問させてもらいます。

OnCloseQueryの方は問題なく動きます。
問題は.close1clickの中のreleaseなんですが、
bdsでコンパイルしたときはbdsでは終了したことになりません。
Closeに変えると、もう一度「終了しますか」のmessageboxが立ち上がります。

何故なんでしょうか??

Formを増やしたくなくて、messageboxを使いましたが、選択肢が3つのFormを自作しようと思ってます。選択肢が3つの既成のものってありますかね。
初歩的な質問ですが、よろしくお願いします。

procedure TFormFiler.Close1Click(Sender: TObject);
begin
  if Application.messagebox('終了しますか','終了しますか',MB_YESNO)=IDYES then
  begin
    if SaveCheck=true then
    begin
      if Application.messagebox('保存しますか','保存確認',MB_YESNO)=IDYES
      then FilerSave else SaveCheck:=false;
    end;
    if SaveCheck=false then  release;
  end
end;

procedure TFormFiler.OnCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if Application.messagebox('終了しますか','終了しますか',MB_YESNO)=IDYES then
  begin
    if SaveCheck=true then
    begin
      if Application.messagebox('保存しますか','保存確認',MB_YESNO)=IDYES
      then FilerSave else SaveCheck:=false;
      if SaveCheck<>false then CanClose:=false;
    end;
  end
  else
    CanClose:=false;
end;


Quest  2013-12-02 10:08:00  No: 45665

とりあえず、「選択肢が3つの既成のもの」だけ。
MB_YESNOをMB_YESNOCANCELにすれば
「はい」「いいえ」「キャンセル」の3つが表示されます。


Yoshi  2013-12-02 15:47:39  No: 45666

>問題は.close1clickの中のreleaseなんですが、
>bdsでコンパイルしたときはbdsでは終了したことになりません。
アプリケーションを終了させたいのならCloseを使います。
Releaseはメモリを開放するだけです。

>Closeに変えると、もう一度「終了しますか」のmessageboxが立ち上がります。
ブレークポイントをはればわかると思いますが、OnCloseQueryが呼ばれているからです。


AS  2013-12-03 16:12:05  No: 45667

QUESTさん、Yoshiさん、ありがとうございました。

procedure TFormFiler.Close1Click(Sender: TObject);
 begin
   Close;
 end;

として、ONCloseQueryに処理を任せればいいんですね。


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

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






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