如何在Delphi程序本身中插入图片?

6

我在我的程序中使用了一个TImage组件。

运行时,我通过以下方式向该组件添加图像:

Image1.Picture.LoadFromFile('C:\Users\53941\Pictures\eq1.jpg');

现在,我想在另一台没有我提供的源中存在这个图像文件的计算机上运行此程序。

那么,我该如何将这个图像文件存储在程序可执行文件本身中?

2个回答

12
将图像文件存储在程序资源中,使用.rc脚本或IDE的资源和图像对话框。有关详细信息,请阅读Embarcadero的文档: 资源和图像 运行时可以使用TResourceStream访问资源数据。构造一个TJPEGImage对象,将流加载到其中,并将其分配给TImage
uses
  ..., Classes, Jpeg;

var
  Strm: TResourceStream;
  Jpg: TJPEGImage;
begin 
  Strm := TResourceStream.Create(HInstance, '<Resource identifier>', RT_RCDATA);
  try
    Jpg := TJPEGImage.Create;
    try
      Jpg.LoadFromStream(Strm);
      Image1.Picture.Assign(Jpg);
    finally
      Jpg.Free;
    end;
  finally
    Strm.Free;
  end;
end;

7
您可以在设计窗体时使用对象视图器分配图像。 图像将存储在窗体的 DFM 中,并在程序运行时自动加载。
选择 TImage,在对象视图器中:
  • 选择 Picture 属性
  • 单击 ... 按钮打开图片编辑器
  • 按下 Load... 按钮并选择图像文件
  • OK 按钮关闭编辑器。
如果您想在代码中加载图像,只需像 Remy 所示那样即可。

使用资源更好,因为您可以直接将资产保存在您的版本控制系统中。将其推入.dfm文件会使可追溯性变得更加困难。 - David Heffernan
1
当然,但那是通常的RAD方式。 - Rudy Velthuis
1
是的。而且很糟糕。作为一名软件开发人员说。 - David Heffernan
2
这取决于您的需求。对于简单的程序、模型或初学者来说,这是非常有意义的。如果程序变得更大,您总是可以进行重构。 - Rudy Velthuis
1
值得一提的是,dfm将存储位图。对于大型图像可能不可取。 - Sertac Akyuz

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