Zitat:
Übrigens: Swap ist in Delphi eine intrinsische Funktion. Deswegen würde ich hier einen anderen Namen (z.B. SwapTgObj) empfehlen.
Ok das kann ich ändern. Danke.
Hier hab ich jetzt keinen Fehler mehr..
Ich dachte hätte das beschrieben
A1 ist ein Array of TArray<MyRecord>
g_Obj: TArray<TgObj>;
Delphi-Quellcode:
TgObj =
record
ID: Integer;
Handle: HWND;
ObjType: Integer;
UseSize: Integer;
ARGB: COLORREF;
Use3d: Short;
Style: DWORD;
X1: Integer;
X2: Integer;
Y1: Integer;
Y2: Integer;
Clone: Integer;
Region: HRGN;
metadata:
array [0..2047]
of Byte;
Metacount: Integer;
Scale: Single;
Framecount: Byte;
Frametouse: Byte;
.... - >
Beispiel:
Delphi-Quellcode:
function TSkinSpriteContainer.GetObjectOrder(hParent: HWND): Integer;
var
gP, UB: Integer;
K, Count: Integer;
A1, A2: TArray<TgObj>;
buffer: array [0 .. 2048] of char;
begin
Count := 0;
gP := gPropertyItem(hParent);
if (gP > -1) then
begin
if (g_Prop[gP].Ordersize <> 0) then
begin
Result := gP;
exit;
end;
end;
UB := High(g_Obj);
if (UB > 0) then
begin
// vector<short> A1(UB), A2(UB);
SetLength(A1, UB);
SetLength(A2, UB);
for K := 0 to UB do
begin
if (g_Obj[K].Handle = hParent) then
begin
SetLength(A1, Count + 1);
SetLength(A2, Count + 1);
A1[Count].Order := g_Obj[K].Order;
inc(Count);
end;
end;
SortShortTagArray(A1, A2, Count);
for K := 0 to Count do
MoveMemory(@(buffer[K * sizeof(Short)]), @A2[K], sizeof(Short));
FillChar(A1, sizeof(A1), 0);
FillChar(A2, sizeof(A2), 0);
if (gP < 0) then
begin
gP := High(g_Prop) + 1;
SetLength(g_Prop, gP + 1);
end;
g_Prop[gP].Handle := hParent;
MoveMemory(@g_Prop[gP].Order, @buffer[0], sizeof(buffer));
g_Prop[gP].Ordersize := Count;
end;
Result := gP;
end;
gruss