1

我有这段代码:

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) 窗体的子窗体。

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

4

3 回答 3

4

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

只加载图像它工作正常

于 2010-10-21T01:03:43.167 回答
0

1)您的代码在哪里?

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

因此,“ajax-loader”资源必须在包含此代码的 .exe 中。

2)您的资源是否创建良好?

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

ajax-loader 10 "ajax-loader.gif"

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

于 2010-10-20T10:27:28.150 回答
0

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

rs := tResourceStream.Create(hInstance,'imgname', MakeIntResource(RT_RCDATA));
于 2010-10-20T19:40:39.113 回答