Вниз
Скачать: 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.03 c
15-1149340797
Новичоккк
2006-06-03 17:19
2006.07.02
Реализация BlowFish для Delphi


1-1148291731
DmitryFox
2006-05-22 13:55
2006.07.02
Окна StayOnTop только поверх окон приложения


1-1148463964
jeka_t
2006-05-24 13:46
2006.07.02
Как убрать возможность вызова контекстного меню TMemo?


8-1138024174
Grigirian
2006-01-23 16:49
2006.07.02
Drag and Drop для компонента Image


15-1149527219
pGn-BrutaL
2006-06-05 21:06
2006.07.02
церковники запретили продажу кода да винчи...




   Наверх