Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#3

AW: 2 Arrays vergleichen\sortieren

  Alt 22. Nov 2017, 14:44
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

Geändert von EWeiss (22. Nov 2017 um 14:54 Uhr)
  Mit Zitat antworten Zitat