昨夜の質問はありがとうございました。
いろいろと昔を思い出しながら下のプログラムを作ってみましたが、
動きが思うようにならないので質問させてもらいます。
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;
とりあえず、「選択肢が3つの既成のもの」だけ。
MB_YESNOをMB_YESNOCANCELにすれば
「はい」「いいえ」「キャンセル」の3つが表示されます。
>問題は.close1clickの中のreleaseなんですが、
>bdsでコンパイルしたときはbdsでは終了したことになりません。
アプリケーションを終了させたいのならCloseを使います。
Releaseはメモリを開放するだけです。
>Closeに変えると、もう一度「終了しますか」のmessageboxが立ち上がります。
ブレークポイントをはればわかると思いますが、OnCloseQueryが呼ばれているからです。
QUESTさん、Yoshiさん、ありがとうございました。
procedure TFormFiler.Close1Click(Sender: TObject);
begin
Close;
end;
として、ONCloseQueryに処理を任せればいいんですね。
ツイート | ![]() |