線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3036
推到 Plurk!
推到 Facebook!

TImageList 可否動態載入資源檔(*.res)

尚未結案
xBug
一般會員


發表:27
回覆:17
積分:8
註冊:2003-06-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-13 15:46:17 IP:61.30.xxx.xxx 未訂閱
我在應用程式裡使用許多小 ICON 以美化介面,我將全部的 ICON 放在同一 TImageList 物件中。 想請教先進,我是否可以透過資源檔的方式( *.res) 將 ICON 動態載入,並透過置換資源檔的方式,讓程式的 ICON 動態改變?實作上是否有範例程式可供參考? -------------------------------- 給我一個支點,我可以撐起整個地球
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-13 16:46:04 IP:202.39.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-13 21:45:01 IP:211.76.xxx.xxx 未訂閱
引言: 我在應用程式裡使用許多小 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-14 10:04:55 IP:61.30.xxx.xxx 未訂閱
我參照 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-14 16:37:49 IP:211.76.xxx.xxx 未訂閱
是將 ImageList 內的 Icon 一次存成 bmp 圖檔, 不是單個 Icon. 所以會得到一張內含所有Icon的bmp檔 當這張bmp被讀進ImageList時, 自動會被切割還原為原來的Icon, 單個icon被切割進ImageList的大小, 是看你 ImageList 的 width 跟 Height 屬性 (16*16)或是(32*32). 所以在 Res 檔裏面應該是 bmp, 不是 Icon
xBug
一般會員


發表:27
回覆:17
積分:8
註冊:2003-06-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-15 12:31:38 IP:61.30.xxx.xxx 未訂閱
依據 OsX 的方式,這一次成功了,但匯入後仍存在一些問題。    我在 DELPHI 7 中,透過 TImageList轉存 *.BMP 時,畫面與 OsX 所提供的不同,是版本上差異?還是我又弄錯了什麼? 轉存出來的 *.BMP 圖檔, OsX 所提供的畫面時單一行排列,我的卻是如下圖中所示,被切行了。 試著執行程式時,可以成功的匯入 *.dll,亦可依 Name 取出圖檔,但似乎不齊全;如下圖,第二階與第三階應該要能夠出現 *.BMP 中,第二行的兩個圖示,但卻沒有。顯然圖檔載入時只載入第一排,第二排並未成功載入,我猜想此一情形應與前二個問題有關。 這一次,是不是我又漏了什麼? -------------------------------- 給我一個支點,我可以撐起整個地球
OsX
版主


發表:6
回覆:151
積分:111
註冊:2003-05-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-15 17:11:57 IP:211.76.xxx.xxx 未訂閱
呵, 別緊張 ~~ 你遇到 Delphi7 的 Bug 了, , ( >,你斟酌看看用那一種發法比較快.
xBug
一般會員


發表:27
回覆:17
積分:8
註冊:2003-06-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-19 09:04:19 IP:61.30.xxx.xxx 未訂閱
首先感謝 hagar 板主的回應,讓我對 Resource 的使用有更深一層的認識。 再者 OsX 大大不愧是一星級會員,有你的協助,讓我對於此一問題,有極佳的解決方案。 遇到 Delphi 的 Bug,人生最無奈的莫過於此,我幾乎花了一天時間,反覆一直測試,卻始終做不到 OsX 所貼出來的樣子,繞了一大圈發現,『一句話點醒夢中人...』,唉... 後來我還是使用小畫家慢慢貼圖,因為目前而言,圖檔數量還不是很嚇人,再者,若為了幾個小圖檔去安裝一個 Delphi 6 好操作方便,對我的環境而言,工程似乎太浩大了,所以... 最後還是要感謝 OsX 大大,陪我一路走來...謝謝您... -------------------------------- 給我一個支點,我可以撐起整個地球
juneo
高階會員


發表:103
回覆:190
積分:118
註冊:2004-05-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-03-02 17:04:17 IP:211.75.xxx.xxx 未訂閱
BCB 6 ImageList1 不會產生切割 最近在學把圖檔加入資源檔,因為本身有用BCB與Delphi 順便跟大大報告^^ 如下 自然就是寫程式最好的方式, 分享比獲得更快樂--Juneo
系統時間:2024-11-23 5:15:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!