procedure TForm1.Button1Click(Sender: TObject);
var
H: HIcon;
IconInfo: TIconInfo;
begin
H:= ExtractIcon(Self.Handle, 'C:\Program Files\Windows Media Player\wmplayer.exe', 0);
if (H <> 0) and GetIconInfo(H, IconInfo) then
begin
AIcon:= TIcon.Create;
AIcon.Handle:= CreateIconIndirect(IconInfo);
ImageList1.AddIcon(AIcon);//将该imagelist关联给一个listview,显示出来的图标,边上有个明显的黑圈。
AIcon.Free;
end;
//直接通过SHELLAPI函数获取也是一样有黑圈。
AIcon:= TIcon.Create;
AIcon.Handle:= GetFileIcon('C:\Program Files\Windows Media Player\wmplayer.exe');
ImageList1.AddIcon(AIcon);
AIcon.Free;
end;
function GetFileIcon(FileName: string): HICON;
var
SHFileInfo: TSHFileInfo;
h: HWND;
begin
h := SHGetFileInfo(PChar(FileName),
0,
SHFileInfo,
SizeOf(SHFileInfo),
SHGFI_ICON or SHGFI_SYSICONINDEX);
if h > 0 then
Result:= SHFileInfo.hIcon
else
Result:= 0;
end;这个黑圈有办法解决吗?
还有DELPHI的TICON不支持24位和32位色的图标,有什么方法能解决吗?
var
H: HIcon;
IconInfo: TIconInfo;
begin
H:= ExtractIcon(Self.Handle, 'C:\Program Files\Windows Media Player\wmplayer.exe', 0);
if (H <> 0) and GetIconInfo(H, IconInfo) then
begin
AIcon:= TIcon.Create;
AIcon.Handle:= CreateIconIndirect(IconInfo);
ImageList1.AddIcon(AIcon);//将该imagelist关联给一个listview,显示出来的图标,边上有个明显的黑圈。
AIcon.Free;
end;
//直接通过SHELLAPI函数获取也是一样有黑圈。
AIcon:= TIcon.Create;
AIcon.Handle:= GetFileIcon('C:\Program Files\Windows Media Player\wmplayer.exe');
ImageList1.AddIcon(AIcon);
AIcon.Free;
end;
function GetFileIcon(FileName: string): HICON;
var
SHFileInfo: TSHFileInfo;
h: HWND;
begin
h := SHGetFileInfo(PChar(FileName),
0,
SHFileInfo,
SizeOf(SHFileInfo),
SHGFI_ICON or SHGFI_SYSICONINDEX);
if h > 0 then
Result:= SHFileInfo.hIcon
else
Result:= 0;
end;这个黑圈有办法解决吗?
还有DELPHI的TICON不支持24位和32位色的图标,有什么方法能解决吗?
参考http://community.csdn.net/Expert/topic/5056/5056162.xml?temp=.5632898