Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Fenster auf bestimmten Monitor öffnen (https://www.delphipraxis.net/214621-fenster-auf-bestimmten-monitor-oeffnen.html)

DieDolly 8. Feb 2024 15:54


Fenster auf bestimmten Monitor öffnen
 
Wie ist es möglich ein Fenster auf einem bestimmten Monitor zu öffnen?
Die absolute Position X und Y meines Hauptformulars wird beim Beenden gespeichert.

Vorher wird noch ein Ladefenster angezeigt. In der Prozedur, die vor dem Show des Ladefensters kommt, lade ich die Position wo das Hauptfenster das letzte Mal zu sehen war.
Mit diesen Koordinaten hole ich mir dann die Monitornummer:
Delphi-Quellcode:
FScreen := Screen.MonitorFromWindow(FormLoading.Handle);

P.X := Ini.ReadInteger('PosMainWindow', 'MainX', (FScreen.Width - FormLoading.Width) div 2);
P.Y := Ini.ReadInteger('PosMainWindow', 'MainY', (FScreen.Height - FormLoading.Height) div 2);

FScreen := Screen.MonitorFromPoint(P);
Damit bekomme ich dann in FScreen.MonitorNum die Nummer des Monitors heraus.

Wie platziere ich das Ladefenster nun mittig auf den Monitor FScreen.MonitorNum?

Das Folgende halte ich für falsch, weil der zweite Moitor (das Ladefenster wäre in meinem Fall auf Monitor #2) nicht zwingend rechts neben dem Hauptmonitor sein muss
Delphi-Quellcode:
FormLoading.Left := FScreen.Left + (FScreen.Width - FormLoading.Width) div 2;
FormLoading.Top := FScreen.Top + (FScreen.Height - FormLoading.Height) div 2;

Uwe Raabe 8. Feb 2024 16:09

AW: Fenster auf bestimmten Monitor öffnen
 
Mit
Delphi-Quellcode:
FScreen.BoundRect.CenterPoint
erhältst du die Mitte des Monitors. Die Werte für Left/Top des Ladefensters liegen jeweils um die halbe Breite/Höhe nach links/oben verschoben.

himitsu 8. Feb 2024 16:14

AW: Fenster auf bestimmten Monitor öffnen
 
Ist dir schonmal aufgefallen, dass TForm ein Property Monitor, sowie DefaultMonitor besitzt?

Und zusätzlich würde ich noch das Property Position empfehlen, z.B. mit poScreenCenter. (Achtung, poDesktopCenter ist nicht empfehlenswert)

Delphi.Narium 8. Feb 2024 16:17

AW: Fenster auf bestimmten Monitor öffnen
 
eventuell
Delphi-Quellcode:
Form1.MakeFullyVisible(Screen.Monitors[NummerDesMonitors]);
?

http://docwiki.embarcadero.com/Libra...keFullyVisible

DieDolly 8. Feb 2024 16:19

AW: Fenster auf bestimmten Monitor öffnen
 
Zitat:

Ist dir schonmal aufgefallen, dass TForm ein Property Monitor, sowie DefaultMonitor besitzt?
Was soll mir Monitor in TForm bringen? Monitor ist ReadOnly.

Ich möchte das Formular auf einen bestimmten Monitor platzieren, da bringt mir Monitor und DefaultMonitor in TForm nix.

himitsu 8. Feb 2024 16:39

AW: Fenster auf bestimmten Monitor öffnen
 
War das nicht beschreibbar?
OK, wäre natürlich blöd und dann müsste man doch die Desktop-Koordinaten selbst ausrechnen lassen.

Sekunde ...

DieDolly 8. Feb 2024 16:51

AW: Fenster auf bestimmten Monitor öffnen
 
Wie oben zu sehen habe ich es so gemacht.
Ich hole mir erst die letzten auf der Festplatte gespeicherten Koordinaten des Hauptfensters und speichere die in P.X und P.Y.
Diese rechne ich mit
Delphi-Quellcode:
FScreen := Screen.MonitorFromPoint(P);
um, damit ich in
Delphi-Quellcode:
FScreen
den passenden Monitor dafür habe.

Danach
Delphi-Quellcode:
FormLoading.Left := FScreen.BoundsRect.CenterPoint.X - (FScreen.Width div 2);
FormLoading.Top := FScreen.BoundsRect.CenterPoint.Y - (FScreen.Height div 2);

Uwe Raabe 8. Feb 2024 17:03

AW: Fenster auf bestimmten Monitor öffnen
 
Sollte das nicht besser so heißen:
Delphi-Quellcode:
FormLoading.Left := FScreen.BoundsRect.CenterPoint.X - (FormLoading.Width div 2);
FormLoading.Top := FScreen.BoundsRect.CenterPoint.Y - (FormLoading.Height div 2);

DieDolly 8. Feb 2024 17:08

AW: Fenster auf bestimmten Monitor öffnen
 
Mein Fehler. War nur ein Tippfehler hier im Forum.

peterbelow 9. Feb 2024 13:37

AW: Fenster auf bestimmten Monitor öffnen
 
Zitat:

Zitat von DieDolly (Beitrag 1533217)
Wie ist es möglich ein Fenster auf einem bestimmten Monitor zu öffnen?
Die absolute Position X und Y meines Hauptformulars wird beim Beenden gespeichert.

Vorher wird noch ein Ladefenster angezeigt. In der Prozedur, die vor dem Show des Ladefensters kommt, lade ich die Position wo das Hauptfenster das letzte Mal zu sehen war.
Mit diesen Koordinaten hole ich mir dann die Monitornummer:
Delphi-Quellcode:
FScreen := Screen.MonitorFromWindow(FormLoading.Handle);

P.X := Ini.ReadInteger('PosMainWindow', 'MainX', (FScreen.Width - FormLoading.Width) div 2);
P.Y := Ini.ReadInteger('PosMainWindow', 'MainY', (FScreen.Height - FormLoading.Height) div 2);

FScreen := Screen.MonitorFromPoint(P);
Damit bekomme ich dann in FScreen.MonitorNum die Nummer des Monitors heraus.

Wie platziere ich das Ladefenster nun mittig auf den Monitor FScreen.MonitorNum?

Das Folgende halte ich für falsch, weil der zweite Moitor (das Ladefenster wäre in meinem Fall auf Monitor #2) nicht zwingend rechts neben dem Hauptmonitor sein muss
Delphi-Quellcode:
FormLoading.Left := FScreen.Left + (FScreen.Width - FormLoading.Width) div 2;
FormLoading.Top := FScreen.Top + (FScreen.Height - FormLoading.Height) div 2;

Du machst Dir viel zu viel Arbeit. Setze die DefaultMonitor-Eigenschaft des Forms auf dmDesktop. Dann sind Left und Top relativ zum virtuellen Desktop und nicht mehr zu einem spezifischen Monitor.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 Uhr.
Seite 1 von 2  1 2      

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