gpt4 book ai didi

Delphi TAction ShortCut 不适用于子窗体

转载 作者:行者123 更新时间:2023-12-03 19:41:33 25 4
gpt4 key购买 nike

我在 Form2 上有一个 Action 列表 (actlst11),它被放置在运行时 TTabSheet 上来自主窗体的页面控件(如 here )。

我添加了一个快捷方式 Num +对于 actZoomIn来自子 Form2 ( actlst11 ) 的操作,但不幸的是它没有触发。 Action 连接到 Form2 上的位按钮。

主窗体的任何操作快捷方式都会触发,放置在选项卡表 (Form2) 上的 Page-Control 内的子窗体的任何快捷方式都不会触发。

可能有什么问题以及如何将快捷方式从 Main 转发到 Child 表单或一些解决方法?

最佳答案

您描述的场景在现代 Delphi 中如您所愿。对 TCustomForm.IsShortCut 的实现进行了更改.较旧的 Delphi 实现维护了一个按表单执行的操作列表,并在 IsShortCut 中检查该列表。 .这意味着只检查与顶级表单关联的操作列表。在现代 Delphi 中,IsShortCut 的实现遍历所有权层次结构。只要子表单最终归顶级表单所有,就会定位子表单的操作列表。

对您来说,最简单的解决方案可能是为 OnShortcut 实现一个事件处理程序。顶级表单的事件。它看起来像这样:

procedure TTopLevelForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
Handled := ChildForm.IsShortCut(Msg);
end;

如果您有多个子表单,那么您可能希望遍历所有子表单,依次为每个表单提供处理快捷方式的机会。这可能看起来像这样:
procedure TTopLevelForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
var
i: Integer;
begin
for i := 0 to FChildForms.Count-1 do
begin
Handled := FChildForms[i].IsShortCut(Msg);
if Handled then
exit;
end;
end;

显然,在这段代码中,您维护 FChildForms .

或者,如果您想实现与 Embarcadero 相同的解决方案,您可以遍历所有权层次结构。

关于Delphi TAction ShortCut 不适用于子窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21410022/

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