Главная страница
    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.44 MB
Время: 0.052 c
8-1099917444
Змей
2004-11-08 15:37
2005.02.20
конец файла


4-1104127474
iNBox
2004-12-27 09:04
2005.02.20
OEP


3-1106520704
Killus
2005-01-24 01:51
2005.02.20
Как создать ODBC DSN через код (в программе)?


8-1099906198
Konan
2004-11-08 12:29
2005.02.20
Создание программы для редактирования иконок


9-1073144322
DDS
2004-01-03 18:38
2005.02.20
Где хранить ресурсы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский