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

前端之家收集整理的这篇文章主要介绍了表单 – 如何将窗口焦点消息用于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;

猜你在找的HTML相关文章