Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.28;
Скачать: CL | DM;

Вниз

Несколько вопросов по созданию компонентов   Найти похожие ветки 

 
Константинов ©   (2004-09-12 14:25) [0]

1. Зачем в исходниках VCL дублируются классы? Например TLabel -> TCustomLabel
2. Как првильно создавать свойства-записи?

Пример:
TMarker = record
 Size : integer;
 Style : TMarkerStyle;
 Color : TColor;
end;

Хочу это свойство вынести в инспектор объектов
получаю:
 TMarker = class ( TPersistent )
   private
      FSize : integer;
      FStyle : TMarkerStyle;
      FColor : TColor;
   public
     procedure Assign ( Source : TPersistent );
   published
     property Size : integer read FSize write FSize;
     property Style : TMarkerStyle read FStyle write FStyle;
     property Color : TColor read FColor write FColor;
 end;
...
implementation
...
procedure TMarker.Assign(Source: TPersistent);
begin
 if Source is TMarker then
 begin
   FSize := TMarker(Source).Size;
   FStyle := TMarker(Source).Style;
   FColor := TMarker(Source).Color;
   inherited Assign ( Source );
 end;
end;

добавляю свойство в новый класс:

 TABox1 = class(TPaintBox)
 private
   FMarker: TMarker;
   procedure SetMarker ( Value : TMarker );
 public
    Constructor Create ( AOwner : TComponent ); override;
    destructor Destroy; override;
 published
   property Marker : TMarker read FMarker write SetMarker;
 end;
...
implementation
...
procedure TABox1.SetMarker(Value: TMarker);
begin
  if Assigned(Value) then FMarker.Assign(Value);
end;

constructor TABox1.Create(AOwner: TComponent);
begin
 inherited Create ( AOwner );
 FMarker := TMarker.Create;
end;

destructor TABox1.Destroy;
begin
 FMarker.Free;
 inherited Destroy;
end;

В инспекторе объектов свойство Marker видно, и даже есть крестик, чтобы развернуть список его свойств, но список не раскрывается, что я сделал не так?


 
Константинов ©   (2004-09-12 15:19) [1]

Сорри! со вторым вопросом все получилось! :)


 
Igorek ©   (2004-09-12 16:40) [2]


> 1. Зачем в исходниках VCL дублируются классы? Например TLabel
> -> TCustomLabel

Они не дублируются. Custom - это универсальные варианты. А конкретные получаются просто публикацией свойств. Делая свой компонент ты наследуешься от custom и публикуешь только то, что тебе надо.


 
icWasya ©   (2004-09-13 18:39) [3]

> 1. Зачем в исходниках VCL дублируются классы? Например TLabel
> -> TCustomLabel

что бы не задавать вопрос типа
http://delphimaster.net/view/1-1094995519/

у TCustomLabel нет Published полей


 
Константинов ©   (2004-09-13 22:02) [4]

Спасибо! Понятно!



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

Текущий архив: 2005.08.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
1-1123612655
Aleksandrrr
2005-08-09 22:37
2005.08.28
Блокировка выделенных клавиш !!!


1-1123645325
Гриха
2005-08-10 07:42
2005.08.28
Фоновый рисунок рабочего стола


3-1121851705
npr2
2005-07-20 13:28
2005.08.28
сохранение в БД картинки


3-1121338676
erika
2005-07-14 14:57
2005.08.28
Построение запросов и поиск по полям


1-1123157268
ZSergey
2005-08-04 16:07
2005.08.28
Как правильно искать файлы ?