![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Несколько вопросов по созданию компонентов [D7, WinXP]
Константинов © (2004-09-12 14:25:00)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-13 22:02:00) [1]Спасибо! Понятно!
icWasya (2004-09-13 18:39:00) [2]> 1. Зачем в исходниках VCL дублируются классы? Например TLabel
> -> TCustomLabel
что бы не задавать вопрос типа
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1094995519&n=0
у TCustomLabel нет Published полей
Igorek (2004-09-12 16:40:00) [3]
> 1. Зачем в исходниках VCL дублируются классы? Например TLabel
> -> TCustomLabel
Они не дублируются. Custom - это универсальные варианты. А конкретные получаются просто публикацией свойств. Делая свой компонент ты наследуешься от custom и публикуешь только то, что тебе надо.
Константинов (2004-09-12 15:19:00) [4]Сорри! со вторым вопросом все получилось! :)