Главная страница
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.056 c
9-1115313088
Кефир87
2005-05-05 21:11
2005.08.28
OpenGL грузится одна и та же текстура (?)


1-1123494602
gemini
2005-08-08 13:50
2005.08.28
О DLL


1-1123521771
Андрей Молчанов
2005-08-08 21:22
2005.08.28
TStringList.AddObject


1-1123213552
Viktop
2005-08-05 07:45
2005.08.28
Изменить высоту элемента в TreeView


4-1120281673
Lex_!
2005-07-02 09:21
2005.08.28
SpeechApi - не говорит по русски