Einzelnen Beitrag anzeigen

Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Compare TRect, wie am besten angehen?

  Alt 22. Jun 2015, 18:05
Hallo,

ich habe ein kleines Compare-Problem.
Ich fülle ein TList via ControllCount und möchte diese
in Abhängigkeit der hinterlegten Rect-Strukturen sortieren.
Delphi-Quellcode:
var
  CL : TList;
...
 CL := TList.Create;
...
  for I := 0 to ControlCount - 1 do
  CL.Add(Controls[I]);
...
 InternalOwner := Self;
 CL.Sort(@CompareTB);
...
 CL.Free;
Delphi-Quellcode:
...
var
  InternalOwner : TControl;

function CompareTopBottom(Item1, Item2 : Pointer) : Integer;
var
  R1, R2 : TRect;
begin
  R1 := TControl(Item1).ClientRect;
  R1.TopLeft := InternalOwner.ScreenToClient(TControl(Item1).ClientToScreen(Point(0, 0)));
  R1.Right := R1.Left + R1.Right;
  R1.Bottom := R1.Top + R1.Bottom;

  R2 := TControl(Item2).ClientRect;
  R2.TopLeft := InternalOwner.ScreenToClient(TControl(Item2).ClientToScreen(Point(0, 0)));
  R2.Right := R2.Left + R2.Right;
  R2.Bottom := R2.Top + R2.Bottom;

  if (R1.Top < R2.Top) then Result := -1
  else
  if (R1.Top = R2.Top) then Result := 0
  else
  if (R1.Top > R2.Top) then Result := 1;
end;
Nur Leider ist das Ergebnis 'Suboptimal', siehe Anlage.

Wie könnte ich es anders/besser angehen?
Miniaturansicht angehängter Grafiken
screen.png  
  Mit Zitat antworten Zitat