AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Größe der Arbeitsfläche eines Forms ermitteln (Scrollbar!)
Thema durchsuchen
Ansicht
Themen-Optionen

Größe der Arbeitsfläche eines Forms ermitteln (Scrollbar!)

Ein Thema von berens · begonnen am 26. Okt 2009 · letzter Beitrag vom 26. Okt 2009
Antwort Antwort
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#1

Größe der Arbeitsfläche eines Forms ermitteln (Scrollbar!)

  Alt 26. Okt 2009, 16:56
Hi!

Größe der Arbeitsfläche eines Forms ermitteln (Scrollbar!) macht folgende Probleme:

1) Form1.ClientWidth und ClientHeight geben nur die Werte des aktuell sichtbaren Bereiches an.
2) VertScrollBar.Range oder HorzScrollbar.Range ist nur gültig, wenn die Scrollbar "sichtbar" ist.
3) "Sichtbar" sind die ScrollLeisten nur dann, wenn z.B. HorzScrollbar.Range < ClientWidth ist. ".Visible" hat damit nix zu tun / keinen Einfluß. (AutoScroll = True), bzw. "Range" wird nicht mehr aktualisiert, wenn die Bildlaufleiste nicht von Nöten ist.
4) Button1.Top und Left sind relativ zur linken, oberen FensterEcke, nicht zur linken oberen Ecke des Arbeitsbereiches innerhalb der Form.

Wie kann ich nun genau herausfinden, wie groß aktuell meine Arbeitsfläche ist.

Etwas ist der Richtung von
Delphi-Quellcode:
  if ClientWidth > HorzScrollBar.Range then begin
    BreiteDerArbeitsflache := ClientWidth;
  end else begin
    BreiteDerArbeitsflache := HorzScrollBar.Range
  end;
geht imho garnicht.

Auch wenn ich neu erzeugte Objekte ausrichten will (Left := 10) kann ich nicht jedes Mal Rücksicht auf die Bildlaufleisten nehmen und schauen, ob die Werte stimmten oder noch Pi-Mal-Daumen HorzScrollbar.Position abgezogen werden muss.

Oder mache ich da was falsch?

Danke im vorraus.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 26. Okt 2009, 17:05
Versuch mal, ein ein client-aligned TPanel in das Form zu setzen. Bevel abschalten und schaun, ob Panel.Width und Panel.Height deinen Wünschen näher kommt.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 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;
$2B or not $2B
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 26. Okt 2009, 21:36
Der Tip mit alClient funktioniert, und wenn ich nun ein Panel nehme, denke ich, sollten auch die Werte für Top und Left stimmen.

Ursprünglich wollte ich Align komplett vermeiden, aber im Moment scheint es mir die sowohl einfachste, wie auch beste Lösung zu sein.

Danke an die Antworter
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz