Показать сообщение отдельно
  #1  
Старый 09.01.2009, 19:53
Rat Rat вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 391
Репутация: 6078
По умолчанию TList и свой класс

Люди, помогите. Хочу создать следующую структуру:


Не могу сообразить, как это сделать.

Делал следующее:

Код:
type
  prec=^trec;
  trec=record
    Name:String;
    ListFunction : TStrings;
  end;

  tClass = class(TObject)
    private
      FCountList : Integer;
      list : TList;
    public
    procedure Add(rec:TRec);
    function Get(Index : Integer): prec;
    property Count:Integer read FCountList;
    constructor Create;
  end;

procedure tClass.Add(rec: trec);
var
  tmp : prec;
  i   : Integer;
begin
  new(tmp);

  tmp.Name := rec.Name;
  tmp.ListFunction := TStringList.Create;
  tmp.ListFunction.Assign(rec.ListFunction);

  list.Add(tmp);
  FCountList := list.Count;

end;

constructor tClass.Create;
begin
  list := TList.Create;
  FCountList := list.Count;
end;

function tClass.Get(Index: Integer): prec;
begin
  Result := list.Items[Index];
end;

Использовал следующим образом:

Код:
var
  Form1: TForm1;
  c : tClass;

procedure TForm1.Button1Click(Sender: TObject);
var
  tmp : trec;
begin
  tmp.Name := Edit1.Text;
  tmp.ListFunction := ListBox1.Items;
  c.Add(tmp);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  i: Integer;
  tmp : prec;
begin
  new(tmp);
  ListBox2.Clear;
  for i := 0 to c.Count - 1 do
  begin
    tmp := c.Get(i);
    ListBox2.Items.Add(tmp.Name);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  c := tClass.Create;
end;


procedure TForm1.ListBox2Click(Sender: TObject);
var
  tmp : prec;
begin
  Label4.Caption := IntToStr(ListBox2.ItemIndex);
  new(tmp);
  if ListBox2.ItemIndex >= 0 then
  begin
    tmp := c.Get(ListBox2.ItemIndex);
    ListBox3.Items.Assign(tmp.ListFunction);
  end;
end;

Таким образом у меня получается список с одним Sting и одним TStringList.

Как к каждой строке TStringList добавить свой TSringList? Что бы структура нарисованная на картинке была полной...
Ответить с цитированием