• Артём (18.09.13 03:20) [0]
    Только начал разбираться в ооп, помогите сориентироваться:
    задача:
    1: создаются группы (у которых имеются свои имена), тут легко:

      TNewGroup = class
        Name: string;
        constructor CreateGroup(NewName:string);
      end;


    т.е. мы можем в массиве создавать эти группы.
    например: Group: array [1..10] of TNewGroup;
    2: У каждой группы должны создаваться объекты например товар (содержащие какую то инфу), что тут можно сделать?

    я от не знания создал ещё один класс и всё связал через двумерный массив: [указываем номер группы]][а тут уже добавляются товары].
  • Inovet © (18.09.13 03:40) [1]
    > т.е. мы можем в массиве создавать эти группы.
    > например: Group: array [1..10] of TNewGroup;

    Создать каждый элемент, потом уничтожить.

    > 2: У каждой группы должны создаваться объекты например товар
    > (содержащие какую то инфу), что тут можно сделать?

    Пусть класс и хранит их в своих структурах (в списке, например), добавляет/удаляет в своих методах, типа:
    procedure AddTovar(Infa : TKakayatoInfa);
  • Артём (18.09.13 05:12) [2]
    Inovet ©, так вроде бы всё получилось, большое спасибо за помощь!)
  • [ВладОшин] © (18.09.13 15:31) [3]
    TGroupsCollection = class(TTreeView)

    procedure AddGroup(Group : TNewGroup );
    где имя группы выступает именем нода, парентом к root-ноду

    procedure AddTovar(Infa : TKakayatoInfa; Group: TNewGroup);
    где имя товара выступает парентом к имени нода-группы

    соответственно Node.Data автоматом присваивается в зависимости от уровня

    И класс уже себя может нарисовать
    +легко можно модифицировать, что бы были подгруппы и т.п.
  • Inovet © (18.09.13 15:47) [4]
    > [3] [ВладОшин] ©   (18.09.13 15:31)

    А как же насчёт "отделять данные от их отображения"?
  • Артём (18.09.13 20:13) [5]
    я что то тоже не понял)
    пока создал только шаблон

    unit Unit2;

    interface

    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, ComCtrls;

    type
     TForm2 = class(TForm)
       TreeView1: TTreeView;
       procedure FormCreate(Sender: TObject);
     private
       { Private declarations }
     public
       { Public declarations }
     end;

       TKakayatoInfa = class
         Price, Size :integer;

         constructor CreateKakayatoInfa(NewPrice, NewSize :integer);
       end;

       TNewGroup = class
         Name: string;
         procedure AddTovar(Infa : TKakayatoInfa; Group: TNewGroup);

         constructor CreateGroup(NewName:string);
     end;

        TGroupsCollection = class(TTreeView)
           TreeView:TTreeView;
           procedure AddGroup(Group : TNewGroup );

           constructor CreateGroupsCollection(NewTreeView:TTreeView);
          end;

    var
     Form2: TForm2;

    implementation

    {$R *.dfm}

    procedure TForm2.FormCreate(Sender: TObject);
    begin

    end;

    { TNewGroup }

    procedure TNewGroup.AddTovar(Infa: TKakayatoInfa; Group: TNewGroup);
    begin

    end;

    constructor TNewGroup.CreateGroup(NewName: string);
    begin
    Name:=NewName;
    end;

    { TGroupsCollection }

    procedure TGroupsCollection.AddGroup(Group: TNewGroup);
    begin

    end;

    constructor TGroupsCollection.CreateGroupsCollection(NewTreeView: TTreeView);
    begin
    TreeView:=NewTreeView;
    end;

    { TKakayatoInfa }

    constructor TKakayatoInfa.CreateKakayatoInfa(NewPrice, NewSize: integer);
    begin
    Price:=NewPrice;
    Size:=NewSize;
    end;

    end.


  • [ВладОшин] © (19.09.13 11:37) [6]

    > А как же насчёт "отделять данные от их отображения"?

    наверное, да
    так правильно будет


    > Артём   (18.09.13 20:13) [5]

    имел ввиду примерно такое, но см.Inovet ©   (18.09.13 15:47) [4]

    type
      PDataTovar = ^TDataTovar;
      TDataTovar = record
        NameT: string;
      end;
      TTovar = class (TTreeNode)
      public
        DT: TDataTovar;
      end;

      PDataGroup = ^TDataGroup;
      TDataGroup = record
        NameG: string;
      end;
      TGroup = class (TTreeNode)
      public
        DG: PDataGroup;
        procedure AddTovar(aTovarName: string);
        constructor Create(aName:string);
      end;

       TGroupsCollection = class(TTreeView)
       public
         procedure AddGroup(sGroup: string);
         function CurrentGroup: TGroup;
       end;

     TForm1 = class(TForm)
       TreeView1: TTreeView;
       Edit1: TEdit;
       Edit2: TEdit;
       Button1: TButton;
       Button2: TButton;
       procedure Button1Click(Sender: TObject);
       procedure FormCreate(Sender: TObject);
       procedure Button2Click(Sender: TObject);
       procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
     private      { Private declarations }
     public       { Public declarations }
       GC: TGroupsCollection;
     end;

    var
     Form1: TForm1;

    implementation
    {$R *.dfm}

    procedure TForm1.FormCreate(Sender: TObject);
    begin
     Edit1.Text := 'GroupName';
     Edit2.Text := 'TovarName';
     GC := TGroupsCollection(TreeView1);
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
     GC.AddGroup(Edit1.Text + IntToStr(Random(999)));
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
     if GC.CurrentGroup = nil then
       Exit;
     GC.CurrentGroup.AddTovar(Edit2.Text + IntToStr(Random(999)));
    end;

    procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
    begin
     case Node.Level of
      0: ShowMessageFmt('Group= %s', [ TDataGroup(Node.Data^).NameG]);
      1: ShowMessageFmt('Product=%s  ', [TDataTovar(Node.Data^).NameT]);
     end;
    end;

    { TGroupsCollection }

    procedure TGroupsCollection.AddGroup(sGroup: string);
    var
     DG: PDataGroup;
    begin
     New(DG);
     DG.NameG := sGroup;
     Items.AddChildObject(nil, DG.NameG, DG);
    end;

    function TGroupsCollection.CurrentGroup: TGroup;
    begin
     Result := TGroup(Selected);
    end;

    { TGroup }

    procedure TGroup.AddTovar(aTovarName: string);
    var
     DT: PDataTovar;
    begin
     New(DT);
     DT.NameT := aTovarName;
     Owner.AddChildObject(Self, DT.NameT, DT);
    end;
Есть новые Нет новых   [119176   +90][b:0][p:0.002]