微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

表单 – 如何将窗口焦点消息用于Delphi屏幕键盘表单

我的应用程序中需要一个内置的屏幕数字小键盘.由于各种原因,我无法使用 TMS Software或其他商业组件产品.我对下面显示的基于按钮的解决方案非常满意,但我还不知道如何解决焦点切换问题,单击按钮激活键盘形式,我失去了我想要角色的聚焦控制.如果我将键盘按钮保持在目标表单内,我的解决方案可行,但我想要一个独立于表单的解决方案.有没有办法禁用按钮激活或知道焦点来自哪里,以便我可以使用像Scree.ActiveControl:= ??把它还掉?

解决方法

我不知道如何使用单击它时无法对焦的框架创建窗口,因此下面的框架没有边框.正如Andreas所说,使用TSpeedButtons.
type
  TKeypadForm = class(TForm)
    SpeedButton1: TSpeedButton;
    procedure SpeedButton1Click(Sender: TObject);
  private
    procedure CreateParams(var Params: TCreateParams); override;
    procedure WMMouseActivate(var Message: TWMMouseActivate); message WM_MOUSEACTIVATE;
  end;

procedure TKeypadForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.Style := WS_POPUP or WS_THICKFRAME;
end;

procedure TKeypadForm.WMMouseActivate(var Message: TWMMouseActivate);
begin
  Message.Result := MA_NOACTIVATE;
end;

procedure TKeypadForm.SpeedButton1Click(Sender: TObject);
begin
  PostMessage(GetFocus,WM_KEYDOWN,VK_NUMPAD1,MakeLong(0,MapVirtualKey(VK_NUMPAD1,0)));
end;

以下是如何显示键盘窗口

procedure TForm18.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_RETURN: ShowWindow(KeypadForm.Handle,SW_SHOWNOACTIVATE);
    VK_ESCAPE: ShowWindow(KeypadForm.Handle,SW_HIDE);
  end;
end;

原文地址:https://www.jb51.cc/html/232187.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐