如何获取TImage TPicture的文件路径?

时间:2011-03-28 07:23:04

标签: delphi

  

可能重复:
  Can I retrieve Filename for TPicture directly?
  Need help with deriving from TImage (to store the path to image's file)

这个人多年来一直困扰着我。

我有自己的Object Inspector(实际上是TMS),它在运行时可见。当用户添加TImage时,他可以单击“image”旁边的省略号(...),弹出标准的“文件打开”对话框。但是,在单击“加载”后,无法获取磁盘上图像的文件路径(我想使用相同的文件名复制到不同的目录)。

有没有人知道FOSS组件可以让我这样做?或者知道我要用什么子类滚动自己?

2 个答案:

答案 0 :(得分:1)

您必须创建TMS对象检查器的后代,并挂钩到它呈现用于选择文件的对话框的位置。然后,您可以将文件名存储在后代为该信息提供的新属性中。

没有您正在使用的TMS组件,我无法告诉您这是否可行。

你也可以为TGraphic写一个替换属性编辑器;但是,这会影响每个TImage。 JEDI JVCL有几个自定义属性编辑器的例子(比如用于TLabel.Caption之类的多行字符串属性编辑器)。该属性编辑器将提供它自己的TOpenPictureDialog,并且可以使用文件名执行它想要的操作。

答案 1 :(得分:0)

使用标准的VCL TPicture后代,你不能。

TPicture后代存储图形数据本身,并不要求将此图片存储在文件中一次。

例如,您可以拥有来自其他来源的TPicture后代实例,而不涉及任何文件,例如:

  • 图片即时创建
  • 图片是在线或从设备流(如摄像机,扫描仪,网络摄像头等)获取的,
  • 图片从剪贴板粘贴

如果您因任何原因必须知道文件的来源,您必须自己编写TPicture后代并跟踪这些信息。如果您自己的后代与库(包括VCL)或IDE本身交互,您会发现问题,因为那些不会使用也不会设置您的自定义属性,或者将使用 LoadFromStream 之类的方法而不是< EM> LoadFromfile 。例如,在这种情况下,您没有参考该流的来源。