Главная страница
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.47 MB
Время: 0.023 c
1-1123474947
Ldt
2005-08-08 08:22
2005.08.28
Из GSM кодировки в ASCII


6-1115995722
-=Alecsey=-
2005-05-13 18:48
2005.08.28
Twebbrouser


4-1120640417
slaga
2005-07-06 13:00
2005.08.28
Возможность программы прятаться систем трей


3-1121678289
Viktor1
2005-07-18 13:18
2005.08.28
Exception сервера об отсутствии прав у пользователя.


1-1123180138
rlz
2005-08-04 22:28
2005.08.28
Нужна помощь