【问题标题】:Simulate F1 kepress on active control to load help system - Delphi模拟 F1 按住主动控制以加载帮助系统 - Delphi
【发布时间】:2013-12-10 17:43:11
【问题描述】:

我们正在向应用程序的工具栏添加一个帮助按钮。

当用户点击这个按钮时,我们需要加载他们所在控件的帮助系统

例如,如果它们在联系人表单的地址框中,我需要使用其上下文 id 加载帮助系统

我正在考虑尝试模仿 F1 按键,然后它会处理事物的上下文 id 元素并加载帮助文件

但是,我无法让它工作,因为它会尝试根据活动控件而不是我所在的控件加载帮助,即联系地址

有没有办法做到这一点?本质上,我需要从以前活动的控件发送 F1 按键(假设当前活动的控件是我的工具栏按钮)

我们使用的是 Delphi 2010

干杯

保罗

【问题讨论】:

    标签: delphi delphi-2010


    【解决方案1】:

    我认为您需要一个工具按钮OnClick 处理程序,它可以像这样简单:

    procedure TMyForm.ToolButton1Click(Sender: TObject);
    begin
      if Assigned(ActiveControl) then begin
        Application.HelpContext(ActiveControl.HelpContext);
      end;
    end;
    

    使这项工作有效的原因是工具栏上的控件永远不会成为活动控件。

    【讨论】:

    • 感谢它在启动帮助系统方面的作用。但是,帮助按钮位于主窗体的工具栏上。当我使用此代码时,即使我将注意力集中在具有自己的上下文相关帮助的控件上,也会使用正在查看的表单的帮助来调用帮助系统?如果我在网格上并按 F1,我会得到网格的帮助
    • 我在写答案时测试了代码。有用。您的应用中一定有一些不寻常的地方。
    • 嗨,大卫,现在这很好用,我只需要编写一些代码来支持控件的层次结构。我们使用 DevExpress 网格,所以在我的例子中,活动控件是网格中的一个单元格,我需要回到父级,即网格
    【解决方案2】:

    您的工具栏有问题。系统工具栏通常不会获得焦点——它从来都不是活动控件。如果您使用的是真正的TToolBar 和TToolButton,则不会出现此问题。即使TSpeedButton 也不会有这个问题。为工作使用正确的控件。

    另外,不要尝试“模拟”键盘事件。直接拨打Application.HelpContext即可。

    【讨论】:

    • 感谢这个 Rob,但是,正如我刚才提到的,我现在有一个问题,application.contextid 似乎是 1 级太高了?它不是网格的上下文 ID,而是父表单的 ID?
    • 你的cmets中有问号,但我不知道你在问什么问题。
    • 嗨 Rob 我试图找出上下文编号错误的原因,但如上所述,我现在已经对其进行了排序,感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    相关资源
    最近更新 更多