AGB  ·  Datenschutz  ·  Impressum  







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

Fenster auf bestimmten Monitor öffnen

Ein Thema von DieDolly · begonnen am 8. Feb 2024 · letzter Beitrag vom 9. Feb 2024
Antwort Antwort
Seite 1 von 2  1 2      
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

Fenster auf bestimmten Monitor öffnen

  Alt 8. Feb 2024, 16:54
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;

Geändert von DieDolly ( 8. Feb 2024 um 17:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Fenster auf bestimmten Monitor öffnen

  Alt 8. Feb 2024, 17:09
Mit 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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Fenster auf bestimmten Monitor öffnen

  Alt 8. Feb 2024, 17:14
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 8. Feb 2024 um 17:16 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

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

AW: Fenster auf bestimmten Monitor öffnen

  Alt 8. Feb 2024, 17:17
eventuell Form1.MakeFullyVisible(Screen.Monitors[NummerDesMonitors]); ?

http://docwiki.embarcadero.com/Libra...keFullyVisible
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: Fenster auf bestimmten Monitor öffnen

  Alt 8. Feb 2024, 17:19
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Fenster auf bestimmten Monitor öffnen

  Alt 8. Feb 2024, 17:39
War das nicht beschreibbar?
OK, wäre natürlich blöd und dann müsste man doch die Desktop-Koordinaten selbst ausrechnen lassen.

Sekunde ...
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#7

AW: Fenster auf bestimmten Monitor öffnen

  Alt 8. Feb 2024, 17:51
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 FScreen := Screen.MonitorFromPoint(P); um, damit ich in 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);
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Fenster auf bestimmten Monitor öffnen

  Alt 8. Feb 2024, 18:03
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);
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#9

AW: Fenster auf bestimmten Monitor öffnen

  Alt 8. Feb 2024, 18:08
Mein Fehler. War nur ein Tippfehler hier im Forum.
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
701 Beiträge
 
Delphi 12 Athens
 
#10

AW: Fenster auf bestimmten Monitor öffnen

  Alt 9. Feb 2024, 14:37
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.
Peter Below
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:05 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