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?