AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte
Thema durchsuchen
Ansicht
Themen-Optionen

VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

Ein Thema von KodeZwerg · begonnen am 7. Apr 2018 · letzter Beitrag vom 7. Apr 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

  Alt 7. Apr 2018, 09:08
Guten Tag, unter WinApi benutze ich diesen Aufruf
Delphi-Quellcode:
Handle := CreateWindowEx(WS_EX_WINDOWEDGE {$IFDEF DEFONTOP} or WS_EX_TOPMOST {$ENDIF DEFONTOP},
                         PChar('Class'),
                         PChar('Caption'),
                         WS_VISIBLE or WS_CAPTION or WS_SYSMENU or WS_BORDER or WS_MINIMIZEBOX,
                         ((GetSystemMetrics(SM_CXFULLSCREEN) DIV 2)-(ZahlX DIV 2)),
                         ((GetSystemMetrics(SM_CYFULLSCREEN) DIV 2)-((ZahlY-(GetSystemMetrics(SM_CYSIZE)+GetSystemMetrics(SM_CYMIN))) DIV 2)),
                         ZahlX, ZahlY+GetSystemMetrics(SM_CYSIZE), 0, 0, Inst, NIL);
um ein Fenster mittig auf dem Bildschirm zu erstellen, inklusive DPI check für Titelleisten Höhe (GetSystemMetrics(SM_CYSIZE)).
Das mit der Fenstermitte unter VCL hab ich raus aber wie ermittle ich unter VCL wie hoch eine Titelleiste von Windows ist/sein sollte? Also ein VCL Ersatz für GetSystemMetrics(SM_CYSIZE). Hat da jemand eine Idee für mich? Ist bestimmt eine Property die ich nur abfragen brauche .....oder?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

  Alt 7. Apr 2018, 09:25
um ein Fenster mittig auf dem Bildschirm zu erstellen, inklusive DPI check für Titelleisten Höhe
Soll die Mitte des Forms zentriert werden oder die Mitte des Client-Bereichs des Forms?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

  Alt 7. Apr 2018, 09:50
.......wie ermittle ich unter VCL wie hoch eine Titelleiste von Windows ist/sein sollte? Also ein VCL Ersatz für GetSystemMetrics(SM_CYSIZE).......
Ich will nicht grob klingen aber ich brauch eine Antwort darauf.
Um Deine Frage zu beantworten:
In dem gezeigten Code wird das Fenster (Window) mittig auf dem Bildschirm zentriert dargestellt/erstellt.
ZahlX und ZahlY ist die tatsächliche Fenstergröße des Client-Bereichs (in VCL = Fenster.Width/Height) wobei ZahlY nachkorrigiert wird um das DPI Verhältniss der Caption zu berücksichtigen.
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 7. Apr 2018 um 09:54 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#4

AW: VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

  Alt 7. Apr 2018, 10:38
Nur mal so grob geraten:

TitleHeight := Form.Height - Form.ClientHeight - (2 * Form.BorderWidth);

Lässt sich so mit Delphi 7 im Objectinspector nachvollziehen. Kommt bei meinem Rechner immer 27 raus.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

  Alt 7. Apr 2018, 10:45
Das würde mir doch nur meine Eigene Höhe wiedergeben aber nicht die Höhe die das System vorsieht, oder liege ich falsch?
Vielleicht ist es ja unter VCL auch total Wurst.
Ich werde noch ein wenig herum experimentieren um zu Wissen ob ich es überhaupt benötige wie in meinem WinApi Beispiel.
Ich glaube unter VCL sind das getrennte Sachen unter WinApi ist es ein Objekt, weswegen ich's dort berücksichtigen muss.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#6

AW: VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

  Alt 7. Apr 2018, 10:51
Ist die eigene Höhe nicht die vom System vorgegebene?

Habe jedenfalls die Höhe der Formulartitelleiste noch nie verändert.

Egal wie ich die Größe von Schrift, Komponenten ... in 'nem Formular zur Laufzeit oder im Objektinspektor verändere: Die Titelleiste des Formulars ist immer so, wie vom System vorgegeben.

Schau mal bitte hier: http://www.mindspring.com/~cityzoo/ttlbar3.html unter 3. Setting the Minimum Window Size.

Wäre da ein Ansatz bei?

Gefunden über Bei Google suchendelphi source tForm caption height

Geändert von Delphi.Narium ( 7. Apr 2018 um 10:54 Uhr) Grund: Link ergänzt.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

  Alt 7. Apr 2018, 11:14
Mit folgender Methode bekommt man ein Form um einen bestimmten Punkt auf dem Desktop zentriert:
Delphi-Quellcode:
procedure CenterFormOnScreen(AForm: TForm; ACenter: TPoint);
var
  diff: TPoint;
begin
  diff := ACenter - AForm.ClientToScreen(AForm.ClientRect.CenterPoint);
  AForm.Left := AForm.Left + diff.X;
  AForm.Top := AForm.Top + diff.Y;
end;
Je nachdem, ob man die Taskleiste bei der Berechnung des Mittelpunkts berücksichtigen will, kann der Aufruf für einen Zielmonitor so aussehen:
Delphi-Quellcode:
    // ganzer Bereich
    CenterFormOnScreen(form, Monitor.BoundsRect.CenterPoint);

    // alternativ Bereich ohne Taskleiste
    CenterFormOnScreen(form, Monitor.WorkAreaRect.CenterPoint);

    // das Form dann z.B. modal anzeigen
    form.Position := poDesigned;
    form.ShowModal;
Sollte mit allen Auflösungen, DPI-Einstellungen und Monitor-Layouts funktionieren.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 06:17 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