delphi - Delphi>是否可以在我的单元(不是dfm)中存储位图的数据?

标签 delphi components

我在一个单元中声明了一个类,它需要使用特定的位图。
它在我的测试单元的DFM中声明为:

  object ImgTop: TImage
    Left = 208
    Top = 568
    Width = 777
    Height = 41
    Picture.Data = {
      0A544A504547496D616765A1CF0000FFD8FFE000104A46494600010101025802
      [truncated]
      };


但是在我的最后一个单元中,我将不会有dfm。
那么有什么方法可以在我的单位中声明它吗?

===

谢谢,我现在似乎可以正常使用了,关于位图的大小限制很可惜:(
这是我所做的:

这些文件在我的文件夹中:

imgleft.bmp
imgtop.bmp


这是我的资源文件,名为ScanOCRres.rc:

1 RT_BITMAP "imgtop.bmp"
2 RT_BITMAP "imgleft.bmp"


我将其设置为使用C:\ Program Files \ Borland \ Delphi 7 \ bin \ brcc32.exe自动执行

它生成了文件

ScanOCRres.RES


在我的单位里
实施

{$R *.dfm}
{$R ScanOCRres.RES}


这是我的代码:

var
  abmp : TBitmap;
begin
  abmp := TBitmap.create;
  abmp.LoadFromResourceID(SysInit.HInstance, 1);
  abmp.free;
end;


我在LoadFromResourceID行上收到此错误消息:

Project Project1.exe引发了异常类EAccessViolation,消息为“ Project1.exe”中的“地址0040A2C8处的访问冲突”。读取地址00000001'

最佳答案

您可以将其放入代码中,但使用起来并不方便。声明一个字节数组并定义图像的每个字节。祝您编辑顺利。要加载它,我将字节数组包装到TMemoryStream中,然后使用LoadFromStream

更好的方法是将图像存储在资源中。编写如下的资源脚本文件:

1 RT_BITMAP "foo.bmp"


将该.rc文件添加到您的Delphi项目中,它将自动链接到您的程序。在运行时,用TBitmap.LoadFromResourceId加载图像:

var
  b: TBitmap;
begin
  b := TBitmap.Create;
  b.LoadFromResourceId(SysInit.HInstance, 1);

关于delphi - Delphi>是否可以在我的单元(不是dfm)中存储位图的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4082502/

相关文章:

json - 在 Delphi XE5 中生成一个包含数组的示例 JSON

jsf - 将新组件动态添加到 JSF 组件树时重复 id

javascript - 如果一个函数组件具有内部可变状态,它可以被认为是纯函数组件吗?

javascript - React Material 组件拒绝在代码沙盒中水平居中

Angular2 路由组件与父组件的交互

delphi - OnKeyDown 不适用于从主窗体调用的对话框(也使用 OnKeyDown)

delphi - 转换 TNTUnicode

multithreading - Delphi XE2中的TThreadedStringList

Delphi - 需要 COM/OLE 启动示例

angularjs - Angular (1.5.8) 动态组件