【问题标题】:Need help with deriving from TImage (to store the path to image's file)需要从 TImage 派生的帮助(存储图像文件的路径)
【发布时间】:2010-09-20 02:36:27
【问题描述】:

我有一个对象检查器,就​​像 Delphi 的一样,我在运行时显示它以允许用户更改在我的应用程序中显示的组件的属性。

我想创建一个从 TImage 派生的组件,它具有一个额外的属性,我可以在其中存储加载图像的路径。为此,我假设我可以将 TImage 子类化,有一个事件来通过使用类似的东西来选择图像......

   var OpenPictureDialog: TPictureEditorDlg;
    if OpenPictureDialog1.Execute then
       OpenPictureDialog1.FileName  <-- contains what I want 

但是,如果我将其包装在 proc/fn 中,那么签名是什么?当用户单击 Object Inspector 中 Picture 属性旁边的省略号时,如何调用它?


或者也许我的问题应该是是否有一个现有的 3rd 方组件已经这样做了......


可用于商业应用的免费组件奖励 50 点奖励(非常好的组件我会增加奖励)


如果有人可以提供执行此操作的组件的 URL,那么我将开始另一个赏金,这次是 100,并将其奖励给他们

【问题讨论】:

  • Mawg,您错误地识别了问题:问题不在于 TImage(或后代),而在于您的 TMS 对象检查器。如果这是 Delphi 的 Object Inspector,解决方案将是注册一个 Property Editor,这是一个众所周知的解决方案并且易于实现。使用 TMS 对象检查器,您需要询问 TMS 人员如何做类似的事情(或者,更有可能的是,侵入源代码 - 您确实拥有对象检查器的源代码,对吗?)。

标签: delphi


【解决方案1】:

这取决于您的对象检查器的工作方式。如果我们知道您从哪里得到它,那将会有所帮助。

它在 Delphi 的 Object Inspector 中的工作方式是 BPL 包可以向 IDE 注册属性设计器,因此当它看到某种类型(例如您的自定义 TImage)时,它会打开该设计器,而不是通常打开的任何东西。查看您的 Object Inspector 是否支持此功能,如果不支持,是否可以添加该功能。

【讨论】:

  • +1 感谢您的快速回复。对象检查器是 TMS scripter studio pro 的一个 TMS 组件。我添加了其他属性,但我只需要编写读/写例程代码。这个比较棘手。
【解决方案2】:

TImage 不知道加载图片的文件名。因为它只接收图像内容,而不接收文件名。因此,为了获得此信息,您必须用您自己的替换默认打开图片选择对话框,并在其中传递文件名和图像内容。然后您的自定义 TImage 可以存储此信息。

【讨论】:

  • +1 感谢您的帮助。对于延迟接受您的回答,请接受我的歉意。
【解决方案3】:

MiTeC's ImageEx 是一个小型、简单且免费的组件,它扩展了 Delphi 的 TImage。它没有“路径”属性,但有一个“关于”属性,您可以将其用作路径属性,或用作添加您自己的路径属性的模板。

想要更全面又不贵的可以试试the Envision Image library by Interval Software,它集成了Delphi的TImage。售价 69 美元。

【讨论】:

  • ImageEx 听起来不错,但没有文档或示例说明如何使用它
  • 它足够小和简单,你应该可以很容易地修改它,这样你就可以向它添加一个路径属性。这样做会给你你想要的 - 一个带有路径属性的 TImage 。学习如何扩展组件是在 Delphi 中了解和做的一件有用的事情,尽管我不得不承认我自己并没有做太多。
  • +1 我同意,而且我认为我对扩展组件、添加属性编辑器等有足够的了解。让我感到厌烦的是,当有人懒得生产 any 在线或自述文件中的文档,并且在他们的代码中没有一条评论,我通常有一个糟糕的体验。
【解决方案4】:

如果我理解正确,您想加载图像,然后获取图像文件的路径。 这应该有效:

procedure TForm1.Button1Click(Sender: TObject);
var Imagefilepath:String;    //Declare Imagefilepath:String;
begin
//Get name of file path
if opendialog1.Execute then Imagefilepath:=opendialog1.FileName;

//Load the picture
image1.Picture.LoadFromFile(Imagefilepath);

//show the name
showmessage(Imagefilepath);
end;

And make sure you have written in uses "JPEG" so that it loads JPEG images

简单易学

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多