在 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/