![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
вопрос по ооп
Артём © (2013-09-18 03:20:00)Только начал разбираться в ооп, помогите сориентироваться:
задача:
1: создаются группы (у которых имеются свои имена), тут легко:
TNewGroup = class
Name: string;
constructor CreateGroup(NewName:string);
end;
т.е. мы можем в массиве создавать эти группы.
например: Group: array [1..10] of TNewGroup;
2: У каждой группы должны создаваться объекты например товар (содержащие какую то инфу), что тут можно сделать?
я от не знания создал ещё один класс и всё связал через двумерный массив: [указываем номер группы]][а тут уже добавляются товары].
[ВладОшин] (2013-09-19 11:37:00) [1]
> А как же насчёт "отделять данные от их отображения"?
наверное, да
так правильно будет
> Артём (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;
Артём (2013-09-18 20:13:00) [2]я что то тоже не понял)
пока создал только шаблон
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.
Inovet (2013-09-18 15:47:00) [3]> [3] [ВладОшин] © (18.09.13 15:31)
А как же насчёт "отделять данные от их отображения"?
[ВладОшин] (2013-09-18 15:31:00) [4]TGroupsCollection = class(TTreeView)
procedure AddGroup(Group : TNewGroup );
где имя группы выступает именем нода, парентом к root-ноду
procedure AddTovar(Infa : TKakayatoInfa; Group: TNewGroup);
где имя товара выступает парентом к имени нода-группы
соответственно Node.Data автоматом присваивается в зависимости от уровня
И класс уже себя может нарисовать
+легко можно модифицировать, что бы были подгруппы и т.п.
Артём (2013-09-18 05:12:00) [5]Inovet ©, так вроде бы всё получилось, большое спасибо за помощь!)
Inovet (2013-09-18 03:40:00) [6]> т.е. мы можем в массиве создаватьэти группы.
> например: Group: array [1..10] of TNewGroup;
Создать каждый элемент, потом уничтожить.
> 2: У каждой группы должны создаваться объекты например товар
> (содержащие какую то инфу), что тут можно сделать?
Пусть класс и хранит их в своих структурах (в списке, например), добавляет/удаляет в своих методах, типа:
procedure AddTovar(Infa : TKakayatoInfa);