![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание собственного потомка TStringsList [D5, Win95/98]
V.exeR © (2002-08-14 21:39:00)Подскажите, как организовать объект типа TStringsList, но со своими данными (вместо String хранить какой-нить record).
Юрий Зотов (2002-08-15 02:50:00) [1]> Objects может содержать только объекты, а вот тип-запись к ним вроде не относится.
Objects может содержать любые данные длиной не более 4-байт.
Пример: Objects[i] := TObject(-100);
И там будет храниться число -100. Только извлекать его надо, приводя к целому типу:
N := Integer(Objects[i]);
Ясное дело, Objects, как и TList, может содержать и любые указатели. В том числе, указатели на любой record. Только неоптимально это - зачем использовать список строк, если сами строки не нужны? Лишние ресурсы гробить только. Лучше TList.
einsam (2002-08-15 02:26:00) [2]
> Anatoly Podgoretsky © (14.08.02 22:00)
> Это он и сейчас может, свойство Objects
Если я не ошибаюсь, то Objects может содержать только объекты, а вот тип-запись к ним вроде не относится.
А чтобы держать в TList данные своего типа, следует использовать указатели. Будет нечто вроде:
type
TMyRec = record
i: integer;
end;
var
PMyRec: ^TMyRec;
List: TList;
...
begin
...
List := TList.Create;
// вот так добавляем новую запись
New(PMyRec);
List.Add(PMyRec);
...
// вот так получаем данные
P := List[0];
ShowMessage(IntToStr(P^.i));
...
// и в конце не забыть всё это удалить
for j := List.Count - 1 downto 0 do
begin
P := List[j];
Dispose(P);
List.Delete(j);
end;
List.Free;
end;
V.exeR (2002-08-15 02:02:00) [3]а все же - как?...
Юрий Зотов (2002-08-14 22:37:00) [4]А если сами строки не нужны, то еще лучше использовать TList или dynamic array - экономичнее по памяти.
Anatoly Podgoretsky (2002-08-14 22:00:00) [5]Это он и сейчас может, свойство Objects