Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
ВнизТипизированный StringList Найти похожие ветки
← →
Zhekson (2005-01-06 09:52) [0]Есть ли способ вбить в подобие StringList_а типизированный набор данных? + потом обращаться к определённому набору по индексу.
← →
Fay © (2005-01-06 09:54) [1]Ага. Только его нужно родить от TList.
← →
begin...end © (2005-01-06 09:56) [2]> Zhekson (06.01.05 09:52)
У TStringList есть свойство Objects. В него можно запихивать pointer"ы.
← →
Fay © (2005-01-06 09:58) [3]String - типизированные данные? 8)
← →
begin...end © (2005-01-06 09:59) [4]> [3] Fay © (06.01.05 09:58)
Я просто почему-то подумал, что у него эти данные связаны с каждой строкой.
← →
Zhekson (2005-01-06 10:00) [5]Спасибо, буду пробовать...
далеко мою ветку не опускайте, а то вдруг возникнут вопросы ;)
← →
Fay © (2005-01-06 10:00) [6]2 begin...end © (06.01.05 9:59) [4]
А мне не очевино, что автору нужны сами строки 8)
← →
Zhekson (2005-01-06 10:03) [7]Молодцы... с утра поругаешься, потом весь день заведённый на жизненную активность... главное спор не проиграть... ;)
← →
Fay © (2005-01-06 10:12) [8]Zhekson (06.01.05 10:03) [7]
Ты веткой не ошибся?
← →
Zhekson (2005-01-06 10:22) [9][8] - я её породил, а Вы в ней спорите, кто правильнее ответил... Думаю что не ошибся.
кстати
type datafl = packed record
h, m, s : byte;
msec, mksec: word;
ardat : array[1..40] of byte;
end;
type fdata = file of datafl;
var fileinp, fileout: fdata;
dataflash, dataflash1: datafl;
var
List_zv: TList;
item_zv: Pointer;
........................
List_zv := TList.Create;
item_zv := New(dataflash); //Incompatible types
Я думал, что этот список все типы кушает... Или я ошибаюсь?
← →
begin...end © (2005-01-06 10:24) [10]> [9] Zhekson (06.01.05 10:22)
> item_zv := New(dataflash);
New - это процедура, а не функция.
← →
Zhekson (2005-01-06 10:32) [11]бррррр...
так можно, в таким образом созданный список, вставить переменную типа datafl, под определённым индексом???
← →
begin...end © (2005-01-06 10:34) [12]> [11] Zhekson (06.01.05 10:32)
Можно вставить в список УКАЗАТЕЛЬ на переменную типа datafl.
← →
Zhekson (2005-01-06 10:39) [13]торможу...
не могу понять как это дело реализовать...
по той литературке которая у меня под рукой, вроде бы всё правильно...
подсоби, если не трудно...
← →
begin...end © (2005-01-06 10:45) [14]> [13] Zhekson (06.01.05 10:39)
type
pDataFL = ^DataFL;
DataFL = record
...
end;
var
List: TList;
DataPointer: pDataFL;
begin
List := TList.Create;
try
New(DataPointer);
List.Insert(0, DataPointer);
finally
// Здесь финализируем указатели (Items),
// и только после этого уничтожаем список
List.Free
end
end.
← →
Fay © (2005-01-06 10:45) [15]var
...
p : Pointer;
...
begin
...
GetMem(p, SizeOf(datafl));
item_zv := p;
...
end;
← →
Fay © (2005-01-06 10:46) [16]Нафиг я лишнюю переменною-то завёл? 8)
← →
Zhekson (2005-01-06 10:55) [17]Спасибо огромное.
Это то, что нужно.
← →
Zhekson (2005-01-06 11:01) [18]
var
List: TList;
Item: Pointer;
Value: AnyType;
begin
List := TList.Create; // Создаем список
Item := New(Value); // Размещаем в куче данные
List.Add(Item); // Добавляем элемент к списку .....
List.Remove(Item); // Удаляем элемент из списка
Dispose(Item); // Удаляем его из кучи
List.Free; // Удаляем ненужный список
end;
Интересно... а что тогда делает вот этот код из книги???
← →
begin...end © (2005-01-06 11:05) [19]> [18] Zhekson (06.01.05 11:01)
Это из Фаронова? Я видел там это.
> Item := New(Value);
Это просто ошибка.
← →
Zhekson (2005-01-06 11:12) [20]begin...end © (06.01.05 11:05) [19]
даааааааа...
а я уж грешным делом решил менять мировозрение...
А что конкретно в этом коде неправильно? Он мне более понятен, и надо бы его исправить, чтоб через пару месяцев опять на него не нарваться.
← →
Fay © (2005-01-06 11:16) [21]New(var P: Pointer)
← →
begin...end © (2005-01-06 11:19) [22]> [20] Zhekson (06.01.05 11:12)
Ну... Я обычно использую New только для типизированных указателей, поэтому я бы исправил так:var
List: TList;
Item: ^AnyType;
Value: AnyType;
begin
List := TList.Create; // Создаем список
New(Item); // Размещаем в куче данные
List.Add(Item); // Добавляем элемент к списку .....
List.Remove(Item); // Удаляем элемент из списка
Dispose(Item); // Удаляем его из кучи
List.Free; // Удаляем ненужный список
end
← →
begin...end © (2005-01-06 11:22) [23]К [22]: Value: AnyType можно убрать.
← →
Zhekson (2005-01-06 11:28) [24]Во...
Вот теперь совсем всё стало понятно...
СПАСИБО
← →
msguns © (2005-01-06 12:17) [25]Такое тоже работает:
List.Insert(0, NEW(DataPointer));
← →
begin...end © (2005-01-06 12:20) [26]> msguns © (06.01.05 12:17) [25]
Ну если NEW - это Ваша собственная функция, возвращающая Pointer, - то почему бы этому и не работать?
← →
Fay © (2005-01-06 12:23) [27]begin...end © (06.01.05 12:20) [26]
New замечательно возвращает значение. Специально проверял. Во всяком случае P := New(PInteger) работает 8).
← →
begin...end © (2005-01-06 12:31) [28]> Fay © (06.01.05 12:23) [27]
> Во всяком случае P := New(PInteger) работает
Интересная ситуация. Но в [25] в New передаётся не имя типа, а переменная. [27] у меня работает, [25] - нет.
← →
msguns © (2005-01-06 12:45) [29]>begin...end © (06.01.05 12:31) [28]
>Интересная ситуация. Но в [25] в New передаётся не имя типа, а переменная. [27] у меня работает, [25] - нет.
NEW у меня, ессно, не "самопальная". Код в [25] приведен для твоего фрагмента [14] и он должен работать, т.к. DataPointer там типизированный указатель.
← →
begin...end © (2005-01-06 12:54) [30]> [29] msguns © (06.01.05 12:45)
New может использоваться как функция в том случае, если передавать в неё ИМЯ УКАЗАТЕЛЬНОГО ТИПА, но не ПЕРЕМЕННУЮ-УКАЗАТЕЛЬ.
Например:type
pDataFL = ^DataFL;
DataFL = record
...
end;
var
DataPointer1, DataPointer2: pDataFL;
begin
DataPointer1 := New(pDataFL); <-- так работает
New(DataPointer2); <-- так тоже работает
DataPointer2 := New(DataPointer1) <-- так НЕ работает
end.
> Код в [25] приведен для твоего фрагмента [14] и он должен
> работать
В таких случаях лучше просто взять и проверить.
← →
msguns © (2005-01-06 12:56) [31]Согласен, невнимательно посмотрел ;)
← →
msguns © (2005-01-06 13:02) [32]Тогда вопрос: а нафиг нужна вообще эта переменная ?
Я просто всегда использую собственно указатель, а не переменные, содержащие ссылки на них. Поэтому у меня всегда и работает ;)
Что же касается последующее присвоение полям ссылочной записи, то я просто использую преобразование этого типа к только что добавленному элементу списка (обычно первый (0) или последний (TList.Count-1))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.053 c