also in D7 liefert .Range auch die richtigen Ergebnisse (Wenn nichts auf der Form ist, dann natürlich 0)
liefert den belegten ClientBereich
Delphi-Quellcode:
Function GetUsedClientRect(C: TWinControl): TRect;
Var i: Integer;
Begin
i := C.ControlCount - 1;
While i >= 0
do
If (C.Controls[i]
is TWinControl)
and TWinControl(C.Controls[i]).Visible
Then Begin
Result := TWinControl(C.Controls[i]).BoundsRect;
Break;
End Else Dec(i);
If i >= 0
Then Begin
While i > 0
do Begin
Dec(i);
If (C.Controls[i]
is TWinControl)
and TWinControl(C.Controls[i]).Visible
Then
UnionRect(Result, Result, TWinControl(C.Controls[i]).BoundsRect);
End;
End Else ZeroMemory(@Result, SizeOf(TRect));
End;
R
{TRect} := GetUsedClientRect(Form1);
und wenn man es sich etwas abändert, dann sollte es auch den kompletten Client-Bereich zurückgeben können
Delphi-Quellcode:
Function GetClientRect(C: TWinControl): TRect;
Var i: Integer;
Begin
Result.Left := 0;
Result.Top := 0;
Result.Right := C.ClientWidth;
Result.Bottom := C.ClientHeight;
i := C.ControlCount;
While i > 0
do Begin
Dec(i);
If (C.Controls[i]
is TWinControl)
and TWinControl(C.Controls[i]).Visible
Then
UnionRect(Result, Result, TWinControl(C.Controls[i]).BoundsRect);
End;
End;