procedure DeallocateArray;beginP := AllocMem(ArraySizeIWant * SizeOf(LongInt));end; |
unit Unit1; interface usesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,Controls, Forms, Dialogs, StdCtrls; typeElementType = Integer; constMaxArraySize = (65520 div SizeOf(ElementType));{ в 16-битной среде } type{ Создаем тип массива. Убедитесь в том, что вы установилимаксимальный диапазон, который вам, вероятно, может понадобиться. } TDynamicArray = array[1..MaxArraySize] of ElementType;TForm1 = class(TForm)Button1: TButton;procedure FormCreate(Sender: TObject);procedure Button1Click(Sender: TObject);procedure FormDestroy(Sender: TObject);private{ Private declarations }public{ Public declarations }end; varForm1: TForm1;{ Создаем переменную типа указатель на ваш тип массива. }P: ^TDynamicArray; const{ Это типизированные константы. В действительности ониявляются статическими переменными, инициализирующимисяво время выполнения указанными в исходном коде значениями.Это означает, что вы можете использовать типизированныеконстанты точно также, как и любые другие переменные.Удобство заключается в автоматически инициализируемой величине. }DynamicArraySizeNeeded: Integer = 10; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject);begin{ Распределяем память для нашего массива. Будь внимательныи распределяйте размер, в точности необходимый для размещения нового массива.Если вы попытаетесь записать элемент, выходящий за допустимый диапазон,компилятор не ругнется, но объект исключения вам обеспечен. }DynamicArraySizeNeeded := 500;P := AllocMem(DynamicArraySizeNeeded * SizeOf(Integer));{ Как присвоить значение пятому элементу массива. }P^[5] := 68;end; procedure TForm1.Button1Click(Sender: TObject);begin{ Вывод данных. }Button1.Caption := IntToStr(P^[5]);end; procedure TForm1.FormDestroy(Sender: TObject);begin{ Освобождаем распределенную для массива память. }FreeMem(P, DynamicArraySizeNeeded * SizeOf(Integer));end; end. |