2010-10-20 65 views
1

我有這樣一段代碼:加載GIF爲動態形式

SELDR_WH := FindControl(FindWindow(nil,'PhoneDB Filtering')) as TForm; 
if seldr_wh <> nil then 
    begin 
    SELDR_WH.ClientHeight := SELDR_WH.ClientHeight + 20; 
    gif := TGIFImage.Create; 
    with gif do begin 
     Parent := SELDR_WH; 
     Top := SELDR_WH.ClientHeight - 20; 
     Left := 30; 
     try 
     rs := TResourceStream.Create(hInstance, 'ajax-loader', RT_RCDATA); 
     gif.LoadFromStream(rs); 
     except on Exception do begin 
      rs.free; 
      gif.free; 
     end; 
     end 
    end; 
    end; 

代碼是很明顯的,我想。不解釋...

但是 - 問題是,我不能夠加載這個GIF資源GIF組件 - > EResNotFound ...

問題是的hInstance參數作爲說明這裏:http://www.codeproject.com/Messages/931171/Re-The-difference-between-HWND-and-HINSTANCE.aspx

但是 - 如何加載它?加載失敗的影響是主窗體被設置爲SELDR(SELDR_WH)窗體的子窗體。

任何幫助表示讚賞。謝謝!

+0

也許你無論是在資源名稱或資源類型做了一個錯字,你確定嗎? – Vantomex 2010-10-20 09:55:14

+0

是的。我確定! ;) – 2010-10-20 10:06:02

+0

真的沒有別的,你可以建議只是錯字...? – 2010-10-20 10:59:59

回答

3

嘗試檢查您的gif圖像是否正確設置。我認爲你需要添加ajax-loader.gif到你的資源。然後用類型爲RT_RCDATA的ajax-loader命名。怎麼做,轉到Project> Resources>添加文件,資源標識= ajax-loader Type = RT_RCDATA。它肯定會工作。我測試了它。你的代碼工作正常。如果它是外部的,請確保您必須先放置resource.dll。或者也許問題is'nt真的有..

只加載圖像,它工作正常

+0

也許在命名圖像時出現問題,或者庫已加載。或缺少像{$ R ERes.res} – 2010-10-21 01:14:15

+0

你是老闆!你幫助了我!我非常期待這個過程......謝謝! – KryNaC 2017-08-03 11:45:04

0

1)你的代碼位於哪裏?

hInstance將從當前進程的.exe文件獲取資源。 簡而言之,hInstance對於整個exe文件都很常見,無論您使用何種格式。

所以'ajax-loader'資源必須位於包含此代碼的.exe文件中。

2)您的資源是否建立良好?

使用資源管理器列出您的exe文件中的資源。您必須將資源名稱(即「Ajax-loader在」)和資源類型,必須將其值設置爲10 例如匹配,你的rc文件應該是這樣的:

ajax-loader 10 "ajax-loader.gif" 

我不確定在資源名稱中是否允許' - '字符,但我想這是可以的。

+0

您是否嘗試在一個小的exe文件中加載資源?鏈接相同的.res文件,然後加載資源。 – 2010-10-20 11:25:59

0

你會想改變你引用RT_RCDATA的方式。此方法適用於我:

rs := tResourceStream.Create(hInstance,'imgname', MakeIntResource(RT_RCDATA)); 
+0

它與tResourceStream.Create(hInstance,'imgname',RT_RCDATA)完全相同; – 2010-10-21 05:55:48

+0

Nop。不改變一件事... – 2010-10-21 15:00:55

+0

還有什麼可以提供解決方案嗎? – 2010-10-21 15:01:11