掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
時間のかかる処理を行う際、進捗を表示させているModalダイアログの右上の×ボタンを押したときに処理を中断する方法 (ID:150180)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
いつもお世話になっております。現在、ある長い処理をする際、2つ目のフォーム(Form2)に進捗状況を表示させています。 このフォームでは、Escapeキーを押したとき、処理を中断する仕組みを設けており、実際に以下のとおりで動いています。ここで、2つめのフォームの右上の×ボタンをおしたとき、処理を中断できるよう、以下のようにFormCloseQueryを追加しました。 しかし、実際に右上の×ボタンを押しても、確認用のShowMessageは発生せず、フォームも閉じませんでした。 ここで、×ボタンを押したとき、処理を中断してフォームを閉じたい場合、どのようにすればよいか、ご教示をお願いできますでしょうか。 (FormKeyPressのイベントは問題なく発生しているのに、FormCloseQueryが発生しない理由もよくわかっておりません。) ※環境はWindows10 + Delphi6 Personalです。 procedure TForm2.FormActivate(Sender: TObject); begin (時間のかかる処理⇒ループ内でApplication.ProcessMessageを回しており、CannotProgressがTrueになったときはすぐに処理を抜けられるようになっている。) PostMessage(Handle, WM_CLOSE, 0, 0); end; procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char); begin if Key = #27 then CannotProgress := True; end; procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin ShowMessage('処理をキャンセルしました。'); // 確認用 if not CannotProgress then CanClose := False; // FormActivateの中断処理が無事終わってからWM_Closeを送って閉じる想定のため、ここでは閉じない。 CannotProgress := True; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.