如何恢复TImage的默认图片?

问题描述

在构建我的应用程序时,我有一个预加载timage显示;我分配给timagePicture属性文件

用户可以选择使用Image.Picture.LoadFromFile加载其他外部图像文件,并且效果很好。

但是,如果要还原预加载的图像(在表单设计期间分配的图像),如何在不从单独文件中加载图像的情况下执行此操作?

我在相应的FORM.LFM文件中看到我的预加载图像在其中

object Image: timage
...
Picture.Data = { 0A544A7065674... }

但是,我的代码似乎无法访问Picture.Data

是否有某种方法可以将原始图像(内置在EXE文件中)重新加载?

我尝试了Image.Picture.LoadFromLazarusResource(...),但不确定将什么作为字符串放置(尝试了文件名),或者不确定这是否是正确的调用方法

有什么想法吗?

解决方法

以下解决方案(我尝试了其中的一种变体)已在Lazarus论坛上提供给我,为完整性起见,我在此重复:

在Form的OnCreate事件中,将当前(设计时)TImage.Picture保存到单独的TPicture对象,然后可以在需要时将Assign()返回到TImage.Picture。

private
  OriginalPicture: TPicture;
 
procedure TMyForm.FormCreate(Sender: TObject);
begin
  OriginalPicture := TPicture.Create;
  OriginalPicture.Assign(Image.Picture);
end;
 
procedure TMyForm.FormDestroy(Sender: TObject);
begin
  OriginalPicture.Free;
end;
 
procedure TMyForm.RestoreImage;
begin
  Image.Picture.Assign(OriginalPicture);
end;