Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Класс с TList [D6, Win95/98]


Elast ©   (2004-11-29 21:04:00) 

Ошибка при записи в TList

 TMyItem = class                        
   fId   : integer;
   fName : string;
   constructor Create( aId : integer; aName : string);
 end;

 TMyList = class
   private
     FMyList : TList;
     function  GetItem(Index: Integer): TMyItem;
     procedure SetItem (Index: Integer; Item: TMyItem);
   public
     property  Items[Index:integer] : TMyItem read GetItem write SetItem;
     constructor Create;
     destructor Destroy; override;
 end;

 PTMyItem = ^TMyItem;

....

constructor TMyItem.Create( aId : integer; aName : string);
begin
 inherited Create;
 fId   := aId;
 fName := aName;
end;

constructor TMyList.Create;
begin
 inherited Create;
end;

function TMyList.GetItem(Index: Integer): TMyItem;
begin
 Result := PTMyItem(FMyList.Items[index])^;
end;

procedure TMyList.SetItem(Index: Integer; Item: TMyItem);
begin
 PTMyItem(FMyList.Items[index])^ := Item;
end;

.......
 MyList := TMyList.Create;
 MyItem := TMyItem.Create(1, 'aaa');
 MyList.FMyList.Create;                !!!!!!!????

 MyList.Items[1] := MyItem;

Просьба проконсультировать.


Думкин   (2004-11-30 10:48:00) [1]

> [12] icWasya ©   (30.11.04 10:46)

А записи то зачем?


icWasya   (2004-11-30 10:46:00) [2]

и ещё -
желательно к TMyListдобавить метод ADDи свойство Countс возможностью чтения/записи


WondeRu   (2004-11-30 08:21:00) [3]

дополнение:

PTMyItem = ^TMyItem;
мура, эту строчку вообще убрать, а остальное исправить так:

....

function TMyList.GetItem(Index: Integer): TMyItem;
begin
Result := TMyItem(FMyList.Items[index]);
end;

procedure TMyList.SetItem(Index: Integer; Item: TMyItem);
begin
FMyList.Items[index]) := Item;
end;


и последуй совету Defunct ©   (30.11.04 7:44) [10]


Defunct   (2004-11-30 07:44:00) [4]

Elast   (29.11.04 21:04)
Зачем мутить нечно внутри которого TList, когда можно этоже нечто намутить наследуя TList?

TMyList = class(TList)
private
  ..
public
  ..
end;

перекройте требуемые методы и задача ваша решена.


GrayFace   (2004-11-30 05:21:00) [5]

Elast   (29.11.04 21:37) [4]
Add используй.


jack128   (2004-11-30 02:31:00) [6]

Zelius ©   (30.11.04 1:29) [7]
А, простите, какие цели у автора??


Zelius   (2004-11-30 01:29:00) [7]

ИМХО, TCollection и TCollectionItem больше подходят для таких целей...


begin...end   (2004-11-29 21:50:00) [8]

К [5]:

> пытаетесь один из таких несуществующих элементов прочитать

Пардон, не прочитать, а записать туда что-то.


begin...end   (2004-11-29 21:48:00) [9]

> [4] Elast   (29.11.04 21:37)

> Почему для записи в items[1]
> ошибка List index out of bounds

А почему бы и нет? FMyList теперь создан, но в нём нет никаких Item'ов. Потому, что их туда никто не добавил. А Вы пытаетесь один из таких несуществующих элементов прочитать.

Вы хотите создать свой класс списка? Тогда, может быть, вместо FMyList: TListлучше использовать что-то вроде FMyList: array of TMyItem?
Посмотрите на реализацию того же TList. Или Вы хотите что-то другое сделать, - тогда что?


Elast   (2004-11-29 21:37:00) [10]

Конструктор модернизировал. Спасибо. Почему для записи в items[1]
ошибка List index out of bounds


begin...end   (2004-11-29 21:26:00) [11]

> [2] Elast   (29.11.04 21:20)

> Нужно ли FMyList создавать для записи в Items?

Конечно, нужно. При записи в свойство Items вызывается метод SetItem, в котором используется FMyList. Как же его не создавать? Вопрос в другом - КАК создавать: FMyList := TList.Create. И делать это лучше в конструкторе класса TMyList. А уничтожать - в деструкторе.


Elast   (2004-11-29 21:20:00) [12]

Нужно ли FMyList создавать для записи в Items?


begin...end   (2004-11-29 21:08:00) [13]

> Elast   (29.11.04 21:04)

> MyList.FMyList.Create;                !!!!!!!????

Вы MyList и MyItem создавали НЕ ТАК. Почему же Вы FMyList создаёте ТАК?


Наверх

Титульная страница Поиск, карта сайта Написать письмо