Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Хранение ресурса "внутри" компонента. [D7, WinXP]


Vaitek_ ©   (2005-12-18 12:42:00) 

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


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

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

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


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

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

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


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

А чтобы ничего этого не делать, надо поручить всю эту работу самой 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.


mvv-finder   (2005-12-18 20:44:00) [4]

Как реализовать диалог выбора в двух словах не расскажешь.
Необходимо создать класс-наследник 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');


Наверх

Титульная страница Поиск, карта сайта Написать письмо