Здравствуйте, Dudao, Вы писали:
D>Как написать класс подобный, например TMenuItem, TtreeNode и etc?
Руками, как же еще:
type
TElement = class
private
FElements: TList;
function GetElement(Index: Integer): TElement;
public
constructor Create; reintroduce; virtual;
destructor Destroy; override;
procedure Add(Element: TElement);
procedure Delete(Index: Integer);
property Children[Index: Integer]: TElement read GetElement; default;
end;
implementation
constructor TElement.Create;
begin
inherited;
FElements := TObjectList.Create(True);
end;
destructor TElement.Destroy;
begin
FElements.Free;
end;
function TElement.GetElement(Index: Integer): TElement;
begin
Result := TElement(FElements[Index]);
end;
procedure TElement.Add(Element: TElement);
begin
FElements.Add(Element);
end;
procedure TElement.Delete(Index);
begin
FElements.Extract(Index);
end;
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Здравствуйте, Dudao, Вы писали:
D>Как написать класс подобный, например TMenuItem, TtreeNode и etc?
D>Интересует свойство items в котором присутствует такое же вложенное свойство.
По крайней мере взять и посмотреть исходники, и если понравится — скопировать
TMenuItem (Menus.pas)
TTreeNode (ComCtrls.pas)
Здравствуйте, Danchik, Вы писали:
D>Здравствуйте, Dudao, Вы писали:
D>>Как написать класс подобный, например TMenuItem, TtreeNode и etc?
D>>Интересует свойство items в котором присутствует такое же вложенное свойство.
D>По крайней мере взять и посмотреть исходники, и если понравится — скопировать
D>TMenuItem (Menus.pas)
D>TTreeNode (ComCtrls.pas)
Смотрел, смотрел. Даже через ModelMaker смотрел. Но, не разобрался. Видно практики здесь мало было.
Здравствуйте, ekamaloff, Вы писали:
D>>Как написать класс подобный, например TMenuItem, TtreeNode и etc?
E>Руками, как же еще:
E>E>type
E> TElement = class
E> private
E> FElements: TList;
E> function GetElement(Index: Integer): TElement;
E> public
E> constructor Create; reintroduce; virtual;
E> destructor Destroy; override;
E> procedure Add(Element: TElement);
E> procedure Delete(Index: Integer);
E> property Children[Index: Integer]: TElement read GetElement; default;
E> end;
E>implementation
E>constructor TElement.Create;
E>begin
E> inherited;
E> FElements := TObjectList.Create(True);
E>end;
E>destructor TElement.Destroy;
E>begin
E> FElements.Free;
E>end;
E>function TElement.GetElement(Index: Integer): TElement;
E>begin
E> Result := TElement(FElements[Index]);
E>end;
E>procedure TElement.Add(Element: TElement);
E>begin
E> FElements.Add(Element);
E>end;
E>procedure TElement.Delete(Index);
E>begin
E> FElements.Extract(Index);
E>end;
E>
Спасибо. Работает. Кое-что новое узнал.
delete подправил:
procedure TElement.Delete(Index:integer);
begin
FElements.Extract(FElements[Index]);
end;