Вверх ↑
Ответов: 1429
Рейтинг: 50
#1: 2011-10-10 02:11:40 ЛС | профиль | цитата
еще не попробовал код nesco, но еше нашел вот такой, интересный, код.


#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.
------------ Дoбавленo в 01.47:
Так тоже не работает:

#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.
Приядется 20 копий функций создавать.
Теперь буду проверять работает-ли 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
}

Но для Copy они не нужны, она и так с переменными работает
Вроде разобрался.
карма: 0

0