AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Fensterposition sowie -größe auf zweitem Monitor speichern und laden
Thema durchsuchen
Ansicht
Themen-Optionen

Fensterposition sowie -größe auf zweitem Monitor speichern und laden

Ein Thema von günni0 · begonnen am 19. Apr 2018 · letzter Beitrag vom 23. Apr 2018
Antwort Antwort
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.251 Beiträge
 
Delphi 12 Athens
 
#1

AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden

  Alt 20. Apr 2018, 07:31
Aber Achtung: Das Fenster wird dorthin verschoben, egal, ob es die Position/den Monitor auch gibt + wird damit uU unsichtbar.

Haben wir immer wieder, wenn Benutzer den zweiten Monitor nicht aufdrehen oder von einem anderen Rechner mit nur einem Monitor aus arbeiten. :-/
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#2

AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden

  Alt 20. Apr 2018, 07:36
Da bietet das Forum eine einfache Lösung für

https://www.delphipraxis.net/1359914-post7.html
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.140 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden

  Alt 22. Apr 2018, 23:14
Bei mir funktioniert es auch in OnCreate .

Aber Achtung: Das Fenster wird dorthin verschoben, egal, ob es die Position/den Monitor auch gibt + wird damit uU unsichtbar.

Haben wir immer wieder, wenn Benutzer den zweiten Monitor nicht aufdrehen oder von einem anderen Rechner mit nur einem Monitor aus arbeiten. :-/
Nach dem Laden der Position:
Delphi-Quellcode:
if Screen.MonitorFromWindow(Handle, mdNull) = nil then
Position := poScreenCenter;
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.473 Beiträge
 
Delphi 12 Athens
 
#4

AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden

  Alt 23. Apr 2018, 05:48
Moin...
Zitat:
Bei mir funktioniert es auch in OnCreate .
...eben, weil du nicht nicht Left und Top der Form setzt sondern nur poScreenCenter.
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
440 Beiträge
 
#5

AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden

  Alt 23. Apr 2018, 07:38
Moin...
Zitat:
Bei mir funktioniert es auch in OnCreate .
...eben, weil du nicht nicht Left und Top der Form setzt sondern nur poScreenCenter.
Das sehe ich nicht so. Folgendes Testprogramm funktioniert wunderbar (d.h. das Formular wird wie gewünscht auf dem rechten Monitor angezeigt)
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Position := poDesigned;
  Left := 2000; Top := 800;
end;
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
302 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden

  Alt 23. Apr 2018, 11:11
Unabhängig von der Anzahl der Monitore verwende ich schon sehr lange die folgenden INIs:

Beim Programmstart:

Delphi-Quellcode:
procedure p_IniRead(AForm : TCustomForm);
// INI Datei einlesen und Fensterpositionen bestimmen
var
   Ini         : TIniFile;
   tmpFormName : string;
begin
   Ini          := TIniFile.Create(ChangeFileExt( Application.ExeName, '.INI' ) );
   try
      tmpFormName      := AForm.Name;
      AForm.Top      := Ini.ReadInteger(tmpFormName, 'Top', AForm.Top );
      AForm.Left      := Ini.ReadInteger(tmpFormName, 'Left', AForm.Left );
      AForm.Height   := Ini.ReadInteger(tmpFormName, 'Height', AForm.Height);
      AForm.Width      := Ini.ReadInteger(tmpFormName, 'Width', AForm.Width);
      if Ini.ReadBool( tmpFormName, 'InitMax', false ) then
         AForm.WindowState := wsMaximized
      else
         AForm.WindowState := wsNormal;
   finally
      Ini.Destroy;
   end;

   if Screen.MonitorFromWindow(aForm.Handle, mdNull) = nil then begin
      // Form is outside of any monitor. Move to center of main monitor
      aForm.Top      := (Screen.Monitors[0].Height - aForm.Height) div 2;
      aForm.Left      := (Screen.Monitors[0].Width - aForm.Width) div 2;
   end;

end;
und wenn Fenster geschlossen werden, speichern der Fensterpositionen:

Delphi-Quellcode:
procedure TFrmMain.p_IniFormPosRead(AForm : TCustomForm);
// Position der Form merken
var
   Ini         : TIniFile;
   tmpFormName : string;
begin
   Ini          := TIniFile.Create(ChangeFileExt( Application.ExeName, '.INI' ) );
   try
      tmpFormName      := AForm.Name;
      AForm.Top      := Ini.ReadInteger(tmpFormName, 'Top', AForm.Top );
      AForm.Left      := Ini.ReadInteger(tmpFormName, 'Left', AForm.Left );
      AForm.Height   := Ini.ReadInteger(tmpFormName, 'Height', AForm.Height);
      AForm.Width      := Ini.ReadInteger(tmpFormName, 'Width', AForm.Width);
      if Ini.ReadBool( tmpFormName, 'InitMax', false ) then
         AForm.WindowState := wsMaximized
      else
         AForm.WindowState := wsNormal;
   finally
      Ini.Destroy;
   end;
Und durch die Weitergabe der Form klappt das auch mit beliebigen Fenstern in einem Programm. Und das Handling, wenn mal nur ein Monitor vorhanden ist, ist auch gleich enthalten (wurde aber oben ja auch schon gezeigt).

Gruß
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  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 16:14 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