【问题标题】:Show help question mark button (biHelp) on non dialog Form?在非对话框表单上显示帮助问号按钮(biHelp)?
【发布时间】:2012-02-08 12:30:38
【问题描述】:

有没有一种方法可以强制帮助问号按钮在 Delphi 2010 中不是对话框的表单上可见?

我想使用帮助问号,以便用户可以单击它然后转到控件,但默认情况下,它仅在边框样式为对话框时可用,但我们的应用程序不使用对话框表单

我正在查看 Overriding the CreateParams 过程,但我不确定要在其中放入什么代码来强制显示按钮?

保罗

【问题讨论】:

    标签: delphi delphi-2010


    【解决方案1】:

    根据 MSDN,这不是 Delphi 特定的限制,而是由 WinAPI 强加的。您可能知道,帮助问号是通过 WS_EX_CONTEXTHELP 样式打开的,不能与 WS_MAXIMIZEBOX 和 WS_MINIMIZEBOX 样式结合使用。因此,您可以拥有一个非对话框表单并显示问号,前提是该表单的标题中没有最大化和最小化按钮。如果您还需要最大化和最小化按钮,那么我认为您应该将窗口子类化并提供自定义非客户端绘制(自己绘制问号)和非客户端命中测试处理。

    【讨论】:

    • 感谢 Stan,这看起来对代码来说非常讨厌!我不知道从哪里开始!你知道我如何使用单独的按钮产生相同的功能吗?我们的应用程序使用页面控件,我们已经在右侧有一个关闭按钮,允许用户关闭活动页面,所以我想我们可以添加一个帮助问号按钮,当用户单击它时,行为然后转到标准的 Windows 行为
    • Paul,我怀疑您可能会使用 SetCaptureScreen.Cursor := scHelp 来操纵某些东西,但这听起来像是一个成熟的问题,而不是在其他答案的 cmets 中涵盖的内容。您应该检查是否有人已经询问过手动将表单置于“帮助模式”的问题,如果找不到答案,请自行询问。
    【解决方案2】:

    您希望在最大化和最小化旁边出现的非模态窗口的顶部(抓取器)非客户区中添加一个帮助按钮?

    在您的表单上使用TJvCaptionButton(包含在 JEDI VCL 中),在控制按钮上放置一个帮助问号位图,然后从这样的整数帮助上下文中打开特定页面的帮助:

    Application.HelpContext(aHelpContext);
    

    因为它是在窗口的非客户区绘制的,所以您可能会在某些 Windows 主题设置上遇到一些奇怪的行为;例如,我认为 Jedi JvCaptionButtons 在启用 Aero 的 Win7 上看起来不太原生。

    更新下面 cmets 中的链接问题提到将表单置于这样的帮助模式,由 DavidH 提供:

      SendMessage(Handle, WM_SYSCOMMAND, SC_CONTEXTHELP, 0);
    

    结束;

    【讨论】:

    • 嗨 Warrren,理想情况下我需要模仿 windows 的行为吗?按钮,即用户单击问号,然后单击控件,一旦单击控件,控件的帮助将显示在弹出窗口中。
    • 你问了一个单独的问题:stackoverflow.com/questions/9212917/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多