![]() |
Fensterposition sowie -größe auf zweitem Monitor speichern und laden
Die Fensterposition und -größe zu speichern ist absolut kein Problem.
Jetzt wäre ich noch gerne in der Lage zu speichern und laden, auf welchem Monitor das Formular zuletzt war. Ich habe schon ein bisschen mit Screen.Monitors[] rumgespielt aber das bringt mich nicht weiter, da ich weder laden noch speichern kann. Mein Grundgedanke: beim Speichern
Delphi-Quellcode:
um den Monitor zu bekommen.
X := Screen.MonitorFromWindow(FormHandle... )
showmessage( X.MonitorNum.ToString ); Aber wie lade ich das nun und zeige das Formular auch auf diesem Monitor wieder an? Solche Sachen wie "MonitorLinks.Breite + ....." und sowas kann man ja total vergessen. Denn nicht jeder hat die Monitore nebeneinander. |
AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden
Zitat:
Delphi-Quellcode:
arbeitet auch mit der Fensterposition bzw. genauer gesagt "The MonitorFromWindow function retrieves a handle to the display monitor that has the largest area of intersection with the bounding rectangle of a specified window".
MonitorFromWindow
|
AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden
Das heißt ich speichere aktuell falsch. Aktuell speichere ich einfach nur X und Y vom "Monitor" und achte gar nicht drauf welcher.
Aktuell übergebe ich meiner Funktion schlicht
Delphi-Quellcode:
und speichere das in 4 ini idents ab.
aForm.Width, aForm.Height, aForm.Left, aForm.Top
Wie müsste man das denn abspeichern, um MultiMonitor-Support zu gewährleisten? |
AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden
Zitat:
Edit: Du hast grade editiert. So wie du es machst, sollte es "automatisch" schon passen :) |
AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden
Leider nicht. Ich speichere X, Y Höhe und Breite ganz normal.
Beim Laden gehe ich so vor
Delphi-Quellcode:
_Screen := Screen.MonitorFromWindow(frmMain.Handle);
if IniFrm.ValueExists('window_options', 'x') and IniFrm.ValueExists('window_options', 'y') then begin x := IniFrm.ReadInteger('window_options', 'x', (_Screen.Width - frmOptions.Width) div 2); y := IniFrm.ReadInteger('window_options', 'y', (_Screen.Height - frmOptions.Height) div 2); end else begin x := (_Screen.Width - frmOptions.Width) div 2; y := (_Screen.Height - frmOptions.Height) div 2; end; frmOptions.Left := x; frmOptions.Top := y; |
AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden
Lass das ganze Gedöhns mit dem Screen einfach weg :P Einfach nur X, Y, Width, Height speichern und 1 zu 1 wieder laden. Auf dem richtigen Monitor landet das Fenster dann automatisch.
|
AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden
Zitat:
Das Screens ist nur für die Ini-Default-Werte da, falls beim Auslesen was nicht klappt. |
AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden
Zitat:
Was genau funktioniert beim Laden denn nicht? Die Positionen sind falsch? |
AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden
Zitat:
Hinweis: Das Laden/Setzen der Werte im OnShow. |
AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden
Die Position vom Hauptfenster wird wohl korrekt geschrieben (rechter Monitor).
Delphi-Quellcode:
Beim Laden landet es aber auf Monitor 1 (also der linke)
[window_main]
x=2139 y=196 Ich setze Top und Left im OnCreate-Event. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:04 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 by Thomas Breitkreuz