如何在Delphi中显示Vista风格的气球提示?

时间:2008-11-18 08:54:46

标签: delphi winapi

在输入验证时,我使用气球提示而不是消息框。 我的问题是,在Vista上,它们具有圆角的旧XP风格,而不是更新的矩形外观。

我尝试使用CreateWindowEx和tooltips_class32创建它们,或者使用SendMessageW和EM_SHOWBALLOONTIP显示Edit的关联balloontip,结果是一样的。 在Visual Studio和C#中执行相同的操作会产生Vista样式的气球提示。

当你在密码编辑中切换Caps Lock时,你可以看到我需要的气球提示示例,就像Windows登录一样。

3 个答案:

答案 0 :(得分:16)

如果您正在使用Delphi 2009,那么添加气球提示相当简单,尽管文档很差。 (惊讶,惊讶)

  • 在表单上删除TBalloonHint
  • 如果需要,删除TImageList以包含图标。
  • 将TIMageList链接到TBalloonHint
  • 将表单的CustomHint属性设置为TBalloonHint
  • 确保为控件设置ShowHint和ParentCustomHint为真。

下一位是very non-obvious

  • 将控件的“提示”属性设置为“标题|提示|图像索引”

你已经完成了。这看起来不像100%vista,可能是由于字体选择。但它非常接近。

Delphi 2009
(来源:codegear.com

答案 1 :(得分:3)

可以在Delphi 2009 reviewers guide中读取每个VCL组件现在都有一个CustomHint属性。它可以设置为TCustomHint的任何后代。

请确保在Vista中启用气球提示,否则他们将无法显示。

答案 2 :(得分:2)

Delphi 2009中的TCustomHint有四个受保护的ShowHint重载,当被调用时,允许您根据需要和特定位置放置TCustomHint:

procedure ShowHint; overload;
procedure ShowHint(Point: TPoint); overload;
procedure ShowHint(Rect: TRect); overload;
procedure ShowHint(Control: TControl); overload;

您需要做的就是以您想要的样式实现提示(或者如果它足够接近,只需从TBalloonHint下降)并使这些方法公开,以便能够随时随地提供提示想。

注意:更改TCustomHint的Title属性以更改显示的文本,除非您使用以TControl作为参数的ShowHint。在这种情况下,它从控件的Hint属性中获取它(并将其放在TCustomHint的Title属性中)。