Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: CL | DM;

Вниз

Move для record. Можно ли?   Найти похожие ветки 

 
olookin ©   (2005-01-29 19:52) [0]

Можно ли выполнять:

type TCollectionGroup = record
      Item: array of TCollectionItem;
      Name: string;
    end;

var Group: array of TCollectionGroup;

procedure DeleteGroup(GroupIndex: integer);
begin
 Move(Group[GroupIndex+1],Group[GroupIndex],4*(Length(Group)-GroupIndex-1));
 Group[Length(Group)-1]:=nil;
 SetLength(Group,Length(Group)-1);
end;

?


 
icWasya ©   (2005-02-01 19:39) [1]

посмотри в исходниках VCL (кажись Classes.pas), как сделано что-то подобное в TStringList"е


 
GuAV ©   (2005-02-01 22:09) [2]

Счётчики ссылок в Item и Name не будут увеличены при копировании через Move, однако будут уменьшены при SetLength.

Чтобы это работало, следует заменить  Group[Length(Group)-1]:=nil; (разве это компилится ? ) на FillChar( Group[Length(Group)-1], SizeOf(TCollectionGroup), 0); это обнулит указатели без уменьшения счётчиков ссылок и счётчики уже не будут уменьшены при SetLength.

почему 4 а не SizeOf(TCollectionGroup) ? Тем более это будет не 4, а 8 ?


 
GuAV ©   (2005-02-01 22:18) [3]

Да, ещё, следует освободить удаляемый элемент. Для этого его можно поставить удаляемым в SetLength.

procedure DeleteGroup(GroupIndex: integer);
var tmp: TCollectionGroup
begin
tmp := Group[GroupIndex];
Move(Group[GroupIndex+1], Group[GroupIndex],    SizeOf(TCollectionGroup)*(Length(Group)-GroupIndex-1));
Move(tmp, Group[GroupIndex], Group[Length(Group)-1], SizeOf(TCollectionGroup));  
SetLength(Group, Length(Group)-1);
end;

GuAV ©   (01.02.05 22:09) [2]
Тем более это будет не 4, а 8 ?

И не 8, а зависит от установок.
Тем более это будет не 4, а 8 ?



Страницы: 1 вся ветка

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.077 c
4-1104331406
НовичокНовый
2004-12-29 17:43
2005.02.20
Запустить внешнее приложение


14-1106632599
syte_ser78
2005-01-25 08:56
2005.02.20
Что за ... спай?


14-1107090730
Ihor Osov'yak
2005-01-30 16:12
2005.02.20
И снова антиквариат - HyperStr.dcu


3-1106244885
soxati
2005-01-20 21:14
2005.02.20
компоненты ADO


8-1098811987
Artemka
2004-10-26 21:33
2005.02.20
Проблема с выводом изображения на канву формы...