#pas
type
TElementArray = array of array of Integer;
TPointerArray = array of array of Pointer; // Или array of array of PInteger
const
Nx = ...;
Ny = ...;
var
I, J: Integer;
Z: TElementArray;
ZL: TPointerArray;
begin
SetLength(Z, Nx, Ny);
... // Заполнение массива TElementArray
// Теперь устанавливаем длину массива указателей равной длине массива элементов...
SetLength(ZL, Nx, Ny);
// ...и присваиваем каждому элементу этого массива нужное значение --
// -- адрес соответствующего элемента в массиве Z
for I := 0 to Nx - 1 do
for J := 0 to Ny - 1 do
ZL[I, J] := @Z[I, J];
... // Массив ZL заполнен: теперь каждый его элемент представляет собой
... // указатель на соответствующий элемент массива Z
end.
------------ Дoбавленo в 01.03:
nesco, Похоже, что SetLength не работает с указателями.
#pas
unit HiAsmUnit;
interface
uses kol,Share,Debug;
type
THiAsmClass = class(TDebug)
private
public
out1:THI_Event;
procedure in1(var dt:TData;Index:Word);
end;
implementation
procedure THiAsmClass.in1;
type
arr1 = array of integer;
parr = ^arr1;
arr2 = array of arr1;
parr2 = ^arr2;
arr3 = array of arr2;
parr3 = ^arr3;
var
ar1: parr;
ar2: parr2;
ar3: parr3;
begin
// An array of 4 by 3 elements:
SetLength(ar1, 4);
// Use the array:
// ar1[0,0,0] := 5;
// ar1[0,1,0] := 7;
// ar1[2,0,0] := 200;
// ar1[3,2,0] := 1000;
// and so on...
//ar2 := ar1; // êîïèðóåì
//_hi_OnEvent(out1, ar1[3,2,0]);
end;
end.
Так тоже не работает:
#pas
unit HiAsmUnit;
interface
uses kol,Share,Debug,windows;
type
THiAsmClass = class(TDebug)
private
public
out1:THI_Event;
procedure in1(var dt:TData;Index:Word);
end;
implementation
procedure THiAsmClass.in1;
var PData: PInteger;
DimMass: array of integer;
begin
SetLength(DimMass, 196);
PData:= @DimMass;
SetLength(PData^, 4);
end;
end.
Теперь буду проверять работает-ли Copy с указателями.
------------ Дoбавленo в 02.11:
login писал(а):
работает-ли Copy с указателями.
Add(MainForm,16348082,98,98)
{
Width=308
}
Add(InlineCode,490725,217,98)
{
WorkPoints=#3:in1|
EventPoints=#4:out1|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug,windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|18: out1:THI_Event;|42: procedure in1(var dt:TData;Index:Word);|5: end;|0:|14:implementation|0:|26:procedure THiAsmClass.in1;|40:type arr = array of array of integer; |0:|4:var |11: ar1: arr;|11: ar2: arr;|14: i : integer;|18: parr: ^integer; |5:begin|32:// An array of 4 by 3 elements: |23: SetLength(ar1, 4, 3);|19: // Use the array:|16: ar1[0,0] := 5;|16: ar1[0,1] := 7;|18: ar1[2,0] := 200;|19: ar1[3,2] := 1000;|17: // and so on...|0:|45://_hi_OnEvent(out1, Length(ar1)); // длина|51://_hi_OnEvent(out1, Length(ar1[0])); // размерность|0:|110:SetLength(ar2, Length(ar1),Length(ar1[0])); // устанавливаем длину и размерность второго массива как у первого|0:|20:i := Length(ar1[0]);|11:parr := @i;|39:ar2 := Copy(ar1, 0, parr^); // копируем|0:|28:_hi_OnEvent(out1, ar2[0,0]);|0:|0:|4:end;|0:|4:end.|0:|0:|
link(out1,15938406:doAdd,[])
}
Add(Button,4071366,161,98)
{
Left=15
Top=30
Width=75
Height=185
Data=String(я строка из кнопки)
link(onClick,490725:in1,[])
}
Add(ListBox,15938406,273,98)
{
Left=105
Top=5
Width=190
Height=250
}

Вроде разобрался.