2011-11-11 50 views
10

我正在製作一個Delphi程序,該程序將在「托盤」上顯示一個圖標。我這樣做是「困難的方式」(使用Shell_NotifyIcon API等,而不是一個組件,因爲這裏的原因)。它工作的很好,但有時候它在某些系統中似乎有點「模糊」。現在,我已經使用16×16 BMP,32×32等,這似乎是一個系統規模下來到所需要的大小(或者別的東西也一樣)試驗,但是根據操作系統版本的結果是不同的....在托盤中顯示的最佳圖標大小

有沒有關於使用Shell_NotifyIcon從ListImage中提取和顯示在托盤上的BMP的最佳尺寸和顏色深度的任何經驗?

回答

12

您應該使用32bpp的圖標,以取得最佳效果部分透明。

圖標使用小系統的大小。通過致電GetSystemMetrics通過SM_CXSMICON得到此。如果使用字體縮放,則可以使用20px而不是更常見的16px。我從來沒有找到這個事實的MS文件,但你可以隨時通過反覆試驗來驗證它。事實上並不是一件幸福的事,但事實就是這樣。

更新: TOndrej指出,對於LoadIconMetric的文檔給出了通知區域圖標是小圖標大小的默許。我不明白爲什麼這些信息不包含在通知圖標中。

+0

嗯... GetSystemMetrics(SM_CXICON)在我的系統上給我32 ... On另一方面GetSystemMetrics(SM_CXSMICON)給我16 ...幫助文件表明SM_CXSMICON是一個小圖標的推薦寬度(確定它沒有提到關於「托盤」或「通知欄」的任何內容 – Lobuno

+0

我發佈的鏈接說明'LIM_SMALL'對應於'SM_CXSMICON'。例如使用'LIM_SMALL'。 –

+0

你是對的! – Lobuno

7

你或許應該包括32×32和16 x 16的圖標並加載相應的一個在運行時:

通知區域的圖標應該是高DPI感知。應用程序 應同時提供一個16×16像素的圖標,並在其 資源文件中的32×32的圖標,然後用LoadIconMetric,以確保正確的 圖標被加載並適當縮放。

(來源:MSDN

+0

可悲的文檔沒有在這裏做的工作。如果你沒有放入一個小圖標的圖標,那麼你會有鋸齒和可怕的鋸齒。我從痛苦的經歷中得知。 –

+1

您應該包含一個註釋,它只適用於Vista及更高版本,或Windows Server 2008及更高版本(LoadIconMetric在早期的Windows平臺上不可用)。那裏還有很多WinXP和Server 2003系統。 :) –

+5

如果任何人有興趣,我有優秀的代碼,將創建任何大小的圖標給予資源名稱,這在XP和更高版本但適用於他們存在的新功能。如果有興趣,我可以發佈q並用我自己的代碼回答。 –

0

單個*.ico文件建議的應用程序圖標。 *.ico文件可以存儲不同大小的圖標,如16,32,256等。您可以將不同的圖像文件轉換爲ico格式在線here

對於托盤圖標16×16 32×32或ICO將適合。

MSDN官方指南圖標:icons in Windows