加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

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

发布时间:2020-12-14 21:13:31 所属栏目:资源 来源:网络整理
导读:我的应用程序中需要一个内置的屏幕数字小键盘.由于各种原因,我无法使用 TMS Software或其他商业组件产品.我对下面显示的基于按钮的解决方案非常满意,但我还不知道如何解决焦点切换问题,单击按钮激活键盘形式,我失去了我想要角色的聚焦控制.如果我将键盘按钮
我的应用程序中需要一个内置的屏幕数字小键盘.由于各种原因,我无法使用 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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读