小编Ter*_*rry的帖子

使用WM_SETFOCUS和WM_KILLFOCUS

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

默认情况下选择Edit1.我想用消息改变焦点.但是,如果我按照以下方式执行操作,那么在编辑中的选择范围,错误框中的插入符等等都会搞得一团糟.

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

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

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

delphi winapi

1
推荐指数
1
解决办法
9742
查看次数

将消息发送到TApplication

我有一个可以向另一个应用程序发送消息的应用程序.在Win8之前的系统中,运行正常.你给它类或标题,它使用enumwindows并找到目标窗口.使用Win8,您只能枚举顶级窗口,这意味着TApplication类.发送方对此感到满意,但接收方却不满意.

要捕获消息,我在目标表单中使用此代码...

function Tmain.AppMsgHookFunc(var wmsg : TMessage) : Boolean;
begin
  Result := False; 
  if wmsg.Msg = WM_COPYDATA then begin
    // Post the caught message back to this form.
    postmessage (handle,wmsg.Msg,wmsg.WParam,wmsg.LParam);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

...然后使用application.hookmainwindow等激活它.

这永远不会开火.我看到,如果我使用sendmessage向自己发送消息然后它会触发,但是如果我使用postmessage不起作用,即使在XP上也是如此.有什么建议?

delphi winapi

0
推荐指数
1
解决办法
497
查看次数

标签 统计

delphi ×2

winapi ×2