Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Formzustand wiederherstellen (https://www.delphipraxis.net/60261-formzustand-wiederherstellen.html)

mael 4. Jan 2006 16:45


Formzustand wiederherstellen
 
Hallo,

Häufiger habe ich die Situation, daß ich einen Dialog, nach dem Drücken auf "Abbrechen" wieder in den OK-Zustand (= Zustand der letzten Bestätigung per OK-Button) versetzen möchte..
Also nicht in seinen Ausgangszustand, sondern in den den er hatte nachdem OK gedrückt wurde.

Zur Verdeutlichung: Stellt euch einen Suchdialog vor, wo man Sachen einstellt, Z.B. "Suchen ab Textanfang", "Rückwärtssuche", "Ganze Wörter" etc.

Wenn ich jetzt auf "Abbrechen" drücke sollten die Radiobuttons bzw. Checkboxen wiederhergestellt werden.
Drücke ich aber auf "Okay" sollten die Werte als Zustand gespeichert werden.
Öffne ich nun wieder erneut den Suchendialog, und stelle etwas um, dann soll nach dem Abbrechen der vorherige "OK-Zustand" wiederhergestellt werden.


Mein Problem hierbei ist, daß ich das nicht für jeden Dialog machen möchte: sprich Variablen definieren, für jedes einzelne Control den Zustand merken und im richtigen Moment wiederherstellen.
Ich habe schon einiges versucht aber keine allgemeine Lösung hinbekommen.

Ideen?

Alexander 4. Jan 2006 17:11

Re: Formzustand wiederherstellen
 
Du könntest alle Komponenten auf der Form durchiterieren und dann alles, was du benötigst (Caption, Zustände der Radiobuttons etc.), z.B. in einer Ini speichern. Du könntest z.B. die Eigenschaften dieser Komponenten jeweils in eine Sektion dieser Ini schreiben.
Danach lädst du alles wieder aus der Ini heraus. Du musst natürlich den Namen und evtl. auch den Typ der Komponenten speichern.
Dann kannst du z.B. so wieder die alten Zustände erzeugen:
Delphi-Quellcode:
  (FindComponent('Button1') as TButton).Caption := 'Test';
Aber so richtig elegant ist das wohl auch noch nicht. Aber eine Möglichkeit :)

Khabarakh 4. Jan 2006 17:12

Re: Formzustand wiederherstellen
 
Wenn ich dich richtig verstanden habe, kannst du einfach die Form beim Klick auf OK streamen und nach Abbrechen die Properties wieder zurücksetzen.
http://www.delphipraxis.net/internal...=481051#481051
Am Besten leitest du einmalig eine Klasse, die diese Funktionalität bietet, von TForm und davon alle anderen Dialoge ab.

[add]
Zitat:

Aber so richtig elegant ist das wohl auch noch nicht.
Jupp :wink:
[/add]

SirThornberry 4. Jan 2006 17:22

Re: Formzustand wiederherstellen
 
wie gibt man dem OK-Button aber den Focus wenn das Formular nicht sichtbar ist? Wenn so ein Formular neu kreiert wurde hat automatisch das erste Control den Focus. Wenn der Focus umgetzt wurde und man das Formular schließt kann man aber nicht einfach wieder dem ersten Control den Focus geben.

monta 4. Jan 2006 17:48

Re: Formzustand wiederherstellen
 
was das Speichern eines Forms betrifft, gibt es bei den RXComponents eine Namens FormStorage.
Diese speichert soweit ich das sehe, Sachen wie state, Aktives Control und so in einer IniDatei.

mael 4. Jan 2006 18:04

Re: Formzustand wiederherstellen
 
@Khabarakh:
Das mit dem Streamen habe ich mir auch überlegt, geht aber leider nicht:
Ein Problem ist z.B. daß Standardwerte für Eigenschaften nicht gespeichert werden und daher auch nicht wiederhergestellt werden können.
Z.B. ein TEdit ohne Caption speichert nicht einen leeren string, sondern gar nichts in den Stream.

Um die Standardwerte zu erhalten muß ich also den Dialog neu erstellen, aber dann gehen mir andere Informationen verloren die ich in der Forminstanz gespeichert habe.

FormStorage schaue ich mir mal an.
[edit]Ist leider (wie in der JVCL, haben die wohl von der RXLib) nur eine "Komfortklasse". Aber im Prinzip muß man immernoch alle Eigenschaften per Hand angeben.[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 Uhr.

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