作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序中需要一个内置的屏幕数字键盘。由于各种原因我无法使用 TMS Software或其他商业组件产品。我对下面所示的基于按钮的解决方案感到非常满意,但我还不知道如何解决焦点切换问题,即单击按钮会激活键盘表单,并且我失去了我想要的角色的焦点控制。如果我将键盘按钮保留在目标表单内,我的解决方案就有效,但我想要一个独立于表单的解决方案。有没有办法禁用按钮激活或知道焦点来自哪里,以便我可以使用类似 Scree.ActiveControl :=?? 的东西?把它放回去?
最佳答案
您可以在键盘上使用 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/
我是一名优秀的程序员,十分优秀!