我会发现你的问题。 我有一个名为“JBCompRes.Res”的资源文件。此文件有两个图像,用于创建特定按钮中的组件。
这些图像用于多个组件,我在我的框架中创建了一个存储所有资源文件的特定文件夹。
要从资源文件加载图像,我使用方法:“LoadFromResourceName”作为下面的代码示例:
unit MyCalcEdit;
Uses SysUtils , MyResources ;
{$R JBCompRes.RES } // my resource file
{TCalcEdit}
TCalcEdit constructor Create ( AOwner : TComponent ) . ;
Begin
Inherited ;
BeepOnEnter : = False ;
Style.BorderStyle : = ebs3D ;
Properties.ButtonGlyph.LoadFromResourceName ( HInstance , CResCalculadoraBmp ) ;
end ;
unit MyDBCalcEdit;
Uses SysUtils , MyResources ;
{$R JBCompRes.RES } / / my resource file
{TDBCalcEdit}
constructor TDBCalcEdit.Create(AOwner : TComponent);
Begin
Inherited ;
BeepOnEnter : = False ;
Style.BorderStyle : = ebs3D ;
Properties.ButtonGlyph.LoadFromResourceName ( HInstance , CResCalculadoraBmp ) ;
end;
在组件单元中,我需要引用资源文件的名称,以便加载资源的方法工作正确,但是如果我编译一个项目那个delphi 使用这些组件是消息重复的资源,如下:
[DCC警告] W1056警告:资源重复:类型2(BITMAP),ID BB_NOBMP;保存文件C:\ MyFrameWorkTest \ Resources \ JBCompRes.RES资源;文件C:\ MyFrameWorkTest \ Resources \ JBCompRes.RES资源被丢弃。
请注意,我的“JBCompRes.Res”只在一个地方,以防“C:\ MyFrameWorkTest \ Resources \”文件夹。
我确定了如何做不会产生问题,但如果我不这样做,我会在你想要称之为未找到功能的单元中引用资源文件。
关于这个问题的任何想法。
如果你能提供帮助,我们已经感激不尽了。
答案 0 :(得分:2)
编译器告诉您正在链接具有相同名称的两个资源。并且您提供的代码确认编译器是正确的。
您应该更改代码,以便只链接资源一次。
我觉得你有点困惑。我怀疑您认为需要链接加载资源的每个文件中的资源。事实并非如此。资源在模块中共享。只要资源一次链接到模块,就可以从任意多个不同的单元加载它。
如果我是你,我会创建一个简单的共享单元,其中包含定义资源名称的常量,并包含链接资源的所有$ R指令。该共享单元将是唯一将资源与$ R相关联的地方。事实上,你的单位名为MyResources,看起来已经是大部分了。您只需要将$ R指令向下移动到该单位。
答案 1 :(得分:0)
经过多次测试和模拟得出结论,如果没有生成重复资源的警告,您就无法在不同的单元中共享相同的资源。
我可能错了,但还没有办法做到这一点。
我找到的唯一方法是创建一个特定的资源文件来使用该单元。
例如,我的 JBCalcEdit 组件将具有 JBCalcEditRes.Res 。此文件包含内部使用的图像。我的组件 JBPrint 将有 JBPrintRes.Res 等等。
工作示例:
Unit UnJBCalcEdit;
Interface
Uses Classes;
Type
.......
Implementation
Uses SysUtils;
Const
CImgPadraoJBCalcEdit = 'ImgPadraoJBCalcEditBmp';
{$R UnJBCalcEdit.RES} //meu arquivo de recurso
{ TJBCalcEdit }
Constructor TJBCalcEdit.Create(AOwner: TComponent);
Begin
Inherited;
BeepOnEnter := False;
Style.BorderStyle := ebs3D;
Properties.ButtonGlyph.LoadFromResourceName(HInstance, CImgPadraoJBCalcEdit);
End;
因此,保证资源不会重复并且将被正确使用。
分析其他复杂的组件,如DevExpress,它们也是这样工作的。
Regarts。