Форум: "Компоненты";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
ВнизНесколько вопросов по созданию компонентов Найти похожие ветки
← →
Константинов © (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c