Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];

Вниз

Хранение ресурса "внутри" компонента.   Найти похожие ветки 

 
Vaitek_   (2005-12-18 12:42) [0]

Как мне реализовать в собственном компоненте диалог выбора (на этапе поектирования) и возможность хранения связанного изображения (bmp) "внутри" экземпляра компанента, как это сделано в TSpeedButton или TImage. Пробывал смотреть исходники, что-то не могу понять сам.


 
mvv-finder ©   (2005-12-18 20:44) [1]

Как реализовать диалог выбора в двух словах не расскажешь.
Необходимо создать класс-наследник TPropertyEditorClass и зарегистрировать его процедурой RegisterPropertyEditor.

TMyComponent = class
private
 FMyProperty: TMyPropertry;
public
 property MyProperty: TMyPropertry read FMyProperty write FMyProperty;
end;
...
TMyPropertryEditor = class(TPropertyEditorClass)
 function GetValue: string; override;
 procedure SetValue(const Value: string); override;
end;
...
RegisterPropertyEditor(TypeInfo(TMyPropertry), TMyComponent , "MyProperty", TMyPropertryEditor);


А картинку проще всего загрузить из res-файла, например, в конструкторе компоненты.

MyComponent.Picture.Bitmap.LoadFromResourceName(HInstance, "TMYPICTURE");


 
Юрий Зотов ©   (2005-12-18 23:33) [2]

А чтобы ничего этого не делать, надо поручить всю эту работу самой Delphi. В ней все уже есть, надо только правильно сделать свойство.

type
 TMyComp = class(...)
 private
   FPicture: TPicture;
   procedure SetPicture(Value: TPicture);
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 published
   property Picture: TPicture read FPicture write SetPicture;
 end;

constructor TMyComp.Create(AOwner: TComponent);
begin
 inherited;
 FPicture := TPicture.Create
end;

destructor TMyComp.Destroy;
begin
 FPicture.Free;
 inherited
end;

procedure TMyComp.SetPicture(Value: TPicture);
begin
 FPicture.Assign(Value)
end;


Это тот минимальный код, который обеспечивает диалог выбора картинки и ее сохранение. Если нужно что-то еще (прорисовка картинки, реакция на ее изменение и пр). - см. исходники TImage.


 
Vaitek_   (2005-12-19 16:18) [3]

Супер! Работает. Спасибо Всем!

З.Ы. А вот если забыть строчку FPicture.Assign(Value) и оставить вместо неё стандартное FPicture := Value - это такие глюки начнутся!!! :-D


 
Юрий Зотов ©   (2005-12-19 16:51) [4]

> если ... оставить ... стандартное FPicture := Value - ... глюки начнутся

Вообще-то, для разработчика компонентов это должно быть очевидной азбукой. Если не так - значит, рановато еще компоненты писать.



Страницы: 1 вся ветка

Форум: "Компоненты";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.011 c
15-1149753417
ProScan
2006-06-08 11:56
2006.07.02
Как посмотреть всё установленное оборудование в XP SP2


1-1148280945
deltav1
2006-05-22 10:55
2006.07.02
TTimer


10-1121155518
Sinsin
2005-07-12 12:05
2006.07.02
Как можно узнать, был ли запущен сервер вручную?


2-1150358385
Crazy manager
2006-06-15 11:59
2006.07.02
Как узнать номер месяца


2-1150291320
StriderMan
2006-06-14 17:22
2006.07.02
TTreeView количество узлов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский