AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult mrOK
Thema durchsuchen
Ansicht
Themen-Optionen

Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult mrOK

Ein Thema von Kidi · begonnen am 25. Jan 2017 · letzter Beitrag vom 26. Jan 2017
 
Slipstream
(Gast)

n/a Beiträge
 
#5

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

  Alt 25. Jan 2017, 12:13
Das mit dem "erst beim Beenden speichern" hatte ich vorher so gemacht. Aber wenn Größe und Position eines Formulars welches nicht das Hauptformular ist gespeichert werden soll gab das Probleme (falsche Werte usw). Daher speichere ich zwischen. Funktioniert wunderbar und die Zahlen sind immer aktuell.
Was spricht dagegen, erstens zwei private Methode zum Lesen und Speichern von Formulargrösse und -position einzubauen, in der direkt diese fünf Parameter in Registry, Datenbank oder Inidatei gespeichert werden?

Und was spricht zweitens dagegen, diese Methode dann in der OnClose-Ereignisbehandlung aufzurufen?

Ich mach das schon immer so und hatte damit noch nie Probleme. Hier ein Beispiel, wie man aus einer Datenbank (die vielleicht auch von mehreren Clients verwendet wird), die individuellen Daten zur Wiederherstellung der individuellen Programmoptionen ausliest und wieder zurückschreibt, der Einfachheit halber reduziert auf Fensterposition, -grösse und Windowstate:

Delphi-Quellcode:
Procedure FormSoundSo.FormParamsRead;
begin
  Left := DM.QueryUser.FieldByName('SOUNDSO_LEFT').AsInteger;
  Top := DM.QueryUser.FieldByName('SOUNDSO_TOP').AsInteger;
  Width := DM.QueryUser.FieldByName('SOUNDSO_WIDTH').AsInteger;
  Height := DM.QueryUser.FieldByName('SOUNDSO_HEIGHT').AsInteger;
  if DM.QueryUser.FieldByName('SOUNDSO_MAX').AsBoolean then
     Windowstate := wsMaximized else
     Windowstate := wsNormal;
end;

Procedure FormSoundSo.FormParamsWrite;
var
  Maxi : Boolean;
begin
  Maxi := Windowstate = wsMaximized;
  Windowstate := wsNormal;
  DM.QueryUser.Edit;
  DM.QueryUser.FieldByName('SOUNDSO_LEFT').AsInteger := Left;
  DM.QueryUser.FieldByName('SOUNDSO_TOP').AsInteger Top;
  DM.QueryUser.FieldByName('SOUNDSO_WIDTH').AsInteger := Width;
  DM.QueryUser.FieldByName('SOUNDSO_HEIGHT').AsInteger := Height;
  DM.QueryUser.FieldByName('SOUNDSO_MAX').AsBoolean := Maxi;
  DM.QueryUser.Post;
end;

Procedure FormSoundSo.FormShow(Sender: TObject);
begin
  FormParamsRead;
end;

Procedure FormSoundSo.FormClose(Sender : TObject; Var Action : TCloseAction);
begin
  FormParamsWrite;
end;
Genauso (war mir jetzt zu aufwendig, das hier reinzutippen) würde man das beim Lesen von bzw. Schreiben in eine Inidatei oder Registry machen. Wenn du das jedesmal zwischenspeicherst, hast du das doppelt gespeichert. Ich weiß keinen Grund, diese Daten im Programm doppelt zu speichern.
  Mit Zitat antworten Zitat
 


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:56 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