如果您是指想要**「提取」「顯示」** SHELL32.dllimageres.dll 裡面的圖示 (Icons),在 dBASE Plus 2019 中有幾種不同的處理方式,取決於您的目的:


1. 只是想在開發時「查看」有哪些圖示

如果您想看這兩個 DLL 裡面到底有哪些小圖示可以用,最簡單的方法不是寫程式,而是利用 Windows 內建的更換圖示視窗:

  1. 在桌面隨便找個資料夾,點右鍵 -> 內容

  2. 切換到 自訂 頁籤 -> 點擊 變更圖示

  3. 在路徑欄位輸入 %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 的元件(如 PushButtonImage)的 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 載入,這樣程式換到別台電腦才不會出錯。

  • 如果是想動態顯示系統圖示:請使用上面的 ExtractIcon API。

您是想要在哪個元件(按鈕、選單、還是背景)上顯示這些圖示呢?

現在您已經掌握了幾種操作 Windows 資源的方法:

  • ShellExecute:開啟網頁、設定、或其他程式。

  • Extern CLONG…:直接呼叫系統 API。

  • Run(cmd /c…):執行 DOS 指令搬運檔案。

接下來,您想嘗試把提取出來的圖示,實際放到您的 dBASE 按鈕 (PushButton) 上面嗎? 我們可以討論如何處理 .ico 檔案的透明度問題,這在介面設計上很重要。

個人頭像照片

By 伍 芳左

MIS, ERP Pro...

發佈留言