1
votes

I have an Object Inspector, just like Delphi's, which I show at run-time to allow the user to change properties of components displayed in my app.

I would like to create a component derived from TImage with one extra property where I can store the path from which the image was loaded. To do so, I presume that I can subclass TImage, have an event to select the image by using something like ...

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

But, if I wrap that in a proc/fn, what's the signature and how do I get it to be called when the user clicks on the ellipsis next to the Picture property in the Object Inspector?


Or perhaps my question ought to have been whether there is an existing 3rd party component which already does this ...


50 point bounty for a free component which can be used in commercial applications (I will increase the bounty for an very good component)


If anyone can give the URL of a component that does this then I will start another bounty, 100 this time, and award it to them

4
Mawg, you're miss-identifying the problem: The problem's not with the TImage (or descendant), the problem's with your TMS Object Inspector. If this were Delphi's Object Inspector the solution would have been to register an Property Editor, it's a well-known solution and easy to implement. With the TMS Object Inspector you need to ask the TMS people how to do something similar (or, more likely, hack your way into the source code - you do have the source code for the object inspector, right?).Cosmin Prund

4 Answers

4
votes

That depends on how your Object Inspector works. It would help if we knew where you got it from.

The way it works in Delphi's Object Inspector is that BPL packages can register property designers with the IDE, so when it sees a certain type, such as your custom TImage, it opens that designer instead of whatever it would normally open. See if your Object Inspector supports this, or if not, if you can add the functionality.

1
votes

TImage does not know the file name of the loaded picture. Because it receives only the image content, not the file name. So in order to get this information you must replace that default open picture select dialog with your own, and in it you pass the filename and the image content. Then your custom TImage can store this information.

0
votes

MiTeC's ImageEx is a small, simple and free component that extends Delphi's TImage. It doesn't have a "path" property, but it has an "about" property that you could use as the path property, or as a template to add your own path property.

For something more comprehensive and not too expensive, you might try the Envision Image library by Interval Software, It is integrated with Delphi's TImage. It costs $69 US.

0
votes

If i understood correctly, you want to load an image, then get the path to image's file. This should work:

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

Easy Peasy