2010-02-18 253 views
3

在德尔福2010年(不知道其他版本)Application.HintColor似乎没有效果在Windows 7上运行。它在XP上提供了所需的颜色。任何解决方法?德尔福Application.HintColor

回答

4

HintColor是像一些在VCL中,其他*颜色属性,如果你正在运行一个主题OS为主题的应用程序,它们可以画的控制时,可以忽略不计的。提示是有点不同,因为对他们来说,它是Vista或以上,不是XP或以上。如果您在Controls.pas中查看THintWindow.Paint,则可以看到这一点 - 如果它是Vista且主题已启用,则它特别描绘了Vista渐变背景。

这通常是好东西,因为您希望您的应用程序适合操作系统的外观和用户的偏好。

如果你真的要覆盖这一点,你将需要:

  • 子类THintWindow
  • 显示提示
  • 在此上课的时候让你的应用程序来使用这个新的提示类,覆盖绘画方法绘制如你所愿

创建一个新的提示类从THintWindow降为了使应用程序使用新类提示,请将事件处理程序分配给TApplication.OnShowHintthe easiest way to do this is via a TApplicationEvents component on your main form)并更改HintInfo参数的HintWindowClass field to be your new class

在您的新提示类中,您需要覆盖PaintNCPaintNCPaint将绘制边框,并且您将需要绘制非主题边框(可能使用DrawEdge。)更改Paint以用您选择的颜色填充背景,然后在提示的矩形中使用DrawText绘制文本,并使用适当的文字包装和对齐标志。如果仔细查看VCL代码,您可以看到几个硬编码的矩形偏移量,您可能想要模拟这些代码以获得VCL使用的代码中相同的矩形。

你可以使用这种技术做各种有趣的提示变化。例如,我最近创作的一幅画改变了这幅画,所以画了一个大胆的标题,然后在其中提供了其他信息。

最后:为什么要设置颜色?它是警告用户一些事情还是提供一些其他反馈?如果是这样,请考虑使用比颜色更多的东西 - 您可以使用此技术更改任何您想要提示的提示。尝试绘制警告图标或使用丰富格式的文本。我建议你尽量保持一般主题的外观,并对主题绘画进行编码调整,而不是完全压倒它,因为除非有很好的理由,否则应该尽量保持用户选择的操作系统/外观。

0

将'启用运行时主题'关闭使它工作。

+3

样本TCustomHint后代由于启用主题启用主题的源代码。这必须覆盖特定的颜色选择。 – frogb 2010-02-18 15:45:36

2

不,不是直接。如果您启用了运行时主题,它将采用系统颜色作为提示。 (IOW,提示将是'主题')。这就像为启用主题的按钮设置颜色(假设您可以执行此操作)。

但是,您可以使用其他'提示'引擎。例如,您可以使用免费的JEDI的JVCL的TjvBallonHint和/或TjvDesktopAlert(或许与TjvDesktopAlertStack一起使用)。还有其他(免费&付费)替代品。另外,如果你想要,你可以实现你自己的提示窗口。

HTH

0

在德尔福2010年,你有TCustomHint类。你可以从它派生出一个新的类,它提供了一种新的提示。

您可以将新类指定给表单或任何其他控件的CustomHint属性,Delphi将使用您的自定义提示类来显示该控件的提示。

您可以检查TBalloonHint类,这是在Controls.pas