AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

effektive Form.height?

Ein Thema von taveuni · begonnen am 25. Jun 2025 · letzter Beitrag vom 25. Jun 2025
Antwort Antwort
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
542 Beiträge
 
Delphi 11 Alexandria
 
#1

effektive Form.height?

  Alt 25. Jun 2025, 11:52
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
Angehängte Grafiken
Dateityp: jpg delphi.jpg (41,2 KB, 19x aufgerufen)
Dateityp: jpg effektiv.jpg (77,2 KB, 18x aufgerufen)
Angehängte Dateien
Dateityp: zip FormTopLeftWidthHeight.zip (19,8 KB, 1x aufgerufen)
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.

Geändert von taveuni (25. Jun 2025 um 11:57 Uhr) Grund: Minimaldemo angehängt
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: effektive Form.height?

  Alt 25. Jun 2025, 15:42
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...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
445 Beiträge
 
#3

AW: effektive Form.height?

  Alt 25. Jun 2025, 15:51
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;
https://learn.microsoft.com/en-us/wi...-getwindowrect
https://learn.microsoft.com/en-us/wi...indowattribute
Kas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: effektive Form.height?

  Alt 25. Jun 2025, 16:19
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
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (25. Jun 2025 um 16:31 Uhr)
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
542 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: effektive Form.height?

  Alt 25. Jun 2025, 16:24
Danke Euch.
Morgen ist mein letzter Arbeitstag vor den Sommerferien. Ich werde danach weitermachen und berichten.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  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 18:18 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