8

我一直在尝试更改显示在表单主标题栏上的按钮的工具提示文本,但没有运气。

简而言之,我们利用 Windows 窗体的“帮助”按钮有其他用途。这工作正常。问题是当将鼠标悬停在该按钮上时,会出现“帮助”工具提示,这对应用程序没有任何意义。

理想情况下,有一些方法可以为我的应用程序更改该工具提示的文本;但是,在这一点上,只要找到一种完全禁用工具提示的方法,我就会感到满意。

我知道您可以通过修改 regedit 中的“UserPreferencesMask”键来禁用整个操作系统的工具提示,但我真的很想有一种方法让它只影响我的应用程序。

同样,理想情况下,有一些方法可以使用托管代码来做到这一点,但我不反对链接到 Windows API 或类似的东西。

感谢您提供解决此问题的任何建议!

4

2 回答 2

1

作为一种解决方法,您可能不使用帮助按钮,而是:添加您的自定义按钮。

虽然这个样本不是那么完美,但它向你展示了这个想法。

于 2010-03-30T22:15:33.393 回答
0

这是一个非常有趣的问题。我的第一个想法是使用 GetSysMenu 更改系统菜单。我尝试删除和重命名“关闭”项目,但关闭按钮的工具提示没有改变。然后我尝试捕获工具提示窗口的HWND,但没有成功。如果我让表单(我在 Delphi 中工作)显示一个名为“Test”的工具提示,我可以通过 FindWindow(nil, 'Test') 获取它的 HWND,然后我可以向它发送消息 WM_CLOSE。

在下面的示例代码中,我使用了一个计时器来不断地搜索工具提示。这对性能不利,因此需要准确找出工具提示出现的时间。在这种情况下,当工具提示与客户端控件相关联时,可以简单地使用 OnHint 事件。

procedure TForm1.Timer1Timer(Sender: TObject);
var
  h: HWND;
begin
  h := FindWindow(nil, 'Test');
  if h <> 0 then
    SendMessage(h, WM_CLOSE, 0, 0);
end;

但是,当工具提示与标题栏按钮相关联时,会出现两个问题。

  1. 我无法使用 FindWindow(nil, 'Close'); 获得关闭按钮的工具提示句柄;
  2. 如果我们能够得到句柄,我们需要一个聪明的地方来编写代码——我们不希望它在计时器中。OnHint(在 Delphi 中 - 所有本机 Win32 应用程序中都存在类似事件)可能仅适用于客户端控件。可以使用 WM_NC* 消息来推断何时显示标题栏工具提示。
于 2010-03-31T12:09:38.087 回答