Нужна помощь с производным от TImage (чтобы сохранить путь к файлу изображения)

У меня есть Object Inspector, такой же как Delphi, который я показываю во время выполнения, чтобы позволить пользователю изменять свойства компонентов, отображаемых в моем приложении.

Я хотел бы создать компонент, производный от TImage, с одним дополнительным свойством, в котором я могу сохранить путь, с которого было загружено изображение. Для этого я предполагаю, что могу создать подкласс TImage, иметь событие для выбора изображения, используя что-то вроде ...

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

Но если я оберну это в proc / fn, что это за подпись и как мне заставить ее вызываться, когда пользователь нажимает на многоточие рядом со свойством Picture в Инспекторе объектов?

Или, возможно, мой вопрос должен был быть, есть ли существующий сторонний компонент, который уже делает это ...

Награда в 50 баллов за бесплатный компонент, который можно использовать в коммерческих приложениях (я увеличу вознаграждение за очень хороший компонент)

Если кто-то может дать URL-адрес компонента, который делает это, то я начну еще одну награду, на этот раз 100, и присуждаю ее им.

 Cosmin Prund29 сент. 2010 г., 13:44
Mawg, вы неправильно идентифицируете проблему: проблема не в TImage (или потомке), а в вашем инспекторе объектов TMS. Если бы это был объектный инспектор Delphi, решение было бы зарегистрировать редактор свойств, это хорошо известное решение, и его легко реализовать. С TMS Object Inspector вам нужно спросить сотрудников TMS, как сделать что-то подобное (или, что более вероятно, взломать свой путь к исходному коду - у вас есть исходный код для инспектора объектов, верно?).

Ответы на вопрос(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

Очень просто

как работает ваш инспектор объектов. Это помогло бы, если бы мы знали, откуда вы это взяли.

В инспекторе объектов Delphi он работает так, что пакеты BPL могут регистрировать конструкторы свойств в среде IDE, поэтому при обнаружении определенного типа, такого как пользовательский TImage, он открывает этот конструктор вместо того, что он обычно открывает. Посмотрите, поддерживает ли ваш Инспектор объектов это, или если нет, можете ли вы добавить функциональность.

 Mawg20 сент. 2010 г., 04:58
+1 спасибо за быстрый ответ. Инспектор объектов - это компонент TMS от TMS Script Studio Pro. Я добавил другие свойства, но с теми, которые мне просто нужно было кодировать процедуры чтения / записи. Этот более хитрый.

MiTeC's ImageEx небольшой, простой и бесплатный компонент, расширяющий TImage Delphi. У него нет свойства path, но есть свойство about, которое вы можете использовать как свойство пути или как шаблон для добавления собственного свойства пути.

Для чего-то более всеобъемлющего и не слишком дорогого, вы можете попробоватьбиблиотека изображений Envision от Interval Software, Он интегрирован с TImage Delphi. Это стоит 69 долларов США.

 Mawg02 окт. 2010 г., 05:41
ImageEx звучит хорошо, но нет документации или примера того, как его использовать
 Mawg03 окт. 2010 г., 03:05
+1 Я согласен, и я подумал, что знаю достаточно о расширении компонентов, добавлении редакторов свойств и т. Д. Меня отталкивает то, что когда кто-то не может потрудиться произвестилюбой документация, либо онлайн, либо в файле readme, и ни одного комментария в их коде, обычно у меня плохой опыт.
 lkessler02 окт. 2010 г., 20:19
Он небольшой и достаточно простой, чтобы его можно было легко изменить, чтобы можно было добавить к нему свойство пути. Это даст вам то, что вы хотите - TImage со свойством path. Изучение того, как расширять компоненты, полезно знать и делать в Delphi, хотя я должен признать, что сам не сделал этого.
Решение Вопроса

только содержимое изображения, а не имя файла. Таким образом, чтобы получить эту информацию, вы должны заменить открытое по умолчанию диалоговое окно выбора изображений своим собственным, и в нем вы передаете имя файла и содержимое изображения. Тогда ваш пользовательский TImage может хранить эту информацию.

 Mawg14 янв. 2011 г., 03:44
+1 спасибо за помощь. Пожалуйста, примите мои извинения за задержку в принятии вашего ответа.

Ваш ответ на вопрос