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位色的图标,有什么方法能解决吗?

解决方案 »

  1.   

    黑圈是不是 icon的 bitmapMask 造成的。但遮照图不是应该和 bitmapColor对应吗,怎么会边上多出一个黑圈的呢。 windows显示却没这个问题。问题是出在显示方面吗?
      

  2.   

    仔细看wmplayer.exe的图标,本来就是有一个黑圈的。提取出图标之后会增加一个阴影部分,让黑圈更加明显。DELPHI的TICON不支持24位和32位色的图标,这个都见人问过好多次了。
    参考http://community.csdn.net/Expert/topic/5056/5056162.xml?temp=.5632898
      

  3.   

    那有方法解决阴影部分太明显的方法吗window自己显示这个图标就很美观,提取出来后显示就一个很大的黑圈。感觉差太多了。