forms - 如何在 Delphi 屏幕键盘窗体中使用窗口焦点消息

标签 forms delphi keyboard focus

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

enter image description here

最佳答案

您可以在键盘上使用 TSpeedButton 来执行此任务。 TSpeedButton 不支持 Focus。但表格确实如此。这很丑陋,即使你将焦点放回主窗体,焦点也会在两个窗体之间闪烁。所以我会尝试创建一个没有焦点的表单。

名为 WS_EX_NOACTIVATE 的标志可用于创建一个窗口(窗体),当用户单击它时,该窗口不会成为前台窗口。此外,当用户最小化或关闭前台窗口时,系统不会将此窗口置于前台。

要创建不可激活的表单,请重写 CreateParams 方法:

procedure TMainForm.CreateParams(var Params: TCreateParams) ;
 //const WS_EX_NOACTIVATE = $8000000;
 begin
   inherited;
   Params.ExStyle := Params.ExStyle + WS_EX_NOACTIVATE;
 end;

当Delphi创建窗体时,Create方法调用CreateWindowEx API函数来创建实际的窗口。

在执行 CreateWindowEx 之前,会调用 CreateParams 方法 - CreateParams 允许您在创建窗口时更改窗口的默认样式,以满足您的特定需求。

关于forms - 如何在 Delphi 屏幕键盘窗体中使用窗口焦点消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5910278/

相关文章:

iphone 输入类型(带两位小数的数字)

提交时的 JavaScript 单选按钮

html - 可以从 html 表单发出 XML-RPC 请求吗?

javascript - 当我发布表单时,提交表单时无法调用 null 的方法 "submit "

web-services - 从 64 位 Delphi DLL 调用 SOAP web 服务

按下 java 键来执行操作

javascript - 如何设置 Angular 验证以处理模糊和表单提交?

Delphi自定义Listview绘制

multithreading - Delphi XE2中的异步ReadFile

安卓悬浮键盘