• Delphi中资源文件使用详解


    一.编写 RC 脚本文本

      用记事本或其它文本编辑器编写一个扩展名为“.rc”的文件。格式如下:

      AVI 无声动画

      BITMAP 位图文件

      CURSOR 光标文件

      ICON 图标文件

      WAVE 声音文件

      以上所列均为标准资源类型,也可以给资源自定义一个类型,如:“mytype”。不过两者在调用方式上有些不同(在后面示例“存取资源

    文件中的位图”中有详细描述)。

    二.根据 RC 脚本文件编译成 RES 资源文件

      在命令提示符中输入以下内容:

      brcc32 FileName.rc //注:brcc32.exe在DelphiX\Bin目录中

    三.在Delphi单元中加入资源文件

      将生成的 RES 资源文件复制到相应程序所在的目录中,在单元文件中的“{$R *DFM}”后面加上“{$R FileName.res}”,编译后资源文件

    就被包含在可执行文件中了。

      说明:如果嫌2、3两步麻烦,可以采用更简便的做法,即:将 RC 文件直接添加到项目中,在编译Delphi项目时,会自动编译该资源文件.

    资源文件在Delphi5中建立和使用方法

    几乎每个Windows应用程序都使用图标、图片、光标等资源。资源是程序的一部分,但是它是不可执行代码。下面我们就详细介绍资源文件在Delphi5中建立和使用方法。    
    1.把资源放到Exe文件的优点    
    由于定位资源比在磁盘中定位文件花费时间少,所以应用程序执行会更快。多种资源可以放在一个文件中,减少了图标、图片、光标等文件数量。保存资源文件时不要和工程名相同,因为Delphi创建工程时会自动创建一个和工程名相同的资源文件。并且最好将资源文件保存到和工程文件同一个文件夹中。    
    2.创建资源文件    
    首先创建一个.Rc的纯文本文件。格式如下:    
    资源标识符   +   关键字   +   资源文件名    
    ①   资源标识符:程序中调用资源时的特殊标号;    
    ②   关键字:标识资源文件类型;    
    Wave:   资源文件是声音文件;    
    RCDATA:   JPEG文件;    
    AVI:   AVI动画;    
    ICON:   图标文件;    
    BITMAP:   位图文件;    
    CURSOR:   光标文件;    
    资源文件名:资源文件名;    
    ③   资源文件名:编译的资源文件,比如动画、位图、光标等;    
    ④   如:MyWav   WAVE   "FileName.Wav"    
    使用Borland资源编译器(BRCC32.EXE)转化.Rc文件成.Res文件。在DOS命令行下输入下列命令:    
    Brcc32   FileName.Rc   //   Brcc32.Exe在Delphi5\Bin文件下。    
    3.在工程中引用资源文件    
    为了存取我们的资源文件,必须告诉Delphi链接我们的资源文件到应用程序中。因此我们可以在源代码中加入一条编译指令完成上述功能。这条指令必须紧跟在窗口指令后,如下形式:    
    {$R   *.DFM}   //Delphi自带编译指令    
    {$R   FileName.Res} //新加入的编译资源文件的指令。    
    不要删除{$R   *.DFM}指令,因为这行代码告诉Delphi链接下面的资源到窗口的资源中。    
    4.调用资源文件    
    (1)存取资源文件中的位图(Bitmap)    
    程序中如果想存取资源,你必须调用一些Windows   API函数。保存在资源文件中的位图、光标和图标可以通过调用LoadBitmap、LoadCursor和LoadIcon函数存取。    
    本例举例说明如何存取资源文件中位图并显示在Timage控件中。    
    procedure   TfrMain.btnCanvasPic(Sender:   TObject);    
    Image1.Picture.Bitmap.Handle   :=LoadBitmap(hInstance,   '资源标识符');    
    end;    
    注:如果位图没有装载成功,程序仍旧执行,但是Image将不再显示图片。你可以根据LoadBitmap函数的返回值判断是否装载成功,如果装载成功返回值是非0,如果装载失败返回值是0。    
    另外一个存取显示位图的方法如下    
    procedure   TfrMain.btnLoadPicClick(Sender:   TObject);    
    begin    
    Image1.Picture.Bitmap.LoadFromResourceName(hInstance,   '资源标识符');    
    end;    
    (2)存取资源文件中的光标    
    Screen.Cursors[]是一个光标数组,使用光标文件我们可以将定制的光标加入到这个属性中。因为默认的光标在数组中索引值是0,所以除非想取代默认光标,最好将定制的光标索引值设为1。    
    procedure   TfrMain.btnUseCursorClick(Sender:   TObject);    
    begin    
    Screen.Cursors[1]   :=LoadCursor(hInstance,'资源标识符');    
    Image1.Cursor   :=1;    
    end;    
    (3)存取资源文件中的图标    
    将图标放在资源文件中,可以实现动态改变应用程序图标。    
    procedure   TfrMain.LoadIconClick(Sender:   TObject);    
    begin    
    Application.Icon.Handle   :=   LoadIcon(hInstance,   '资源标识符');    
    End;    
    (4)存取资源文件中的AVI    
    procedure   TfrMain.LoadIconClick(Sender:   TObject);    
    begin    
    Animate1.ResName   :='MyAvi'   ;   //资源标识    
    Animate1.Active   :=True   ;    
    End   ;    
    (5)存取资源文件中的JPEG    
    把jpeg单元加入到Interface的uses单元中。    
    procedure   TForm1.LoadJPGClick(Sender:   TObject);    
    var    
    Fjpg   :   TJpegImage   ;    
    FStream   :TResourceStream   ;    
    begin    
    Fjpg   :=TJpegImage.Create   ;    
    FStream   :=   TResourceStream.Create   (Hinstance,'资源标识符',RT_RCDATA)   ;    
    FJpg.LoadFromStream   (FStream)   ;    
    Image1.Picture.Bitmap.Assign   (FJpg);    
    end;    
    (6)存取资源文件中的Wave    
    把MMSystem加入到Interface的uses单元中    
    procedure   TForm1.LoadWaveClick(Sender:   TObject);    
    begin    
    PlaySound('MyWav',   HInstance,   Snd_ASync   or   Snd_Memory   or   snd_Resource)   ;    
    end;    
    5.结束语    
      位图、光标和图标、AVI动画、JPEG和Wave文件等可以放到资源文件中,上面我们介绍了如何将资源加入到资源文件中,并介绍了在Delphi中动态存取资源文件的方法。Delphi编译工程会自动创建一个和工程名相同的资源文件(如果没有其他的资源,主窗口的图标会放在这个资源文件中)。但是建议最好不要改变这个资源文件。

  • 相关阅读:
    c语言 ctype.h中的函数
    sizeof 用法
    [LeetCode] Permutations 解题报告
    [LeetCode] Permutations II 解题报告
    [LeetCode] Next Permutation 解题报告
    [LeetCode] Path Sum II 解题报告
    [LeetCode] Palindrome Number 解题报告
    [LeetCode] Minimum Window Substring 解题报告
    [LeetCode] Partition List 解题报告
    [LeetCode] Pascal's Triangle II 解题报告
  • 原文地址:https://www.cnblogs.com/jieke/p/2855776.html
Copyright © 2020-2023  润新知