【发布时间】:2012-02-08 12:30:38
【问题描述】:
有没有一种方法可以强制帮助问号按钮在 Delphi 2010 中不是对话框的表单上可见?
我想使用帮助问号,以便用户可以单击它然后转到控件,但默认情况下,它仅在边框样式为对话框时可用,但我们的应用程序不使用对话框表单
我正在查看 Overriding the CreateParams 过程,但我不确定要在其中放入什么代码来强制显示按钮?
保罗
【问题讨论】:
标签: delphi delphi-2010
有没有一种方法可以强制帮助问号按钮在 Delphi 2010 中不是对话框的表单上可见?
我想使用帮助问号,以便用户可以单击它然后转到控件,但默认情况下,它仅在边框样式为对话框时可用,但我们的应用程序不使用对话框表单
我正在查看 Overriding the CreateParams 过程,但我不确定要在其中放入什么代码来强制显示按钮?
保罗
【问题讨论】:
标签: delphi delphi-2010
根据 MSDN,这不是 Delphi 特定的限制,而是由 WinAPI 强加的。您可能知道,帮助问号是通过 WS_EX_CONTEXTHELP 样式打开的,不能与 WS_MAXIMIZEBOX 和 WS_MINIMIZEBOX 样式结合使用。因此,您可以拥有一个非对话框表单并显示问号,前提是该表单的标题中没有最大化和最小化按钮。如果您还需要最大化和最小化按钮,那么我认为您应该将窗口子类化并提供自定义非客户端绘制(自己绘制问号)和非客户端命中测试处理。
【讨论】:
SetCapture 和 Screen.Cursor := scHelp 来操纵某些东西,但这听起来像是一个成熟的问题,而不是在其他答案的 cmets 中涵盖的内容。您应该检查是否有人已经询问过手动将表单置于“帮助模式”的问题,如果找不到答案,请自行询问。
您希望在最大化和最小化旁边出现的非模态窗口的顶部(抓取器)非客户区中添加一个帮助按钮?
在您的表单上使用TJvCaptionButton(包含在 JEDI VCL 中),在控制按钮上放置一个帮助问号位图,然后从这样的整数帮助上下文中打开特定页面的帮助:
Application.HelpContext(aHelpContext);
因为它是在窗口的非客户区绘制的,所以您可能会在某些 Windows 主题设置上遇到一些奇怪的行为;例如,我认为 Jedi JvCaptionButtons 在启用 Aero 的 Win7 上看起来不太原生。
更新下面 cmets 中的链接问题提到将表单置于这样的帮助模式,由 DavidH 提供:
SendMessage(Handle, WM_SYSCOMMAND, SC_CONTEXTHELP, 0);
结束;
【讨论】: