Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.08.03;
Скачать: CL | DM;

Вниз

вопрос по ооп   Найти похожие ветки 

 
Артём   (2013-09-18 03:20) [0]

Только начал разбираться в ооп, помогите сориентироваться:
задача:
1: создаются группы (у которых имеются свои имена), тут легко:

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

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

я от не знания создал ещё один класс и всё связал через двумерный массив: [указываем номер группы]][а тут уже добавляются товары].


 
Inovet ©   (2013-09-18 03:40) [1]

> т.е. мы можем в массиве создавать эти группы.
> например: Group: array [1..10] of TNewGroup;

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

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

Пусть класс и хранит их в своих структурах (в списке, например), добавляет/удаляет в своих методах, типа:
procedure AddTovar(Infa : TKakayatoInfa);


 
Артём   (2013-09-18 05:12) [2]

Inovet ©, так вроде бы всё получилось, большое спасибо за помощь!)


 
[ВладОшин] ©   (2013-09-18 15:31) [3]

TGroupsCollection = class(TTreeView)

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

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

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

И класс уже себя может нарисовать
+легко можно модифицировать, что бы были подгруппы и т.п.


 
Inovet ©   (2013-09-18 15:47) [4]

> [3] [ВладОшин] ©   (18.09.13 15:31)

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


 
Артём   (2013-09-18 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.



 
[ВладОшин] ©   (2013-09-19 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;



Страницы: 1 вся ветка

Текущий архив: 2014.08.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.005 c
3-1300090667
OW
2011-03-14 11:17
2014.08.03
Считаю, что странное нарушение целостности какое-то..


15-1387350030
Пит
2013-12-18 11:00
2014.08.03
Ветка Розыча о задачке?


3-1300095610
Бинар
2011-03-14 12:40
2014.08.03
Прерывание запроса


2-1379334790
_guest_
2013-09-16 16:33
2014.08.03
Сохранение StringList большого объема в файл


2-1379532154
Павел
2013-09-18 23:22
2014.08.03
TList