首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Delphi 擷取 EXE 內建圖示並儲存為 ICO 檔

     編輯:更多程式設計知識

功能概述

利用 Windows API ExtractIcon 從可執行檔(.exe/.dll)中提取圖示資源,顯示於 `TImage` 元件,再透過 `SaveDialog` 另存為 `.ico` 檔案。

核心程式碼

procedure TForm1.GetIcon;
var
  Count: Integer;
  FileName: String;
  I: Integer;
begin
  if FileName <> Edit1.Text then
  begin
    FileName := Edit1.Text;
    I := 0;
    Count := ExtractIcon(Application.Handle, PChar(FileName), $FFFFFFFF); // 取得圖示總數
  end
  else
    Inc(I);

  if I < Count then
    Image1.Picture.Icon.Handle := ExtractIcon(Application.Handle, PChar(FileName), I)
  else
    ShowMessage('沒有找到!');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetIcon; // 顯示下一個圖示
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  OpenDialog1.Execute;
  Edit1.Text := OpenDialog1.FileName; // 選取目標 EXE
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  SaveDialog1.Execute;
  Image1.Picture.SaveToFile(SaveDialog1.FileName); // 存為 ICO
end;

介面配置

  • `Edit1`:顯示/輸入 EXE 路徑。
  • `Button2`:開啟 `OpenDialog1` 選取檔案。
  • `Button1`:呼叫 `GetIcon` 循環顯示該檔案內的所有圖示(每按一次換下一個)。
  • `Image1`:顯示目前圖示(`Picture.Icon`)。
  • `Button3`:開啟 `SaveDialog1` 將 `Image1` 圖示存檔。

技術細節

  • ExtractIcon(hInst, lpszExeFileName, nIconIndex):
    `nIconIndex = $FFFFFFFF` 時回傳圖示總數;
    `nIconIndex = 0..Count-1` 時回傳該索引的圖示句柄(HICON)。
  • `TImage.Picture.Icon.Handle` 直接指派 HICON,VCL 會自動管理圖示物件生命週期。
  • `TPicture.SaveToFile` 依副檔名判斷格式,存 `.ico` 即輸出圖示檔。

擴充應用

可進一步結合 `TImageList` 批次匯出所有圖示,或整合至安裝程式建立捷徑時自動指定圖示。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved