用Delphi代码添加资源文件
我有一个自定义的res文件“myres.res”。 现在我在应用程序中使用它,我在DPR项目文件中的{$R*.res}行下添加了{$R myres.res},效果非常好 现在我想要一个带有布尔属性“UseCustomeRes”的VCL组件。如果我设置UseCustomers=True,我希望在编译项目时添加res文件,但如果我设置UseCustomers=False,我不希望在编译项目时使用res文件用Delphi代码添加资源文件,delphi,resources,vcl,Delphi,Resources,Vcl,我有一个自定义的res文件“myres.res”。 现在我在应用程序中使用它,我在DPR项目文件中的{$R*.res}行下添加了{$R myres.res},效果非常好 现在我想要一个带有布尔属性“UseCustomeRes”的VCL组件。如果我设置UseCustomers=True,我希望在编译项目时添加res文件,但如果我设置UseCustomers=False,我不希望在编译项目时使用res文件 这可能吗?我不知道这是否可能以及如何可能。在运行时选择资源 如果您想使用(或不使用)基于运行时
这可能吗?我不知道这是否可能以及如何可能。在运行时选择资源
如果您想使用(或不使用)基于运行时变量的资源,您必须始终编译它,否则您将失去在运行时使用它的选项 运行时,您可以使用
TResourceStream
访问资源
下面是一个例子:
procedure ExtractResource;
var
rs: TResourceStream;
begin
rs:= TResourceStream.Create(HInstance, 'NameOfResource', RT_RCDATA);
try
rs.Position:= 0;
rs.DoSomethingWithTheResource...
finally
rs.Free;
end;
end;
以下是联机帮助:请注意,TResourceStream的帮助条目有点不完整;它不会显示所有方法。
缺少的方法如下所示:
在编译时选择资源
请注意,
{$R*.res}
行包括当前目录中的任何.res文件。如果要选择特定的.res文件,则必须排除此行。
使用
定义
完成条件编译,如下所示:
implementation
{.R *.res} //disable the *.res inclusion.
{$IFDEF GetMyResource}
{$R MyResource.res} //will only be compiled if `GetMyResource` is defined
{$ENDIF}
{$R AlwaysIncludeThisResource.res} //will always be included.
然后在项目选项下的条件定义中定义符号
GetMyResource
,请参见此处:在运行时拾取资源如果您想使用(或不使用)基于运行时变量的资源,您必须始终编译它,否则您将失去在运行时使用它的选项 运行时,您可以使用
TResourceStream
访问资源
下面是一个例子:
procedure ExtractResource;
var
rs: TResourceStream;
begin
rs:= TResourceStream.Create(HInstance, 'NameOfResource', RT_RCDATA);
try
rs.Position:= 0;
rs.DoSomethingWithTheResource...
finally
rs.Free;
end;
end;
以下是联机帮助:请注意,TResourceStream的帮助条目有点不完整;它不会显示所有方法。
缺少的方法如下所示:
在编译时选择资源
请注意,
{$R*.res}
行包括当前目录中的任何.res文件。如果要选择特定的.res文件,则必须排除此行。
使用
定义
完成条件编译,如下所示:
implementation
{.R *.res} //disable the *.res inclusion.
{$IFDEF GetMyResource}
{$R MyResource.res} //will only be compiled if `GetMyResource` is defined
{$ENDIF}
{$R AlwaysIncludeThisResource.res} //will always be included.
然后在项目选项下的条件定义中定义符号
GetMyResource
,请参见此处:链接器基于特殊$RESOURCE指令的存在包括资源。不能根据对象实例属性的值切换这些指令
所以,有了内置的工具,现在就可以实现您想要的了。您需要做的是添加一个构建后步骤,该步骤通过在需要时添加资源来修改输出文件。一个很好的工具例子就是madeexcept。链接器基于特殊$RESOURCE指令的存在而包含资源。不能根据对象实例属性的值切换这些指令
所以,有了内置的工具,现在就可以实现您想要的了。您需要做的是添加一个构建后步骤,该步骤通过在需要时添加资源来修改输出文件。MadException就是一个很好的例子。您可以制作一个组件,将任何数据保存为DFM文件/资源的一部分。您可以制作一个组件,将任何数据作为DFM文件/资源的一部分保存。或者拿一些已经存在的。