![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Класс с 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 создаёте ТАК?