在非对话框表单上显示帮助问号按钮(biHelp)?

时间:2012-02-08 12:30:39

标签: delphi delphi-2010

有没有办法可以强制帮助问号按钮在Delphi 2010中不是对话框的表单上显示?

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

我正在考虑覆盖CreateParams程序,但我不确定要用什么代码来强制按钮显示?

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

您想在非模态窗口的顶部(抓取器)非客户区域中显示一个帮助按钮,该窗口旁边显示最大化和最小化?

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

Application.HelpContext(aHelpContext);

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

更新以下评论中的链接问题提到将表单放入这样的帮助模式,由DavidH提供:

  SendMessage(Handle, WM_SYSCOMMAND, SC_CONTEXTHELP, 0);

端;