Форум: "Начинающим";
Текущий архив: 2014.08.03;
Скачать: [xml.tar.bz2];
Внизвопрос по ооп Найти похожие ветки
← →
Артём (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.002 c