//我想在 Delphi 中用 ExtractIcon 函数提取dll中的一个图标,然后保存,但是保存后变成黑白的。过程如下:
procedure TForm1.Button1Click(Sender: TObject);
var hc:HICON; tc:TIcon;
begin  //然后取出图标句柄:
  ExtractIconEx('Shell32.dll',130,hc,hc,1);   //这里也可用ExtractIcon函数
  tc:=TIcon.Create;
  tc.Handle:=hc; //将句柄hc传给TICON: 
  tc.SaveToFile('d:\1.ico'); //将图标写入文件
  tc.Free;
end;{ 图标提取出来没问题,但得到的文件却是难看的黑白色彩图标 。
经分析,图标提取过程正常(直接画在窗体上没问题,
就是漂亮的真彩色),只是保存了之后色彩就变成黑白的.{ 请问:在Delphi 7中用上述方法提取出图标时,如何将图标保存成文件,
并使其保持真彩色? 我不想再看到那些难看的图标}

解决方案 »

  1.   

    http://blog.csdn.net/xjjrocker/archive/2008/03/16/2189595.aspx
      

  2.   

    这是D7的一个Bug,你把Graphics单元的
     procedure WriteIcon(Stream: TStream; Icon: HICON; WriteLength: Boolean);
      中的
          InternalGetDIBSizes(IconInfo.hbmColor, ColorInfoSize, ColorBitsSize, 16);
      和
          InternalGetDIB(IconInfo.hbmColor, 0, ColorInfo^, ColorBits^, 16);
      更改为
          InternalGetDIBSizes(IconInfo.hbmColor, ColorInfoSize, ColorBitsSize, 65536);
      和
          InternalGetDIB(IconInfo.hbmColor, 0, ColorInfo^, ColorBits^, 65536);