如何将媒体文件嵌入delphi可执行文件(rc/.res)(embed media files into a delphi executable (rc/.res))

使用声音和动画等多媒体文件的游戏和其他类型的应用程序必须随应用程序一起分发额外的多媒体文件,或者将文件嵌入可执行文件中。...

使用声音和动画等多媒体文件的游戏和其他类型的应用程序必须随应用程序一起分发额外的多媒体文件,或者将文件嵌入可执行文件中。

Woman using laptop

您可以将原始数据作为资源添加到应用程序中,而不是分发单独的文件供应用程序使用。然后,您可以在需要时从应用程序中检索数据。这种技术通常更可取,因为它可以防止其他人操纵这些加载项文件。

本文将向您展示如何在Delphi可执行文件中嵌入(和使用)声音文件、视频剪辑、动画以及更一般的任何类型的二进制文件。对于最通用的用途,您将看到如何将MP3文件放入Delphi exe中。

资源文件(.res)

在“ResourceFilesmadeEasy”一文中,您看到了几个使用资源中位图、图标和光标的示例。如那篇文章所述,我们可以使用图像编辑器来创建和编辑由此类文件组成的资源。现在,当我们对在Delphi可执行文件中存储各种类型的(二进制)文件感兴趣时,我们必须处理资源脚本文件(.rc)、Borland资源编译器工具和其他文件。

在可执行文件中包含多个二进制文件包括5个步骤:

  1. 创建和/或收集要放入exe的所有文件。
  2. 创建描述应用程序使用的资源的资源脚本文件(.rc),
  3. 编译资源脚本文件(.rc)文件以创建资源文件(.res),
  4. 将编译后的资源文件链接到应用程序的可执行文件,
  5. 使用单个资源元素。

第一步应该很简单,只需决定要存储在可执行文件中的文件类型。例如,我们将存储两首.wav歌曲,一首.ani动画和一首.mp3歌曲。

在我们继续之前,以下是一些关于使用资源时的限制的重要声明:

  • 加载和卸载资源不是一个耗时的操作。资源是应用程序可执行文件的一部分,并在应用程序运行的同时加载。
  • 加载/卸载资源时,可以使用所有(空闲)内存。换句话说,对同时加载的资源数量没有限制。
  • 当然,资源文件的大小确实是可执行文件的两倍。如果您想要更小的可执行文件,请考虑将资源和项目的部分放置在动态链接库(DLL)或其更专业化的变体中。

现在让我们看看如何创建一个描述资源的文件。

创建资源脚本文件(.rc)

资源脚本文件只是一个简单的文本文件,扩展名为.rc,用于列出资源。脚本文件的格式如下:

ResName1 ResTYPE1 ResFileName1 ResName2 ResTYPE2 ResFileName2 ... ResNameX ResTYPEX ResFileNameX ...

RexName指定标识资源的唯一名称或整数值(ID)。ResType描述资源的类型,ResFileName是单个资源文件的完整路径和文件名。

要创建新的资源脚本文件,只需执行以下操作:

  1. 在项目目录中创建新的文本文件。
  2. 将其重命名为AboutDelphi.rc。

在AboutDelphi.rc文件中,具有以下行:

Clock WAVE "c:\mysounds\projects\clock.wav" MailBeep WAVE "c:\windows\media\newmail.wav" Cool AVI cool.avi Intro RCDATA introsong.mp3

脚本文件只是定义资源。按照给定的格式,AboutDelphi.rc脚本列出了两个.wav文件、一个.avi动画和一个.mp3歌曲。.rc文件中的所有语句都关联给定资源的标识名、类型和文件名。大约有十几种预定义的资源类型。其中包括图标、位图、光标、动画、歌曲等。RCDATA定义了通用数据资源。RCDATA允许您包含应用程序的原始数据资源。原始数据资源允许在可执行文件中直接包含二进制数据。例如,上面的RCDATA语句命名应用程序的二进制资源Intro并指定文件introsong.mp3,其中包含该mp3文件的歌曲。

注意:确保.rc文件中列出的所有资源都可用。如果文件位于项目目录中,则不必包含完整的文件名。在my.rc文件中,.wav歌曲位于磁盘的*某处*,动画和MP3歌曲都位于项目目录中。

创建资源文件(.res)

要使用资源脚本文件中定义的资源,必须使用Borland的资源编译器将其编译为.res文件。资源编译器根据资源脚本文件的内容创建一个新文件。此文件的扩展名通常为.res。Delphi链接器稍后会将.res文件重新格式化为资源对象文件,然后将其链接到应用程序的可执行文件。

Borland的资源编译器命令行工具位于Delphi Bin目录中。名称为BRCC32.exe。只需转到命令提示符并键入brcc32,然后按Enter键。由于Delphi\Bin目录位于您的路径中,因此会调用Brcc32编译器并显示使用帮助(因为它是在没有参数的情况下调用的)。

要将AboutDelphi.rc文件编译为.res文件,请在命令提示符下(在项目目录中)执行此命令:

BRCC32 AboutDelphi.RC

默认情况下,编译资源时,BRCC32使用.RC文件的基名称命名已编译的资源(.RES)文件,并将其放置在与.RC文件相同的目录中。

您可以根据需要为资源文件命名,只要它的扩展名为“.RES”,并且没有扩展名的文件名与任何单元或项目文件名不同。这一点很重要,因为默认情况下,编译成应用程序的每个Delphi项目都有一个与项目文件同名但扩展名为.RES的资源文件。最好将文件保存到与项目文件相同的目录中。

包括(链接/嵌入)资源到可执行文件

将.RES文件链接到可执行文件后,应用程序可以根据需要在运行时加载其资源。要实际使用该资源,您必须进行一些Windows API调用。

为了阅读本文,您需要一个带有空白表单的新Delphi项目(默认的新项目)。当然,将{$R AboutDelphi.RES}指令添加到主窗体的单元中。终于到了了解如何在Delphi应用程序中使用资源的时候了。如上所述,为了使用exe文件中存储的资源,我们必须处理API。但是,可以在Delphi帮助文件中找到启用“资源”的几种方法。

例如,查看TBitmap对象的LoadFromResourceName方法。此方法提取指定的位图资源并将其分配给TBitmap对象。这正是LoadBitmap API调用所做的。一如既往,Delphi改进了API函数调用,以更好地满足您的需求。

现在,将TMediaPlayer组件添加到表单(名称:MediaPlayer1)并添加一个TButton(按钮2)。让OnClick事件如下所示:

一个小问题是应用程序在用户机器上创建MP3歌曲。您可以添加一个代码,在应用程序终止之前删除该文件。

什么时候开始。???

当然,二进制文件的所有其他类型都可以存储为RCDATA类型。TRsourceStream是专门为帮助我们从可执行文件中提取此类文件而设计的。可能性是无穷无尽的:exe中的HTML、exe中的exe、exe中的空数据库,等等。

  • 发表于 2021-09-06 15:08
  • 阅读 ( 190 )
  • 分类:IT

你可能感兴趣的文章

用delphi创建、解析和操作xml文档

...XML数据之类的操作。 作为一名Delphi程序员,您应该知道如何使用XML文档。 xml与delphi 有关将Delphi与XML配对的更多信息,请阅读: 了解如何将TTreeView组件项存储到XML(保留树节点的文本和其他属性),以及如何从XML文件填充...

  • 发布于 2021-09-06 15:05
  • 阅读 ( 164 )

使用delphi的键入文件文件创建数据库

...t record} Seek(F, FileSize(F)) ; 更改和更新 您刚刚学会了如何编写和读取整个成员数组,但如果您只想查找第10个成员并更改电子邮件,该怎么办?下一个过程正是这样做的: procedure ChangeEMail(const RecN : integer; const NewEMail : str...

  • 发布于 2021-09-06 15:11
  • 阅读 ( 170 )

了解delphi编程的基础知识

...扩展的应用程序。 之后,探索Delphi实际上是什么,以及如何安装和配置其开发环境。在此基础上,探索DelphiIDE的主要部分和工具。 “你好,世界!” 通过创建一个简单的项目、编写代码、编译和运行项目,开始您对Delphi应...

  • 发布于 2021-09-06 15:13
  • 阅读 ( 180 )

理解delphi项目和单元源文件

...供了在软件后台出现的许多功能。 例如,应用程序处理如何从程序菜单调用帮助文件。 DPROJ是Delphi项目文件的另一种文件格式,但它以XML格式存储项目设置。 pas文件 PAS文件格式保留用于Delphi单元源文件。您可以通过项目...

  • 发布于 2021-09-06 15:15
  • 阅读 ( 171 )

德尔福单元剖析(德尔福初学者版)

如果您打算成为一名优秀的Delphi程序员,那么“接口”、“实现”和“使用”等词需要在您的编程知识中占有特殊的位置。 德尔福项目 当我们创建一个Delphi应用程序时,我们可以从一个空白项目、一个现有项目或Delphi的一...

  • 发布于 2021-09-10 20:53
  • 阅读 ( 180 )

如何构建没有gui的控制台应用程序(build console applications with no gui)

...只是控制台应用程序。 新:控制台应用程序 下面介绍如何快速构建在没有图形界面的情况下运行的控制台应用程序。 如果您的Delphi版本高于4,那么您所要做的就是使用Console应用程序向导。Delphi5介绍了控制台应用程序向导...

  • 发布于 2021-09-10 22:34
  • 阅读 ( 250 )

用delphi和ado编辑excel表格

本分步指南介绍了如何连接到Microsoft Excel、检索图纸数据以及如何使用DBGrid编辑数据。您还可以找到流程中可能出现的最常见错误的列表,以及如何处理这些错误。 以下内容包括: Excel和Delphi之间的数据传输方法。如何使...

  • 发布于 2021-09-11 00:21
  • 阅读 ( 238 )

在delphi应用程序中使用tclientdataset的指南

...的内存存储时,必须显式定义表的结构。本文将向您展示如何使用FieldDefs在运行时和设计时执行此操作。 使用TFields定义ClientDataSet的结构本文演示如何在设计时和运行时使用TFields定义ClientDataSet的结构。还演示了创建虚拟和嵌...

  • 发布于 2021-09-15 03:38
  • 阅读 ( 150 )

从delphi代码执行并运行应用程序和文件

...open', 'c:\MyDocuments\Letter.doc',nil,nil,SW_SHOWNORMAL) ; 下面介绍如何查找与扩展关联的应用程序。 使用默认的web explorer打开网站或*.htm文件 ShellExecute(Handle, 'open','http://delphi.about.com',nil,nil, SW_SHOWNORMAL) ; 发送带有主题和邮件正文...

  • 发布于 2021-09-15 03:48
  • 阅读 ( 139 )

delphi中的基本剪贴板操作(剪切/复制/粘贴)

...贴到应用程序的任何文本或图形的容器。本文将向您展示如何使用TClipboard对象在Delphi应用程序中实现剪切复制粘贴功能。 一般剪贴板 您可能知道,剪贴板一次只能保存一段相同类型的数据进行剪切、复制和粘贴。如果我们...

  • 发布于 2021-09-15 03:52
  • 阅读 ( 273 )
kmc4281
kmc4281

0 篇文章

相关推荐