Очень простой пример...

Code:

const

MaxBooleans = (High(Cardinal) - $F) div sizeof(boolean);

 

type

TBoolArray = array[1..MaxBooleans] of boolean;

PBoolArray = ^TBoolArray;

 

var

B: PBoolArray;

N: integer;

 

begin

N := 63579;

{= получение памяти под динамический массив.. =}

GetMem(B, N * sizeof(boolean));

{= работа с массивом... =}

B^[3477] := FALSE;

{= возвращение памяти в кучу =}

{$IFDEF VER80}

FreeMem(B, N * sizeof(boolean));

{$ELSE}

FreeMem(B);

{$ENDIF}

end.

 

Вот несколько функций для операций с двухмерными массивами. Самый простой путь для создания собственной библиотеки. Процедуры SetV и GetV позволяют читать и сохранять элементы массива VArray (его Вы можете объявить как угодно). Например:

 

 

Code:

//к примеру опишем свой тип

type

 MyType = record

   zap1: longword;

   zap2: char;

   zap3: string[10];

end;

 //опишем НЕОГРАНИЧЕННЫЙ массив переменный типа MyType

//хотя, может использоваться абсолютно любой

var

m: arrayof MyType;

 ....

 procedure TForm1.Button1Click(Sender: TObject);

var i: byte;

begin

for i := 0to9do// нумерация элементов начинается с нуля!

    begin

     SetLength(m, Length(m) + 1); // увеличение длины массива на 1

     m[i].zap1 := i; //  присвоение

     m[i].zap2 := chr(i); //          полям

     m[i].zap3 := inttostr(i); //              значений

   end;

end;

 ....

 SetLength(m, 0); // освобождение памяти

end.

 C Уважением,

Сергей Дьяченко, sd arzamas.nnov.ru

Взято из Советов по Delphi от

 

 

Code:

procedure TForm1.Button1Click(Sender: TObject);

var

DataField: TStrings;

begin

DataField := TStringList.Create;

DataField.Add(Format('%s=%s', ['Jonas', '15.03.1980']));

ShowMessage(DataField.Values['Jonas'])

// will print the Birthday of Jonas

DataField.Free;

end;

http://delphiworld.narod.r

DelphiWorld 6.0

Code:

type

TArrayString = arrayofstring;

 

procedure DeleteArrayIndex(var X: TArrayString; Index: Integer);

begin

ifIndex > High(X) then Exit;

ifIndex < Low(X) then Exit;

ifIndex = High(X) then

begin

   SetLength(X, Length(X) - 1);

   Exit;

end;

Finalize(X[Index]);

System.Move(X[Index +1], X[Index],

(Length(X) - Index -1) * SizeOf(string) + 1);

SetLength(X, Length(X) - 1);

end;

 

// Example : Delete the second item from array a

// Beispiel : Losche das 2. Element vom array a

 

procedure TForm1.Button2Click(Sender: TObject);

var

a: TArrayString;

begin

DeleteArrayIndex(a, 2);

end;

 

Взято с сайтаhttp://www.swissdelphicenter.ch/en/tipsindex.php

 

"Array of const" это массив переменных, декларированных как константы. Непосредственно они представлены структурой TVarRec. Скобки просто ограничивают массив. Массив констант дает вам возможность передавать процедуре переменное количество параметров type-safe (безопасным) способом. Вот пример:

 

Code:

type

T2DBooleanArray = arrayofarrayof Boolean;

 

procedure Save2DBooleanArray(const A: T2DBooleanArray; S: TStream);

var

writer: TWriter;

i: Integer;

begin

 

Распределите память кучи с помощью GetMem. Если вы имеете:

 

Code:

var a, b: array[0..30000]: Integer;

 

то попробуйте:

 

Code:

type TBigArray = array[0..30000] of Integer;

var a, b: ^TBigArray;

 

 

и во внешнем блоке сделайте:

Code:

GetMem(a, SizeOf(TBigArray));

GetMem(b, SizeOf(TBigArray));

 

Я решил проблему записи массива TBitmap в файл и его повторного чтения.

 

Идея заключается в загрузке каждого TBitmap во временный TMemoryStream. Член TMemoryStream.Size информирует о размере данных, которые нужно сохранить на диске. Затем мы пишем размер и сопровождаем его данными типа TFileStream. Эту манипуляцию мы проделываем для каждого TBitmap в массиве.

 

Для процедуры чтения сначала мы должны считать из потока размер данных TBitmap. Затем мы распределяем область для типа TMemoryStream полученного размера и считываем данные. Затем переписываем из TFileStream в TMemoryStream. И, наконец, мы читает из TMemoryStream сам TBitmap. Эту манипуляцию мы проделываем для каждого TBitmap в массиве.

 

Ниже я привел код, который я реально использовал. Код из игры Bingo, которую я разрабатываю, имеет сетку 5x5, чьи ячейки содержат изображение.

 

 

Code:

type RecType = integer; {<-- здесь задается тип элементов массива}

 

const MaxRecItem = 65520div sizeof(RecType);

 

type = MyArrayType = array[0..MaxRecItem] of RecType;

type = MyArrayTypePtr = ^MyArrayType;

 

var MyArray: MyArrayTypePtr;

begin

ItemCnt := 10; {количество элементов массива, которые необходимо распределить}

GetMem(MyArray, ItemCnt * sizeof(MyArray[1])); {распределение массива}

MyArray^[3] := 10; {доступ к массиву}

FreeMem(MyArray, ItemCnt * sizeof(MyArray[1])); {освобождаем массив после работы с ним}

end;

 

Michael Day

 

Взято из Советов по Delphi от Валентина Озерова

Сборник Kuliba

 

Скажем, ваша структура данных выглядит следующим образом: 

Code:

type

TMyRec = record

SomeField: Integer;

SomeOtherField: Double;

TheRest: array[0..99] of Single;

end;