TImageList 可否動態載入資源檔(*.res) |
尚未結案
|
xBug
一般會員 發表:27 回覆:17 積分:8 註冊:2003-06-10 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
1.程式經 compile 後, resource 就含在 exe 內了, 應該是不能動態置換 resource 檔了
2.取出 resource 內的 icon, 然後加入 TImageList 的方法:
{$R MyRes.res} TFormMyForm.FormCreate(Sender: TObject); var Icon: TIcon; begin Icon := TIcon.Create; Icon.Handle := LoadIcon(HInstance, 'ICON1'); ImageList1.AddIcon(Icon); Icon.Free; end;-- He just never quits. |
OsX
版主 發表:6 回覆:151 積分:111 註冊:2003-05-03 發送簡訊給我 |
引言: 我在應用程式裡使用許多小 ICON 以美化介面,我將全部的 ICON 放在同一 TImageList 物件中。 想請教先進,我是否可以透過資源檔的方式( *.res) 將 ICON 動態載入,並透過置換資源檔的方式,讓程式的 ICON 動態改變?實作上是否有範例程式可供參考? -------------------------------- 給我一個支點,我可以撐起整個地球你可以預先將不同的ImageList的內的圖式, 當成Resource放在 DLL 檔裏, 然後在程式中動態載入, 就可以達到你要效果. 做法: 1.先把所有Icon加進ImageList, 然後將ImageList圖存檔成bmp檔. 2.用Delphi內附的ImageEditor, New 一個 Resource File (*.res), Ex:test.res 3.將剛剛的bmp圖檔加進來, 並取個名字, Ex: First (可以放多個bmp檔進來, 取不同名字就可以) 4.New 一個 DLL Project, 然後 Include 剛剛的 res 檔 {$R test.res}. 5.Compile後, 會得到一個只含Icon Resource的 DLL. 6.在Delphi中, 寫Code把外部Resource DLL 載入 ImageList procedure TForm1.LoadIconFromDLL; var ResBmap: TBitmap; AHnd: THandle; begin ResBmap := TBitmap.Create; try AHnd := LoadLibrary( PChar( ADllName ) ); if AHnd <> 0 then begin ImageList.Clear; ResBmap.LoadFromResourceName( AHnd, 'First' ); ImageList.AddMasked( ResBmap, clFuchsia ); ResBmap.FreeImage; FreeLibrary( AHnd ); end; finally FreeAndNil( ResBmap ); end; end; |
xBug
一般會員 發表:27 回覆:17 積分:8 註冊:2003-06-10 發送簡訊給我 |
我參照 OsX 大大所提供的方法,編輯一 RESOURCE 檔案如下圖:
並於 Delphi 開啟一 DLL Project 並將資源檔連結。編譯後使用 PE 檢視 DLL 內容如下圖:
之後仿照 OsX 大大提供的範例程式碼,撰寫以下程式,結果居然找不到名為 MENU_PROGRAM 的資源? 有人知道問題出在那兒嗎?
procedure TFAPPF.LoadIconFromDll(AImageList: TImageList); var ResBmap: TBitmap; AHnd: THandle; begin ResBmap := TBitmap.Create; try AHnd := LoadLibrary(PChar('D:\APPF\ICON\TTreeView\MenuRes.dll')); if AHnd <> 0 then begin AImageList.Clear; ResBmap.LoadFromResourceName(AHnd, 'MENU_PROGRAM');//此處會 ERROR AImageList.AddMasked(ResBmap, clFuchsia); ResBmap.FreeImage; FreeLibrary(AHnd); end; finally FreeAndNil(ResBmap); end; end;-------------------------------- 給我一個支點,我可以撐起整個地球 |
OsX
版主 發表:6 回覆:151 積分:111 註冊:2003-05-03 發送簡訊給我 |
|
xBug
一般會員 發表:27 回覆:17 積分:8 註冊:2003-06-10 發送簡訊給我 |
依據 OsX 的方式,這一次成功了,但匯入後仍存在一些問題。 我在 DELPHI 7 中,透過 TImageList轉存 *.BMP 時,畫面與 OsX 所提供的不同,是版本上差異?還是我又弄錯了什麼?
轉存出來的 *.BMP 圖檔, OsX 所提供的畫面時單一行排列,我的卻是如下圖中所示,被切行了。
試著執行程式時,可以成功的匯入 *.dll,亦可依 Name 取出圖檔,但似乎不齊全;如下圖,第二階與第三階應該要能夠出現 *.BMP 中,第二行的兩個圖示,但卻沒有。顯然圖檔載入時只載入第一排,第二排並未成功載入,我猜想此一情形應與前二個問題有關。
這一次,是不是我又漏了什麼? --------------------------------
給我一個支點,我可以撐起整個地球
|
OsX
版主 發表:6 回覆:151 積分:111 註冊:2003-05-03 發送簡訊給我 |
|
xBug
一般會員 發表:27 回覆:17 積分:8 註冊:2003-06-10 發送簡訊給我 |
首先感謝 hagar 板主的回應,讓我對 Resource 的使用有更深一層的認識。 再者 OsX 大大不愧是一星級會員,有你的協助,讓我對於此一問題,有極佳的解決方案。 遇到 Delphi 的 Bug,人生最無奈的莫過於此,我幾乎花了一天時間,反覆一直測試,卻始終做不到 OsX 所貼出來的樣子,繞了一大圈發現,『一句話點醒夢中人...』,唉... 後來我還是使用小畫家慢慢貼圖,因為目前而言,圖檔數量還不是很嚇人,再者,若為了幾個小圖檔去安裝一個 Delphi 6 好操作方便,對我的環境而言,工程似乎太浩大了,所以... 最後還是要感謝 OsX 大大,陪我一路走來...謝謝您... --------------------------------
給我一個支點,我可以撐起整個地球
|
juneo
高階會員 發表:103 回覆:190 積分:118 註冊:2004-05-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |