我的应用程序中需要一个内置的屏幕数字小键盘.由于各种原因,我无法使用
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;