(Gast)
n/a Beiträge
|
AW: 2 Arrays vergleichen\sortieren
24. Nov 2017, 00:36
Ok das Problem hat sich erledigt.. SortShortTagArray aber noch nicht.
Wer vergleichen will.
Delphi-Quellcode:
function TSkinSpriteContainer.GetObjectOrder(hParent: HWND): Integer;
var
gP, UB: Integer;
K, Count: Integer;
A1, A2: TArray<short>;
// nur noch 512 Einträge zur Verfügung muss sehen ob ich das Array nicht wieder erhöhe.
// 512 Objekte auf einer Form sind schnell erreicht.
buffer: array [0 .. 1023] of Short;
begin
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 // müsste eigentlich "-1" sein weil das Array in Delphi bei 0 anfängt. (Muss vorher noch prüfen welche Auswirkungen das hat)
begin
Count := 0; // hier eigentlich das gleiche -1
SetLength(A1, UB + 1);
SetLength(A2, UB + 1);
for K := 0 to UB do // ist der höchste Array Index deshalb kein "UB - 1"
begin
if (g_Obj[K].Handle = hParent) then
begin
A1[Count] := (g_Obj[K].order);
A2[Count] := (K);
inc(Count);
end;
end;
//ARRAY SORT A1() FOR Count, TAGARRAY A2();
//SortShortTagArray (A1, A2, nCount); noch nicht fertig
FillChar(buffer, sizeof(buffer), 0);
for K := 0 to Count do
MoveMemory(PByte(@buffer[0]) + 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 - 1; // Array beginnt bei 0 alternativ kann ich Count direkt -1 zuweisen
end;
Result := gP;
end;
gruss
Geändert von EWeiss (24. Nov 2017 um 04:26 Uhr)
|
|
Zitat
|