Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fensterposition sowie -größe auf zweitem Monitor speichern und laden (https://www.delphipraxis.net/196056-fensterposition-sowie-groesse-auf-zweitem-monitor-speichern-und-laden.html)

samso 23. Apr 2018 07:38

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

Zitat von haentschman (Beitrag 1400192)
Moin...:P
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;

rokli 23. Apr 2018 11:11

AW: Fensterposition sowie -größe auf zweitem Monitor speichern und laden
 
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ß


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 Uhr.
Seite 3 von 3     123   

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