3

在 Delphi 中,我有两个编辑框和一个按钮。

默认选择 Edit1。我想使用消息来改变焦点。但是,如果我按照以下方式进行操作,那么两次编辑中的选择范围、插入符号在错误的框中等都会变得混乱。

我使用消息的原因是我可以控制外部应用程序中的焦点。这似乎可行,但很明显,Windows 内部状态有点混乱。我没有外部程序的来源。

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)edit2.SetFocus()设置焦点。

如果由于某种原因您无法从按钮单击处理程序同步执行此操作,您可以以自己的形式将自定义消息发布到本地消息处理程序,并从该消息处理程序进行 SetFocus 调用。

于 2013-03-18T05:10:51.463 回答