Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Удаление и добавление элементов в динамический массив

Автор: http://sunsb.dax.ru

Крутая штука динамический массив. Очень быстрая и здоровая реализация. Единственное, чего на мой взгляд не хватает, это механизма удаления элемента из середины массива и соответственно вставки в середину. Насколько я понял ( и проверил ), в памяти массив хранится по-разному в зависимости от типа его элементов. Скажм если в массиве строки(!! не shortString ) - хранятся указатели на них, а если прямоугольники (TRect) - то непосредственно сами прямоугольники.

Ниже привожу подпрограммы удаления и добавления элемента.


procedure delElem( var A:TRectArray; Index:integer );
var Last : integer;
begin
   Last:= high( A );
   if Index <  Last then move( A[Index+1], A[ Index ],
       (Last-Index) * sizeof( A[Index] )  );
   setLength( A, Last );
end;

procedure addElem( var A: TRectArray; Index: integer;
                                       ANew: TRect );
var Len : integer;
begin
   Len:= Length( A );
   if Index > = Len then Index := Len+1;
   setLength( A, Len+1);
   move( A[Index], A[ Index+1 ],
         (Len-Index) * sizeof( A[Index] ));
   A[Index] := ANew;
end;

Подпрограмма delElem полностью универсальна, а в addElem Вам нужно поменять тип добовляемого елемента (ANew) на требуемый.

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay