Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1379532154
Павел
2013-09-18 23:22
2014.08.03
TList


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


15-1389006579
Sergey Masloff
2014-01-06 15:09
2014.08.03
Фантазия слабеет. Придумать говорящее имя процедуре ;-)


15-1389558602
Юрий
2014-01-13 00:30
2014.08.03
С днем рождения ! 13 января 2014 понедельник


15-1389186800
Aleks2014
2014-01-08 17:13
2014.08.03
Как восстановить настройки Editor options-Color?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский