2010-02-18 202 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