Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2014.08.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
Павел   (2013-09-18 23:22) [0]

Допустим у меня есть класс TMyObject, и при создания новых объектов я их заношу в TList, вопрос как мне получить доступ к созданным объектам?)
пробовал типа
List[0].
List.Index[0].
ничего нет)
Просто мне нужно где то хранить объекты, кроме массива (в Тлист просто в плане, удалил строку, все сместилось вверх ну и прочая фигня удобна)
Может что то лучше есть ?


 
Германн ©   (2013-09-19 00:17) [1]

Во-первых TList.Items[]
Во-вторых кроме TList есть TObjectList. Иногда второй предпочтительней первого.


 
DVM ©   (2013-09-19 00:17) [2]


> пробовал типа
> List[0].

TMyObject(List[0]).


 
DVM ©   (2013-09-19 00:19) [3]


> Во-первых TList.Items[]

Items там дефолтное свойство, его можно не указывать


 
Павел   (2013-09-19 00:55) [4]

Спасибо!


 
Павел   (2013-09-19 01:26) [5]

Что то не получается:


TNewGroup = class
    Name: string;
    Slot:TList;

    procedure AddSlot(NewSlot:TSlot);

    constructor CreateGroup(NewName:string);
  end;

 ListGroup: TObjectList;

Добавляю новые объекты
ListGroup.Add(TNewGroup.CreateGroup(Name));
и теперь пытаюсь обратиться к одному из них из списка ObjectList
 TNewGroup(ListGroup[0]).
в ответ тишина...


 
Германн ©   (2013-09-19 01:59) [6]

Код показывай.


 
Павел   (2013-09-19 02:14) [7]


unit AddNewGroup;

interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls, Contnrs;

type
   TSlot = class
     X,Y,Width,Height: integer;
     constructor CreateSlot(NewX, NewY, NewWidth, NewHeight: integer);
   end;

  TNewGroup = class
    Name: string;
    Slot:TList;

    procedure AddSlot(NewSlot:TSlot);

    constructor CreateGroup(NewName:string);
  end;

 var
  GroupCount:integer=0;

  ListGroup: TObjectList;

implementation
    uses unit1;

{ TSlot }

constructor TSlot.CreateSlot(NewX, NewY, NewWidth, NewHeight: integer);
begin
X:=NewX;
Y:=NewY;
Width:=NewWidth;
Height:=NewHeight;
end;

{ TNewGroup }

procedure TNewGroup.AddSlot(NewSlot:TSlot);
begin
Slot.Add(NewSlot);
end;

constructor TNewGroup.CreateGroup(NewName: string);
begin
Name:=NewName;
Slot:=Tlist.Create;
end;

end.

и в главной юните

...
implementation
 uses AddNewGroup;
...
TNewGroup(ListGroup[0]).


 
Германн ©   (2013-09-19 02:31) [8]

А где добавление чего-нибудь в ListGroup?


 
Германн ©   (2013-09-19 02:38) [9]


> и теперь пытаюсь обратиться к одному из них из списка ObjectList
>  TNewGroup(ListGroup[0]).
> в ответ тишина...

И что значит тишина?


 
Павел   (2013-09-19 02:43) [10]

а сорри забыл
добавление

var Name:string;
begin
Name:=InputBox("Введите название группы", "Название:","");
AddNewGroup.ListGroup.Add(TNewGroup.CreateGroup(Name));
end;


Тишина - значит не выпадает список, где я могу выбрать у TNewGroup процедуру AddSlot();
раньше был массив и было всё легко и просто Group[1].
но массив неудобен, да и надо развиваться и пробовать более лучшие решения для кода


 
Германн ©   (2013-09-19 02:45) [11]


> И что значит тишина?

Если "тишина" значит что после того как поставил точку после ввода TNewGroup(ListGroup[0]) не выпал список со свойствами класса TNewGroup, то не обращай внимания. Это нормальное поведение IDE.


 
Германн ©   (2013-09-19 02:47) [12]

Как только введешь первые одну-две буквы свойства, список появится.


 
Германн ©   (2013-09-19 03:08) [13]

Это на самом деле фича IDE. Если использовать вместо прямого приведения типа, приведение с проверкой, то список выпадает сразу после введения точки:
(ListGroup[0] as TNewGroup).


 
Павел   (2013-09-19 03:21) [14]

да уж, как то очень всё не удобно, ладно если как ты знаешь)
с (ListGroup[0] as TNewGroup) всё работает
большое спасибо за помощь! так бы вернулся обратно к массиву

ещё одна проблема осталась (я уже тупо сообразить не могу). Код тот же самый, только где идёт описание класса TNewGroup я заменил переменную Slot с TList на TObjectList;

  TNewGroup = class
    Name: string;
    Slot:TObjectList;

    procedure AddSlot(NewSlot:TSlot);

    constructor CreateGroup(NewName:string);
  end;

И теперь не знаю как получить доступ допустим к переменной Х из объекта в списке  Slot
На всякий случай код добавления слота

TNewGroup(ListGroup[0]).AddSlot(AddNewGroup.TSlot.CreateSlot(strtoint(eX.Text),s trtoint(eY.Text),strtoint(eWidth.Text),strtoint(eHeight.Text)

ну и я пытаюсь как то так

TNewGroup(ListGroup[Parametr]).Slot.Items[1].X

но выдаёт оишбку, неизвестный идентификатор.


 
[ВладОшин] ©   (2013-09-19 08:46) [15]

LRule: TList;

 PRule = ^TRule;
 TRule = record
   RType: string;
..
 end;

function TErrManager.CreateRule(sTyp, sErr: string): PRule;
var
 NewRule: PRule;
begin
 New(NewRule);
 NewRule.RType := sTyp;
 NewRule.RText := sErr;
 LRule.Add(NewRule);
 Result := NewRule;
end;

function TErrManager.FindRule(sTyp, sErr: string): PRule;
var
 i: Integer;
 LocR: PRule;
begin
 Result := nil;
 for i := 0 to LRule.Count - 1 do
 begin
   LocR := LRule.Items[i];
   if (LocR.RType = sTyp) and  (LocR.RText = sErr) then
   begin
     Result := LocR;
     Exit;
   end;
 end;
end;


 
Плохиш ©   (2013-09-19 10:43) [16]


> TNewGroup(ListGroup[Parametr]).Slot.Items[1].X
>
> но выдаёт оишбку, неизвестный идентификатор.

A Slot.Items[1] к требуемому типу пушкин приводить должен?
Ещё одну фонотеку методом копи-паста не прилагая мозга ваяют...


 
Павел   (2013-09-19 21:04) [17]

Вот попробовал добавить объект "Группа" имеющий имя.

unit Unit3;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm3 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

//Тип описывающий элемент списка
 PDataGroup = ^TDataGroup;
  TDataGroup = record
      Name: String;
  end;

  TNewGroup = class
   DG:PDataGroup;
   constructor Create(NewName: string);
  end;

var
 Form3: TForm3;

 ListGroup:Tlist;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
var NewGroup:TNewGroup;
        PDG:PDataGroup;
begin
NewGroup:=TNewGroup.Create("Group1");
ListGroup:=Tlist.Create;
New(PDG);
{тут что то должно быть}

ListGroup.Add(NewGroup);
end;

{ TNewGroup }

constructor TNewGroup.Create(NewName: string);
begin
DG.Name:=NewName;
end;

end.



 
Германн ©   (2013-09-19 22:01) [18]

Зачем тебе и TNewGroup и TDataGroup. Оставь что-нибудь одно.


 
Павел   (2013-09-20 01:14) [19]

Мне нужно всё привести к требуемому типу, чтобы когда я пишу
ListGroup[0].
выпадал список свойств объекта


 
Павел   (2013-09-20 16:44) [20]

Всё! Абсолютно во всём разобрался, узнал что такое указатель
PDataGroup = ^TDataGroup;
и т.д.
больше вопросов нет



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

Форум: "Начинающим";
Текущий архив: 2014.08.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.002 c
2-1379683140
P.Golf
2013-09-20 17:19
2014.08.03
Переход с D7 на D2010


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


2-1379178090
Вова
2013-09-14 21:01
2014.08.03
Оптимизация кода 2. и еще не могу найти ошибку )


15-1388932280
Разведка
2014-01-05 18:31
2014.08.03
Преобразование даты


1-1327406913
@!!ex
2012-01-24 16:08
2014.08.03
DWM не всегда нормально отключается прозрачность у окна





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский