Главная страница
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.044 c
3-1106226601
sten
2005-01-20 16:10
2005.02.20
выделение цветом строки в DBGrid


4-1104906408
N0th!ng
2005-01-05 09:26
2005.02.20
Сообщения Windows.


1-1107517664
Vladimir29
2005-02-04 14:47
2005.02.20
клавиатура


1-1107352404
ВОТ
2005-02-02 16:53
2005.02.20
обработчик


14-1106855341
Ihor Osov'yak
2005-01-27 22:49
2005.02.20
Ищется антиквариат - QuickReport 1.0c