Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.025 c
3-1106549902
mmms
2005-01-24 09:58
2005.02.20
Господа, подскажите, почему мышь не меняет курсор, код:


4-1103998049
Flext@r
2004-12-25 21:07
2005.02.20
Получение списка выполняемых задач винды


4-1104863404
dms_main
2005-01-04 21:30
2005.02.20
Select text


14-1107074354
Sniper-Max
2005-01-30 11:39
2005.02.20
Win9x, Win2K и сеть... тормозят в месте по сетке :(


3-1106645184
DimonNew
2005-01-25 12:26
2005.02.20
Проверить - существует ли параметр в ADOCommand




   Наверх