Форум: "Начинающим";
Текущий архив: 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.003 c