Вниз
Скачать: CL | DM;

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

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.024 c
2-1150386453
тт
2006-06-15 19:47
2006.07.02
Как запустить агента? ( Джина )


3-1146728733
Alexey V.
2006-05-04 11:45
2006.07.02
Курс валюты в выходные дни


1-1146556729
gear
2006-05-02 11:58
2006.07.02
Своя прорисовка на закладке, поверх стандартной. Возможно ли?


15-1149513475
infom
2006-06-05 17:17
2006.07.02
Компоненты для работы с большими целыми числами.


3-1146664555
Александр1
2006-05-03 17:55
2006.07.02
Соединение с табличкой DBF




   Наверх