delphi - 使用 WM_SETFOCUS 和 WM_KILLFOCUS

标签 delphi winapi

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

默认选择“Edit1”。我想使用消息来改变焦点。但如果我按照下面的方法做,这一切都会因为两个编辑中的选择范围、插入符号在错误的框中等而变得困惑。

我使用消息的原因是这样我可以控制外部应用程序中的焦点。这似乎在一定程度上有效,但显然,Windows 内部状态有点困惑。我没有外部程序的源代码。

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

...那么可以吗?我错过了一条消息吗?

最佳答案

WM_SETFOCUS 和 WM_KILLFOCUS 都是 Windows 分别在接收和失去输入焦点时发送到窗口句柄的通知消息,您不应该自己发布这些消息。相反,只需调用 SetFocus(edit2.handle)edit2.SetFocus() 即可设置焦点。

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

关于delphi - 使用 WM_SETFOCUS 和 WM_KILLFOCUS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15469234/

相关文章:

c++ - 使用 AddAccessAllowedAceEx 在 DACL 中进行 ACE 排序

delphi - 释放对象后,对象的过程可以安全使用吗?

delphi - 为什么 TObjectList<T>.Clear 不释放对象?

winapi - 在没有 vsync 的情况下与监视器刷新同步

c++ - GetClipRgn 的正确用法?

c - 衡量分支预测命中率的方法

.net - .NET 中 Win32 的 ________ 等价物

Delphi XE ISAPI WebBroker 文件上传

delphi - 通过电子邮件将 StringList 作为附件发送 - Indy

delphi - TOpenDialog - 压缩为文件