gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:48:15 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com