掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
時間のかかる処理を行う際、進捗を表示させているModalダイアログの右上の×ボタンを押したときに処理を中断する方法 (ID:150181)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 実際に以下のとおりで動いています。 はてな ? ( イスカンダルのユリーシャ風に ) この後の文章では「以下のとおり」では動かないとも解釈できるような ? もしかして Form2 をモーダル表示しています ? でしたら [X] ボタン押下の検出には WM_NCLBUTTONDOWN メッセージを使用してみてください.. //----------------------------------------------------------------------------- // WM_NCLBUTTONDOWN メッセージ処理 // FCancel は終了判定用のフラグ // 時間のかかる処理のループ内あるいはールバック関数内でこの値をチェックする //----------------------------------------------------------------------------- procedure TForm2.WMNCLButtonDown(var Message: TWMNCLButtonDown); begin inherited; if Message.HitTest = HTCLOSE then begin FCancel := True; end; end; //============================================================================= // Form2 の OnKeyPress イベント処理 // FCancel は終了判定用のフラグ // 時間のかかる処理のループ内あるいはールバック関数内でこの値をチェックする //============================================================================= procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char); begin if Key = Char(VK_ESCAPE) then begin FCancel := True; end; end; //============================================================================= // フォームが閉じる時の処理 // ModalResult の値は処理をキャンセルしたかどうかの判定に使用する //============================================================================= procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if FCancel then begin ModalResult := mrCancel; end else begin ModalResult := mrOk; end; end; 参考 [ 07_メッセージ処理メソッドの作成 ] http://mrxray.on.coocan.jp/Delphi/Others/A_IDETechnique.htm#07
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.