![]() |
effektive Form.height?
Liste der Anhänge anzeigen (Anzahl: 3)
Ich möchte etwas ganz einfaches tun. Meine Mainform sollte unter gewissen Umständen mit einer zusätzlichen Form "erweitert" werden. Also dachte ich mir z. B. im Falle von rechtsbündig:
1. positioniere die 2. Form an Form1.left + Form1.Width. Dies ist mit Form1.left + Form1.ClientWidth halbwegs gelungen (wobei auch da 2 Pixel fehlen). 2. Die Höhe ganz einfach an Form1.Top + Form1.Height. Vor allem beim Punkt zwei aber bin ich am verzweifeln. - Form1.height ist 500. Form1. - Form1.clientheight ist 441. - Das effektive gemessene Mass ist 493. Wie komme ich an diese Zahl? Vielleicht Form1.height - Titlebar - Menubar? Aber wie? Oder was gibts hier für eine Möglichkeit? Auch Top stimmt nicht ganz. Bzw. Vermutlich ist noch eine unsichtbare Border vorhanden? Der Masstab legt sich ja über die sichtbare Höhe und Breite. Siehe auch die angehängten Bilder. Getestet an Windows 10 und Windows 11. Keine Skalierung. Die DFM:
Delphi-Quellcode:
object FormMain: TFormMain
Left = 0 Top = 0 Caption = 'FormMain' ClientHeight = 441 ClientWidth = 484 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -12 Font.Name = 'Segoe UI' Font.Style = [] Menu = mnMain Position = poDesktopCenter TextHeight = 15 object memo: TMemo Left = 88 Top = 160 Width = 305 Height = 145 ReadOnly = True TabOrder = 0 end object mnMain: TMainMenu Left = 272 Top = 104 object mnShowBrowser: TMenuItem Caption = 'Zeige Fenster rechts' object rechts1: TMenuItem Caption = 'rechts' OnClick = rechts1Click end object links1: TMenuItem Tag = 1 Caption = 'links' OnClick = rechts1Click end object oben1: TMenuItem Tag = 2 Caption = 'oben' OnClick = rechts1Click end object unten1: TMenuItem Tag = 3 Caption = 'unten' OnClick = rechts1Click end object unten2: TMenuItem Caption = 'nix' OnClick = unten2Click end end end end |
AW: effektive Form.height?
Grundsätzlich "reserviert" Windows einen transparenten Bereich um die Fenster, um dort einen Schatten zu zeichnen.
Das sieht man auch bei einer Größenänderung eines Fensters mit der Maus. Aus meiner Sicht ist das ein klarer Konzeptfehler. Die genauen Bereiche kann ich Dir nicht sagen. Womöglich ist das auch dynamisch geregelt. Vermutlich ist es am sinnvollsten, mit ClientToScreen(0,0) das Offset des Formularinhalts zu ermitteln und von da aus weiter zu rechnen... |
AW: effektive Form.height?
Try these and pick your favorite one, or you can mix the result leaving little space for the resizing borders while having the exact size.
Delphi-Quellcode:
procedure TFormMain.Button1Click(Sender: TObject);
var Rect: TRect; begin GetWindowRect(Self.Handle, Rect); FormBrowser.Width := Rect.Width; FormBrowser.Height := Rect.Height; FormBrowser.Left := self.Left + Rect.Width; FormBrowser.Top := Rect.Top; FormBrowser.Visible := True; WritePos; end; procedure TFormMain.Button2Click(Sender: TObject); var Rect: TRect; begin // need DwmApi in uses clause DwmGetWindowAttribute(Self.Handle, DWMWA_EXTENDED_FRAME_BOUNDS, @Rect, SizeOf(Rect)); FormBrowser.Width := Rect.Width; FormBrowser.Height := Rect.Height; FormBrowser.Left := self.Left + Rect.Width; FormBrowser.Top := Rect.Top; FormBrowser.Visible := True; WritePos; end; ![]() ![]() |
AW: effektive Form.height?
Ja, leider ist der Fensterrahmen "unsichtbar", inkl. dem Fensterschatten.
Der Rahmen, zum Vergrößeren der Form, ist auch im transparenten Bereich. (was ich schon als bissl nervig empfinde, wenn man immer etwas "daneben" klicken muß) Form.BoundsRect vs. Form.ClientRect, allerdings da ohne die Titelleiste |
AW: effektive Form.height?
Danke Euch.
Morgen ist mein letzter Arbeitstag vor den Sommerferien. Ich werde danach weitermachen und berichten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz