いつもお世話になっています。
時間のかかる処理で、途中に Application.ProcessMessages を入れて
任意のタイミングでアプリを終了できるようにしたいのですが、
終了させることが出来ませんでした。
上記を簡単化したコードが以下となります。
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
i := 0;
while True do
begin
sleep(1000); // 時間のかかる処理
Application.ProcessMessages;
Memo1.Lines.Add(i.ToString);
i := i + 1;
end;
end;
上記のプログラムの Button1Click を実行した後に
画面右上のバッテンを押してアプリの終了を試みたのですが
終了しませんでした。
画面右上のバッテンで終了させる方法は無いでしょうか?
こちらの環境は以下となります。
・Windows 10 Pro バージョン 2004
・Delphi 10.3 Update 3
よろしくお願いいたします。
抜けるための条件をつけてはいかがですか。
onclorequeryイベントで、処理を抜けるためのフラグをonにして、そこではまだフォームを閉じず、上のループを正常に抜けた後にpost Messageでwm_closeをformに送るような感じではないかと思いました。
処理が終わっていないのに強制終了させようとするのは、非常時なら良いかもしれませんが、あまりよい振る舞いとは思えませんでした。
あ さん
返信ありがとうございます。
なるほど、いろいろなサンプルに処理を抜けるためのフラグが入っていたのはそのためだったのですね。
全く気がついていませんでした。ありがとうございます。
フラグを使った実装を検討します。
ありがとうございました。
> 画面右上のバッテンで終了させる方法は無いでしょうか?
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
TerminateProcess( GetCurrentProcess, 0);
end;
とすると閉じることはますが,実務では TerminateProcess はあまりお勧めできません.
> とすると閉じることはますが,
とすると閉じることができますが,
ツイート | ![]() |