将GIF从Resource加载到Dynamic表单

时间:2010-10-20 09:39:59

标签: delphi resources stream animated-gif instances

我有这段代码:

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组件 - &gt; EResNotFound ......

问题在于hInstance参数,如下所述:http://www.codeproject.com/Messages/931171/Re-The-difference-between-HWND-and-HINSTANCE.aspx

但是 - 如何加载它?加载失败的影响是将主窗体设置为SELDR(SELDR_WH)窗体的子窗体。

任何帮助表示赞赏。谢谢!

3 个答案:

答案 0 :(得分:4)

尝试检查您的gif图像是否已正确设置。我想你需要将ajax-loader.gif添加到你的资源中。然后使用类型为RT_RCDATA的ajax-loader命名它。怎么做,转到项目&gt;资源&gt;添加文件,资源标识符= ajax-loader类型= RT_RCDATA。它肯定有用。我测试了它。你的代码工作正常。如果它是外部的,请确保您必须首先提交resource.dll。或者问题是真的没有..

只加载图片才能正常使用

答案 1 :(得分:0)

1)您的代码在哪里?

hInstance将从当前进程.exe文件中获取资源。 简而言之,无论你在其中使用什么形式,hInstance都是整个exe的共同点。

因此'ajax-loader'资源必须位于包含此代码的.exe中。

2)你的资源是否创造良好?

使用资源浏览器列出exe内的资源。您必须匹配资源名称(即'ajax-loader')和资源类型,必须将其设置为值10。 例如,您的.rc文件应如下所示:

ajax-loader 10 "ajax-loader.gif"

我不确定资源名称中是否允许使用' - 'char,但我想这没关系。

答案 2 :(得分:0)

您需要更改引用RT_RCDATA的方式。这种方法对我有用:

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