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

相关阅读 >>

Delphi新建服务,停止系统服务,以及获取服务状态和新建系统服务器的方法

Delphi响应wmi事件(响应网线断开)

Delphi从网上获取北京时间

Delphi获取进程的命令行参数

Delphi idmessage1 idsmtp1 发送邮件支持https

Delphi access数据库 主键

Delphi 在长文件名和短文件名之间转换

Delphi程序带参数运行

Delphi 日期时间函数

Delphi中accesss实现树形结构查询系统

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...