Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult mrOK (https://www.delphipraxis.net/191532-formular-position-speichern-generell-wenn-geschlossen-wird-oder-bei-modalresult-mrok.html)

HolgerX 25. Jan 2017 14:04

AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult
 
Hmm..

@rokli

Und wenn Du mehr wie ein Formular speichern wills:

Delphi-Quellcode:
procedure FromProp_IniRead(AForm : TCustomForm);
// INI Datei einlesen
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;
end;

procedure FromProp_IniWrite(AForm : TCustomForm);
// INI Datei wegschreiben
var
  Ini : TIniFile;
  tmpFormName : string;
begin
  Ini      := TIniFile.Create(ChangeFileExt( Application.ExeName, '.INI' ) );
  try
    tmpFormName := AForm.Name;
    Ini.WriteInteger(tmpFormName, 'Top',   AForm.Top);
    Ini.WriteInteger(tmpFormName, 'Left',  AForm.Left);
    Ini.WriteInteger(tmpFormName, 'Height', AForm.Height);
    Ini.WriteInteger(tmpFormName, 'Width', AForm.Width);
    Ini.WriteBool(tmpFormName, 'InitMax', AForm.WindowState = wsMaximized );
  finally
    Ini.Destroy;
  end;
end;

rokli 25. Jan 2017 14:17

AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult
 
cool, Holger!
:cyclops:

t.roller 25. Jan 2017 14:45

AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult
 
How to remember a window's size, state and position

http://www.delphidabbler.com/zip/demos/wdwstatedemo.zip

mm1256 25. Jan 2017 15:00

AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult
 
Zitat:

Zitat von HolgerX (Beitrag 1359931)
Hmm..

Delphi-Quellcode:
procedure FromProp_IniRead(AForm : TCustomForm);
  ...
  Ini     := TIniFile.Create(ChangeFileExt( Application.ExeName, '.INI' ) );
  ...
end;

So was sollte man eigentlich verbieten, auch wenn es nur ein Beispiel ist. Es gibt welche, die übernehmen den Unsinn dann sogar noch mit copy&paste :stupid:

Slipstream 25. Jan 2017 22:30

AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult
 
Zitat:

Zitat von rokli (Beitrag 1359928)
Ein großer Vorteil einer Ini-Datei ist, dass man ganz einfach z. B. den Form1.LEFT Wert ändern kann, und damit bei einer 2-Schirm Lösung das Programm von einem Bildschirm auf den anderen schieben kann, auch dann wenn man die Form nach dem Programmstart nicht sieht, weil sie außerhalb des Bildschirmes gelandet ist.

Und wenn du keine Ini hast und das Formular oder die Anwendung trotzdem auf einem gestern noch vorhandenen, heute aber fehlendem, weil defekten Bildschirm virtuell "erscheint", aber nicht zu sehen ist, dann kannst du dieses Formular mit altbewährter Windowstechnik ebenfalls auf den sichtbaren Bereich herüberschieben:

Alt-Space lässt das Menü aufklappen. Ist das Formular maximiert, muss man es erst normalisieren. Dann fährt man runter zum Eintrag Verschieben und schiebts einfach rüber. Das ist jedem Windows-Anwender zuzutrauen, das Herumfummeln in Ini-Dateien dagegen weniger.

a.def 25. Jan 2017 22:34

AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult
 
Ich zitiere mich mal einfach selber. Man braucht kein Alt+Space und all den Quark :stupid:
Die Alt+Space-Geschichte ist rein theoretisch jedem zuzutrauen. Wer es aber kennt und anwenden kann, ist die andere Frage. Ich gehe von einem Prozentsatz von <25 aus.

Zitat:

Zitat von a.def (Beitrag 1359914)
Guck mal hier. So kann man auch auf außerhalb-des-sichtbaren-Bereichs prüfen.

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


Slipstream 26. Jan 2017 01:15

AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult
 
Nein, da hast du was falsch verstanden. Deiner Methode in Delphi, das Erscheinen eines Formulars ausserhalb eines gültigen Bildschirmbereichs zu vermeiden, wollte ich auf keinen Fall widersprechen, das ist sinnvoll und richtig. Mir ging es nur darum zu zeigen, dass es für einen normalen Windows-Benutzer einfacher ist, mit Alt-Space (und das ist kein Quatsch, das ist ein sinnvolles Feature von Windows) eine Anwendung in den sichtbaren Bereich zu verschieben, anstatt in irgend einer Ini-Datei herumzufurwerkeln und die Struktur der Ini am Ende noch zu zerstören.

rokli 26. Jan 2017 05:58

AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult
 
Moin!

Das "herumfummeln" in der INI gehört genauso zu den Dingen, die aus der EDV Abteilung gemacht werden, wie die Windows Tastenkombinationen zu kennen, die Du, Slipstream, da genannt hast. Den Prozentsatz der Anwender, die das wissen, würde ich eher wesentlich kleiner als die genannten 25 % einschätzen.

Da ist die Lösung CheckFormPosition von a.def ja viel, viel besser.

@Otto: Warum sollte man das verbieten?

Gruß

DeddyH 26. Jan 2017 06:47

AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult
 
Zitat:

Zitat von rokli (Beitrag 1359984)
@Otto: Warum sollte man das verbieten?

Der vorgesehene Pfad für (installierte) Programme liegt ja im Programme-Ordner. Da hat der Normalbenutzer aber standardmäßig keine Schreibrechte, von daher wird das so nicht funktionieren. Die bessere Option wäre APPDATA bzw. COMMON_APPDATA, diese Verzeichnisse lassen sich ja ermitteln.

freimatz 26. Jan 2017 07:21

AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult
 
Zitat:

Zitat von uligerhardt (Beitrag 1359929)
Ich benutze für sowas MSDN-Library durchsuchenGetWindowPlacement/MSDN-Library durchsuchenSetWindowPlacement. Damit erspart man sich z.B. die Prüfung auf zwischenzeitlich nicht mehr vorhandene Monitore etc. Aufrufen tue ich das normalerweise im OnShow/OnHide.
...

Danke. Das war mir neu - und auch m.E. das einzige Richtige, also selber etwas zu "basteln".


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:42 Uhr.
Seite 2 von 3     12 3      

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