Вверх ↑
Разработчик
Ответов: 26170
Рейтинг: 2127
#1: 2007-11-03 21:54:49 ЛС | профиль | цитата
Хотел подробнее разобрать _Set


procedure ThiMT_MTArray._Set;
var ind:integer;
dt:PData;
begin
ind := ToIntIndex(Item);
if(ind >= 0)and(ind < _Count)then begin
dt := PData(FList.Items[ind]);
FreeData(dt);
dispose(dt);
new(dt);
CopyData(dt,@Val);
FList.Items[ind]:= dt;
end;
end;
Тут я уничтожаю предыдущий сохраненный МТ-поток, оформляю новыое место и копирую туда данные. dt очищать нельзя -- это хранилище, а Val -- это внешние данные, лучше не трогать.
------------ Дoбавленo:

Про _Get тоже интересно


function ThiMT_MTArray._Get;
var dt:PData;
ind:integer;
begin
ind := ToIntIndex(Item);
if(ind >= 0)and(ind < _Count)then begin
Result := true;
dt := PData(FList.Items[FList.Count-1]);
CopyData(@Val, dt);
end
else Result := false;
end;
dt -- хранилище, оно очишается по выходу, FreeData(dt) приведет к очистке содержимого. Val попадет дальше на FItem в RW-компоненте.
Galkov писал(а):
Не аргумент

Я понимаю, уточню -- тупое убирание Copy(@dt,@dt) приводит к краху.
карма: 22

0