-
Только начал разбираться в ооп, помогите сориентироваться: задача: 1: создаются группы (у которых имеются свои имена), тут легко:
TNewGroup = class
Name: string;
constructor CreateGroup(NewName:string);
end;
т.е. мы можем в массиве создавать эти группы. например: Group: array [1..10] of TNewGroup; 2: У каждой группы должны создаваться объекты например товар (содержащие какую то инфу), что тут можно сделать? я от не знания создал ещё один класс и всё связал через двумерный массив: [указываем номер группы]][а тут уже добавляются товары].
-
> т.е. мы можем в массиве создавать эти группы. > например: Group: array [1..10] of TNewGroup;
Создать каждый элемент, потом уничтожить.
> 2: У каждой группы должны создаваться объекты например товар > (содержащие какую то инфу), что тут можно сделать?
Пусть класс и хранит их в своих структурах (в списке, например), добавляет/удаляет в своих методах, типа: procedure AddTovar(Infa : TKakayatoInfa);
-
Inovet ©, так вроде бы всё получилось, большое спасибо за помощь!)
-
TGroupsCollection = class(TTreeView)
procedure AddGroup(Group : TNewGroup ); где имя группы выступает именем нода, парентом к root-ноду
procedure AddTovar(Infa : TKakayatoInfa; Group: TNewGroup); где имя товара выступает парентом к имени нода-группы
соответственно Node.Data автоматом присваивается в зависимости от уровня
И класс уже себя может нарисовать +легко можно модифицировать, что бы были подгруппы и т.п.
-
> [3] [ВладОшин] © (18.09.13 15:31)
А как же насчёт "отделять данные от их отображения"?
-
я что то тоже не понял) пока создал только шаблон
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
public
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
procedure TForm2.FormCreate(Sender: TObject);
begin
end;
procedure TNewGroup.AddTovar(Infa: TKakayatoInfa; Group: TNewGroup);
begin
end;
constructor TNewGroup.CreateGroup(NewName: string);
begin
Name:=NewName;
end;
procedure TGroupsCollection.AddGroup(Group: TNewGroup);
begin
end;
constructor TGroupsCollection.CreateGroupsCollection(NewTreeView: TTreeView);
begin
TreeView:=NewTreeView;
end;
constructor TKakayatoInfa.CreateKakayatoInfa(NewPrice, NewSize: integer);
begin
Price:=NewPrice;
Size:=NewSize;
end;
end.
-
> А как же насчёт "отделять данные от их отображения"?
наверное, да так правильно будет
> Артём (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;
|