![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хранение ресурса "внутри" компонента. [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');