如果您是指想要**「提取」或「顯示」** SHELL32.dll 或 imageres.dll 裡面的圖示 (Icons),在 dBASE Plus 2019 中有幾種不同的處理方式,取決於您的目的:
1. 只是想在開發時「查看」有哪些圖示
如果您想看這兩個 DLL 裡面到底有哪些小圖示可以用,最簡單的方法不是寫程式,而是利用 Windows 內建的更換圖示視窗:
-
在桌面隨便找個資料夾,點右鍵 -> 內容。
-
切換到 自訂 頁籤 -> 點擊 變更圖示。
-
在路徑欄位輸入
%SystemRoot%\System32\imageres.dll並按 Enter。-
SHELL32.dll:包含經典的系統圖示(硬碟、資料夾)。 -
imageres.dll:包含現代 Windows 10/11 的高清圖示(各類設備、精美圖標)。
-
2. 在 dBASE 程式碼中「提取」並顯示圖示
如果您想在程式執行時,從這些 DLL 提取圖示並顯示在按鈕或圖片元件上,您需要宣告另一個 Windows API:ExtractIcon。
宣告 API
程式碼片段
if type("ExtractIcon") # "FP"
extern CLONG ExtractIcon(CLONG, CSTRING, CLONG) ;
SHELL32 from "ExtractIconA"
endif
if type("DrawIcon") # "FP"
extern CLONG DrawIcon(CLONG, CINT, CINT, CLONG) ;
USER32 from "DrawIcon"
endif
實際提取範例
程式碼片段
local hIcon, hDC
// 從 imageres.dll 提取第 5 個圖示 (索引從 0 開始)
hIcon = ExtractIcon(0, "C:\Windows\System32\imageres.dll", 5)
if hIcon > 1
// 這裡 hIcon 就是圖示的控制柄 (Handle)
// 您可以將它繪製到表單的畫布上,或是賦值給支援 Icon Handle 的元件
// 注意:結束後通常需要呼叫 DestroyIcon 釋放記憶體
endif
3. 在 dBASE 元件中直接使用 (最簡單)
大多數 dBASE Plus 的元件(如 PushButton 或 Image)的 upBitmap 屬性支援資源標記。 對於 DLL 內的資源,格式通常是: RESOURCE <圖示名稱或編號> <DLL路徑>
但在 dBASE 中最常用的做法是先用工具(如 Resource Hacker)把圖示從 imageres.dll 存成 .ico 檔,然後直接在 dBASE 裡調用:
程式碼片段
form.image1.upBitmap = "filename myIcon.ico"
4. 想開啟 DLL 進行「資源編輯」?
如果您是想直接「打開」檔案查看內部的二進位資源(例如想修改它):
-
請使用工具: 推薦下載 Resource Hacker。它是免費且專業的工具,可以直接開啟
imageres.dll,讓你看到所有的圖示、對話框、字串表,並匯出成檔案。
總結建議:
-
如果是為了美化介面:建議用 Resource Hacker 把喜歡的圖示匯出成
.png或.ico,再讓 dBASE 載入,這樣程式換到別台電腦才不會出錯。 -
如果是想動態顯示系統圖示:請使用上面的
ExtractIconAPI。
您是想要在哪個元件(按鈕、選單、還是背景)上顯示這些圖示呢?
現在您已經掌握了幾種操作 Windows 資源的方法:
-
ShellExecute:開啟網頁、設定、或其他程式。
-
Extern CLONG…:直接呼叫系統 API。
-
Run(cmd /c…):執行 DOS 指令搬運檔案。
接下來,您想嘗試把提取出來的圖示,實際放到您的 dBASE 按鈕 (PushButton) 上面嗎? 我們可以討論如何處理 .ico 檔案的透明度問題,這在介面設計上很重要。