Delphi 7 -> 无法从资源文件中加载图像

4

我在网络上花了数小时,使用谷歌搜索,尝试着寻找PDF文档,但仍然无法在Delphi 7中加载图像资源...

我的test.rc文件如下:

1 RT_BITMAP "1.bmp"

我使用了“项目 -> 添加到项目...”将test.rc文件添加到我的项目中,这在构建时编译了一个test.res文件,并似乎自动将.res文件包含到了我的项目中(因为使用{$R test.res}会提示我已经使用了该资源)。我还尝试使用“项目 -> 从项目中删除...”手动删除test.res文件,然后在我的项目中手动添加{$R test.res}
但是,无论我如何包含test.res文件,都会出现以下错误:

Project Project2.exe raised exception class EAccessViolation with message 'Access violation at address 00408D0C in module 'Project2.exe'. Read of address 00000001'. Process stopped. Use Step or Run to continue.

首先,我使用的是:
Image1.Picture.Bitmap.LoadFromResourceID(hInstance,1);

因为这是我在使用谷歌时发现的。我遇到了以下错误。 稍后,我尝试了:
procedure TForm1.Image1Click(Sender: TObject);
var bBitmap : TBitmap;
begin

 bBitmap := TBitmap.Create;
 try

  bBitmap.Handle := LoadBitmap(hInstance, '1');
  Image1.Width := bBitmap.Width;
  Image1.Height := bBitmap.Height;
  Image1.Canvas.Draw(0,0,bBitmap);
 finally

  bBitmap.Free;
end;


end;

这并没有给我任何错误提示,也没有显示图片,所以问题仍然未解决...
我对资源的使用是新手,但在发布项目之前,我必须将一些图像加载到资源中,这样.BMP文件就不会被篡改...
非常感谢您的帮助!

回到基础,为什么需要这样做?为什么不在设计时将位图直接分配到图像中呢?或者,如果您想要某种动态加载,为什么不使用TImageList并在运行时从那里加载所选的图像呢? - PA.
我的*.rc文件包含像IDB_BLUBB BITMAP DISCARDABLE "Blubb.bmp"这样的行,即资源类型为BITMAP而不是RT_BITMAP。也许这就是罪魁祸首。 - Uli Gerhardt
@PA- 我正在使用一台机器的可视化界面。我唯一能够多次使用TImageList的方法是,将默认的.bmp文件加载到图像组件中,然后再从图像列表中加载另一个图像(因为一旦你从TImageList加载了一个图像,就不能再向同一图像组件加载另一个图像);我需要将默认的BMP图像文件作为资源存储,以防止被篡改。 - user513185
1个回答

7

我在一个测试程序中重现了你的问题。

然后,我将RT_BITMAP更改为BITMAP,重新编译RC并进行了测试。

现在它可以正常工作了。


太棒了! :) 非常感谢!我所做的就是按照您建议的方式修改我的.RC文件(仅将RT_BITMAP替换为BITMAP)。并且只使用一条语句来加载资源:Image1.Picture.Bitmap.LoadFromResourceID(hInstance, 1); 它完成了工作!不需要进一步添加。- 使用Delphi 7 Pro。感谢PA,您不知道您对我有多大帮助! :) - user513185
我使用“项目->添加到项目”加载了.rc文件。我真心希望这能帮助其他遇到此问题的人。 - user513185

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接