通常在Delphi的应用程序中,我们会调用到很多的资源,例如图片,动画(AVI),声音,甚至于别的执行文件。当然,把这些资源分布到不同的目录不失为一个好办法,但是有没有可能把这些资源编译成标准的windows资源从而链接到一个执行文件里面呢? 我们可以自己做一个RC文件,例如 sample.rc ,RC文件其实就是一个资源文件的描述文本,通过“记事本”程序创建就行了。然后可以输入一些我们要定义的资源,例如:MEN BITMAP c:\bitmap\men.bitmap
ARJ EXEFILE c:\arj.exe
MOV AVI c:\mov.avi
然后用BRCC32把这个RC文件编译成sample.res(真正的资源文件)。在Delphi的工程文件中使用 $R 编译指令让Delphi包括资源到EXE文件里面。{$R sample.res}
这样我们就可以在这个单一的执行文件中调用资源了。举例如下:EXEFILE:procedure ExtractRes(ResType, ResName, ResNewName : String);
var 
Res : TResourceStream; 
begin
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType)); Res.SavetoFile(ResNewName);
Res.Free; 
end;
AVI:procedure LoadAVI;
begin
{Avi1是一个TAnimate类}
Avi1.ResName:='AVI';
Avi1.Active:=True;
end; 
 

解决方案 »

  1.   

    html
    那要怎么定义?avi是avi的,我总不能乱取个定义名吧,再说了,又bcc不过
      

  2.   

    例:
      C:\aaaa.htm
      c:\aaaa.files\a1.gif
      c:\aaaa.files\a2.gif新建立文本文件a.txt,内容如下:
      aaaa exefile c:\aaaa.htm
      a1 exefile c:\aaaa.files\a1
      a2 exefile c:\aaaa.files\a2保存并重命名为a.rc在命令提示符下执行:
    c:\>brcc32 c:\a.rc生成资源文件a.res
    (brcc32.exe 在delphi的安装目录下的bin下)
    在程序中的操作类同上帖中对exe文件的处理。
      

  3.   

    Error E2206 c:\loading.rc 1: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 1: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 1: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 1: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 2: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 2: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 2: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 2: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 2: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 2: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 2: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 2: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 3: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 3: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 3: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 3: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 3: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 3: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 3: Illegal character '\' (0x5c)
    Error E2206 c:\loading.rc 3: Illegal character '\' (0x5c)
    看吧
      

  4.   

    我找到一个HTML的例子了,嘿嘿
      

  5.   

    在你的rc文件中写
    HTMLTEST RT_RCDATA Test.htm编译连接到exe中之后,用TResourceStream读取并写入磁盘文件。
      

  6.   

    假设你要包含test.htm首先,建立test.rc,里面写
    TestHTML RT_RCDATA test.htm然后在命令行运行
    brcc32 test.rc
    这样就得到 test.res然后在你的form中
    implementation
    {$R *.DFM}
    {$R about.res}就是添加上面最后一行,这样资源就编译进exe了。然后在需要的地方编个过程,类似这样
    var
      resTest:TResourceStream;
      strFileName,strDir,strFullName:string;
      pchTempName,pchTemp:array[0..255] of char;
      nSize:integer;
    begin
      strDir:=ExtractFileDir(Application.ExeName);
      strFileName:='test.htm';
      strFullName:=strDir+'\'+strFileName;
      restest:=TResourceStream.Create(hInstance,'TestHTML','RT_RCDATA');
      try
        resTest.SaveToFile(strFullName);
      except
        pchTempName:='Temp';
        nSize:=255;
        GetEnvironmentVariable(pchTempName,pchTemp,nSize);
        strDir:=string(pchTemp);
        strFullName:=strDir+'\'+strFileName;
        resTest.SaveToFile(strFullName);
      end;
      resTest.Free;
    end;  
      这样test.htm就动态创建在当前目录或临时目录下了,想怎么用都可以。
      用完了可以删除,反正以后还可以创建。
      
      

  7.   

    更正,上面在implementation中添加的应该是
    {$R test.res}
    反正就是你编译出来的资源res的文件名