Главная страница
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.025 c
9-1115022922
Monk
2005-05-02 12:35
2005.08.28
Лабиринт


5-1095098525
Константинов
2004-09-13 22:02
2005.08.28
Свойства массивы в процедуре Assign


6-1115955679
XProger
2005-05-13 07:41
2005.08.28
Размеры заголовков TCP и UDP пакектов


14-1123121764
КаПиБаРа
2005-08-04 06:16
2005.08.28
Чего только не нарисуют


1-1123482149
leonidus
2005-08-08 10:22
2005.08.28
Быстрый алгоритм удаления одинаковыз записей