AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

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.161 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
10.864 Beiträge
 
Delphi 11 Alexandria
 
#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
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
42.832 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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

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

Registriert seit: 27. Nov 2017
2.392 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.161 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
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
42.832 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 ...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.161 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
10.864 Beiträge
 
Delphi 11 Alexandria
 
#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.161 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
663 Beiträge
 
Delphi 11 Alexandria
 
#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   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:20 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