メッセージボックス表示後にフォーカスしているTEditが選択状態になるのを回避したい


T2  2016-05-14 00:02:41  No: 48179

環境はWindows7、Delphi XEです。

TEditを2つ配置して、OnExitイベントでメッセージを表示しています。

コード例としては↓な感じです。

procedure TForm1.Edit1Exit(Sender: TObject);
begin
   Application.MessageBox('メッセージ', 'タイトル', MB_OK or MB_ICONEXCLAMATION)
end;

その際、マウスの左クリックでEdit1からEdit2へフォーカス移動すると、メッセージ表示後にEdit2の文字列をマウスでドラッグしているような状態?(マウスを動かすとEditの選択範囲が動く)になってしまい、
もう一度マウスをクリックするまでキーボードの入力を受け付けなくなってしまいます。
この状態を回避する方法は何かないでしょうか。

過去ログやGoogleをざっと調べてみましたが、そもそもこの状態をなんと言っていいかわからず同じ問題を見つけられませんでした。
よろしくお願いします。


tor  2016-05-14 00:50:23  No: 48180

問題は、メッセージボックスを表示するとそこにフォーカスが取られてしまうことですね。
さあナアからナイにフォーカスを移すぞ!というつもりであれこれお仕事している最中に、別のところにフォーカスが飛んでしまうためおかしな状態になるわけです。

そういうわけで、マナとかマナで何か確認を取るような処理をするのはお勧めできません。
おそらくエディットボックスからフォーカスが外れた時に内容を検査して、おかしかったら警告を出すということがやりたいのかなと思いますが
メッセージボックスを出すのではなくて、ツネなりフなり別の手段で表示した方がいいのではないでしょうか。

どうしてもメッセージボックスを出したいのなら、マナでいったん自分宛てにカスタムメッセージをミしておいて
それを受け取ったところでメッセージボックスを表示するという方法があります。
スススススススススススススススススススススススススススススススススススススススス
ニコ ヤイ
トコ イーアカッーオッアウィ金ゥ アキコエウコエア  書込者ノト:ロ 」。ィ「 ン
モコ 

さん、ありがとうございます。

やりたいことはまさにその通りでした。
メッセージボックス以外の手段で表示するようにします。
ありがとうございました。


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

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






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