delphi 动态添加资源文件  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 动态添加资源文件


添加资源,就算里面没有该ID所代表的资源也没问题。
function UpdateRes(AUpdate: Cardinal; AResID: Integer; ARes: string): Boolean;
var
  fs: TFileStream;
  pBuffer: PByte;
begin
  fs := TFileStream.Create(ARes, fmOpenRead);
  try
    fs.Position := 0;
    GetMem(pBuffer, fs.Size);
    try
      fs.Read(pBuffer^, fs.Size);
      Result := UpdateResource(AUpdate, MAKEINTRESOURCE(RT_RCDATA),
        MAKEINTRESOURCE(AResID), MAKELANGID(LANG_NEUTRAL, LANG_NEUTRAL),
        pBuffer, fs.Size);
    finally
      FreeMem(pBuffer, fs.Size);
    end;
  finally
    FreeAndNil(fs);
  end;
end;
bRet := False;
hUpdate := BeginUpdateResource(PChar(edt3.Text), False);
if hUpdate <> 0 then  
try
  bRet := UpdateRes(hUpdate, 100, edt1.Text);
finally
  EndUpdateResource(hUpdate, False);
end;
读取资源。

procedure ExtractResAndRun(AName: string; AResID: Integer);

var

  Res: HRSRC;

  iRes: Integer;

  hResData: HGLOBAL;

  pBuffer: PByte;

  ms: TMemoryStream;

begin

  Res := FindResource(HInstance, MAKEINTRESOURCE(AResID), RT_RCDATA);

  if Res <> 0 then

  try

    iRes := SizeofResource(HInstance, Res);

    if iRes = 0 then  Exit;

    hResData := LoadResource(HInstance, Res);

    if hResData = 0 then Exit;

    pBuffer := LockResource(hResData);

    if pBuffer <> nil then

    try

      ms := TMemoryStream.Create;

      try

        ms.SetSize(iRes);

        ms.Write(pBuffer^, iRes);

        ms.SaveToFile(AName);

        if FileExists(AName) then

          ShellExecute(0, ‘open’, PChar(AName), nil, nil, SW_SHOWNORMAL);

      finally

        FreeAndNil(ms);

      end;

    finally

      UnlockResource(hResData);

    end;

  finally

    FreeResource(Res);

  end;

end;

 

来源 http://www.hicpp.com/code/338.html


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.082533121109009 seconds