2010-06-25 77 views
13

Delphi 2010,Win32 VCL。我需要以最標準的外觀爲我的應用程序創建一個主菜單。 TMainMenu在所有Windows版本中看起來不錯,唯一不好的是當它顯示Enabled = False項目的圖像時。TMainMenu的醜陋「禁用」圖像

德爾福有一些奇怪的方法來建立殘疾人圖像(黑白擠壓與斜角,對我來說它看起來像噴出)。我想在VCL源代碼中爲該過程創建一個補丁,並讓菜單從同一個TImageList中選擇禁用的圖像,但我找不到它。

它是否存在或它是一些標準的Windows API調用?你知道那個程序在哪裏嗎?

當然OwnerDraw風格可以修復所有這些,但我想要一個更快的解決方案。

回答

22

Galfar's Lair blog上有一篇很棒的文章,描述了這個問題,並且有一個解決方法的代碼,覆蓋了TImageList DoDraw方法。

下面是圖片(鏈接),顯示'之前'和'之後'。

alt text

我覺得這涉及到幾乎所有的Delphi版本。

+0

太棒了!我將覆蓋TCustomImageList.DoDraw並將從存儲的圖像的後半部分32x16複製禁用的圖像。謝謝羅迪和加爾法。 – Andrew 2010-06-25 10:43:10

+0

太棒了!我需要這個! – 2010-06-25 13:54:15

4

如果您可以將圖片作爲PNG提供,您可以使用PngComponents中的TPngImageList。它具有不同的選項來製作混合或灰度禁用的圖像。 PNG格式允許您使用alphablending。