TList - как сделать класс подобный TMenuItem?
От: Dudao  
Дата: 20.07.06 09:43
Оценка:
Как написать класс подобный, например TMenuItem, TtreeNode и etc?
Интересует свойство items в котором присутствует такое же вложенное свойство.
Re: TList - как сделать класс подобный TMenuItem?
От: Danchik Украина  
Дата: 20.07.06 09:52
Оценка:
Здравствуйте, Dudao, Вы писали:

D>Как написать класс подобный, например TMenuItem, TtreeNode и etc?

D>Интересует свойство items в котором присутствует такое же вложенное свойство.

По крайней мере взять и посмотреть исходники, и если понравится — скопировать

TMenuItem (Menus.pas)
TTreeNode (ComCtrls.pas)
Re: TList - как сделать класс подобный TMenuItem?
От: ekamaloff Великобритания  
Дата: 20.07.06 09:54
Оценка: 2 (1)
Здравствуйте, 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
Re[2]: TList - как сделать класс подобный TMenuItem?
От: Dudao  
Дата: 21.07.06 01:20
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Здравствуйте, Dudao, Вы писали:


D>>Как написать класс подобный, например TMenuItem, TtreeNode и etc?

D>>Интересует свойство items в котором присутствует такое же вложенное свойство.

D>По крайней мере взять и посмотреть исходники, и если понравится — скопировать


D>TMenuItem (Menus.pas)

D>TTreeNode (ComCtrls.pas)

Смотрел, смотрел. Даже через ModelMaker смотрел. Но, не разобрался. Видно практики здесь мало было.
Re[2]: TList - как сделать класс подобный TMenuItem?
От: Dudao  
Дата: 21.07.06 01:20
Оценка:
Здравствуйте, 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;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.