Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#3

Re: Größe der Arbeitsfläche eines Forms ermitteln (Scrollbar

  Alt 26. Okt 2009, 17:32
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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat