Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#41

AW: 2 Arrays vergleichen\sortieren

  Alt 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)
  Mit Zitat antworten Zitat