3

Delphi には、2 つの編集ボックスと 1 つのボタンがあります。

Edit1 がデフォルトで選択されています。メッセージを使用してフォーカスを変更したい。しかし、私が以下のようにすると、両方の編集で選択範囲が台無しになり、間違ったボックスにキャレットが入ります。

メッセージを使用する理由は、外部アプリケーションでフォーカスを制御できるようにするためです。これはある程度機能しているように見えますが、明らかに、ウィンドウの内部状態は少し混乱しています。外部プログラムのソースがありません。

procedure TForm1.Button1Click(Sender: TObject);
begin
  PostMessage(edit1.handle,WM_KILLFOCUS,0,0);
  PostMessage(edit2.handle,WM_SETFOCUS,0,0);
end;

…で、できるの?メッセージがありませんか?

4

1 に答える 1

10

WM_SETFOCUS と WM_KILLFOCUS はどちらも、ウィンドウ ハンドルが入力フォーカスを受け取ったときと失ったときに Windows がウィンドウ ハンドルに送信する通知メッセージであり、これらを自分で投稿しないでください。代わりに、単にSetFocus(edit2.handle)orを呼び出しedit2.SetFocus()てフォーカスを設定します。

何らかの理由でボタン クリック ハンドラーから同期的にそれを行うことができない場合は、カスタム メッセージを独自のフォームのローカル メッセージ ハンドラーに投稿し、そのメッセージ ハンドラーから SetFocus 呼び出しを行うことができます。

于 2013-03-18T05:10:51.463 に答える