大家都知道怎麼用 TICon 從一個 EXE 文件中導出 .ICO 文件,短短几行代碼即可搞定,代碼如下:
……
procedure TForm1.Button1Click(Sender: TObject);
var
icon:TIcon;
begin
icon:=TIcon.Create;
icon.Handle:=ExtractIcon(HInstance,PChar('d:/Test.exe'),0);
Image1.Picture.Icon.Handle := ExtractIcon( Application.Handle, PChar('d:/Test.exe'), 0 );
icon.SaveToFile('E:/MySoftTest/Test.ico'); //保存
Image2.Picture.LoadFromFile('E:/MySoftTest/Test.ico'); //加載預覽
icon.Free;
end;
一般情況下,icon.SaveToFile('E:/MySoftTest/Test.ico'); //保存 這段執行的結果就是保存的16色的圖標文件,預覽圖標文件明顯看到顏色失真,原因就是 TIcon 的保存成 .ICO 的時候存在的問題。解決辦法步驟如下:
1、爲了讓TIcon能夠導出256色的.ico圖片,而不是僅僅16色,需要更改 Graphics.pas文件的如下位置
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);
注 意:更改的位置就是 16 -->65536 ,這樣導出來的圖標就像xp用的那樣顏色,如果你不用65536非要用256當然也可以,只是導出的圖標還是不那麼的好看,但是明顯是彩色的了,只是認真 比對會發現還是有一點點的不完美,所以乾脆65536,這樣的顏色一點都不失真。
2、然後在命令行模式下重新編譯 Graphics.pas文件 ,步驟如下:
cd C:/Program Files/Borland/Delphi7/Source/Vcl
dcc32 Graphics.pas
3、最後,重新編譯你的程序,也就是用到TIcon的那個程序,然後抓取exe的圖標看看,一切ok了。