升级小图标从来都不是好主意。16X16 图标太小,无法按原样以任何其他方式使用它。
首先,您可以使用获取更大的 shell 图像
ImageList.Handle:=SHGetFileInfo('',0,FileInfo,SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_ICON);
这些图像通常为 32x32 像素,但为了安全起见(如果 Windows 以高 DPI 模式运行),您可以从系统获得正确的尺寸
uses
Winapi.Windows;
var
IconWidth, IconHeight: integer;
IconWidth := GetSystemMetrics(SM_CXICON);
IconHeight := GetSystemMetrics(SM_CYICON);
您还可以使用http://msdn.microsoft.com/en-us/library/windows/desktop/bb762185%28v=vs.85%29.aspx获得更大的 shell 图像SHGetImageList
要从 ImageList 中检索图标(如果 ImageList 包含图标,并且在您的情况下包含图标),您可以使用:
ImageList.GetIcon(Index: Integer; Image: TIcon);
对于缩放图标,同时保持透明度,自定义尺寸,您可以使用以下代码:
procedure StretchDrawIcon(Canvas: TCanvas; Dest: TRect; Icon: TIcon);
begin
DrawIconEx(Canvas.Handle, Dest.Left, Dest.Top, Icon.Handle, Dest.Right - Dest.Left, Dest.Bottom - Dest.Top, 0, 0, DI_NORMAL);
end;