代码之家  ›  专栏  ›  技术社区  ›  HX_unbanned

将GIF从资源加载到动态窗体

  •  1
  • HX_unbanned  · 技术社区  · 14 年前

    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;
    

    我认为代码是很明显的。没有解释。。。

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

    但是-怎么装?加载失败的影响是主窗体被设置为SELDR(SELDR_-WH)窗体的子窗体。

    感谢任何帮助。谢谢!

    3 回复  |  直到 14 年前
        1
  •  4
  •   XBasic3000    14 年前

    尝试检查您的gif图像是否设置正确。我认为您需要将ajax-loader.gif添加到资源中。然后用RT_RCDATA类型的ajax加载器命名它。如何操作,转到Project>Resources>添加文件,resource identifier=ajax loader Type=RT_RCDATA。这肯定管用。我测试过了。你的代码运行良好。如果是外部的,请确保您必须首先使用resource.dll。或者问题不在这里。。

    只加载图像工作正常

        2
  •  0
  •   A. Bouchez    14 年前

    1) 你的密码在哪里?

    简而言之,hInstance对于整个exe是通用的,无论您在其中使用什么形式。

    所以'ajax loader'资源必须在包含此代码的.exe中。

    使用资源管理器列出exe中的资源。必须匹配资源名称(即“ajax加载程序”)和资源类型,资源类型必须设置为值10。 例如,.rc文件应该如下所示:

    ajax-loader 10 "ajax-loader.gif"
    

        3
  •  0
  •   skamradt    14 年前

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

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