TTouchKeyboard:将击键发送到同一程序?

发布于 2024-12-08 11:48:30 字数 251 浏览 0 评论 0原文

我看到您的提示:TTouchKeyboard:将击键发送到其他程序

我怎样才能将密钥发送到同一 Delphi 应用程序中的其他表单?

如何使用 TTouchKeyboard 调用表单? (显示、showModal、参数?)

谢谢!

I saw your tip about : TTouchKeyboard: send keystroke to other program

How can I send the keys to the other form in the same Delphi application?

And how can I call the form with the TTouchKeyboard? (Show, showModal, parameters?)

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

2024-12-15 11:48:30

ShowModal 是一个坏主意...您将焦点集中在调用者...

您仍然可以对包含键盘的表单使用相同的提示,以保持禁用状态...

然后,您可以添加一个带有键盘句柄的属性应该获得击键的表单。

最后,您破解 TTouchKeyboard 以使用您之前设置的句柄将焦点设置到表单...

例如,您的 TTouchKeyboard 破解可能如下所示:

type
  TMyKeyboard = class(TTouchKeyboard)
  protected
    procedure WndProc(var Message: TMessage); override;
  end;
type
  TForm1 = class(TForm)

.. ...

  private
    fHandleOfTheTargetForm: HWND;
  public
    property HandleOfTheTargetForm: HWND read fHandleOfTheTargetForm write fHandleOfTheTargetForm;

您可以在此处

procedure TMyKeyboard.WndProc(var Message: TMessage);
begin
  if (Assigned(Form1)) then
  begin
    if Form1.HandleOfTheTargetForm <> 0 then
    begin
      SetForegroundWindow(HandleOfTheTargetForm);
    end;
  end;
  inherited;
end;

找到一个快速演示项目。

ShowModal is a bad idea... you focus the caller...

You can still use the same tip with the form which contains the keyboard, in order to stay disable...

Then, you can add a property with the handle of the form which should get the keystroke.

And finally, you hack the TTouchKeyboard to set the focus to the form with the handle you previously set...

For instance, your TTouchKeyboard hack could be like this:

type
  TMyKeyboard = class(TTouchKeyboard)
  protected
    procedure WndProc(var Message: TMessage); override;
  end;
type
  TForm1 = class(TForm)

...

  private
    fHandleOfTheTargetForm: HWND;
  public
    property HandleOfTheTargetForm: HWND read fHandleOfTheTargetForm write fHandleOfTheTargetForm;

...

procedure TMyKeyboard.WndProc(var Message: TMessage);
begin
  if (Assigned(Form1)) then
  begin
    if Form1.HandleOfTheTargetForm <> 0 then
    begin
      SetForegroundWindow(HandleOfTheTargetForm);
    end;
  end;
  inherited;
end;

You can find a quick demo project here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文