![]() |
Wie Programmoptionen organisieren?
Hallo!
Ich interessiere mich dafür, wie ihr eure Programmoptionen organisiert. Hierbei meine ich allerdings NICHT, ob ihr sie in einer Ini-, XML-, Binärdatei oder in der Registry speichert. Dazu gibt es bereits genug Threads. Vielmehr interssiert mich, wie ihr es im Code organisiert. Habt ihr ein globales Settings-Objekt (der Name ist eher nebensächlich, ihr wisst was ich meine :wink: ), oder handhabt ihr das ganz anders. Und falls ihr ein globales Objekt habt, sind dort die Einstellungen typisiert, sodass ihr nur mehr so schreiben müsst:
Delphi-Quellcode:
Und wenn ihr das so macht: Wie geht ihr mit Verschachtelungen um?
MainForm.Width := Settings.Width;
MainForm.Color := Settings.Color; // usw. Oder müsst ihr TIniFile/TRegistry-Methoden nutzen? Nutzt ihr in diesem Fall ebenfalls ein globales Objekt? Also um meine Frage noch einmal allgemein zu formulieren: Wie organisiert ihr eure Programmoptionen im Code? Vielen Dank, Andreas |
Re: Wie Programmoptionen organisieren?
Hi,
also ich verwende kein globales Objekt, sondern vielmehr für die jeweiligen Teilgebiete eine eigene Kapselung. Die ist dann möglichst abstrakt und es gibt dann noch konkrete Implementierungen (falls sich mal was an der Art der Datenspeicherung ändert). Diese Objekte kümmern sich dann immer um den Teil, der für sie wichtig ist. Besonders gerne nutze ich hier auch die Kombination mit Archivdateien, die mehr als eine Datei beihalten können (z.B. Zip-Dateien). Da kann man dann alle Optionen an einem Ort unterbringen, hat den Vorteil den halt eine Datei gegenüber der Registry bietet (wenn es um das einfache Kopieren ohne Installer geht) und man hat trotzdem ein wenig Modularisierung. Alle Einstellungen lassen sich damit auch einzeln anpassen und ich finde es lässt sich gut damit arbeiten. Hoffe ich die Frage so richtig verstanden, Gruß Der Unwissende |
Re: Wie Programmoptionen organisieren?
Ich mach mir immer ein record wo ich alle optionen reinlade und an bestimmten punkten lade und speichere
|
Re: Wie Programmoptionen organisieren?
Zitat:
|
Re: Wie Programmoptionen organisieren?
Vielen Dank für eure Antworten!
Einerseits bin ich sehr den oben von mir angedeuteten typisierten Ansatz, anderseits wüsste ich nicht, wie man da Verschachtelungen ordentlich implementieren könnte. Eure Record-Implementation entspricht eigentlich meinem typisierten Ansatz (das eigentliche Medium ist ja egal; man kann ja auch ein TIniFile/TRegistry so kapseln). Ihr verzichtet also auf eine Verschachtelung? TRegistry und TIniFile unterstützen zwar Verschachtelungen, nur bin ich auf die ReadXXX und WriteXXX Methoden angewiesen. Dadurch habe ich dann überall im Code meine Konstanten für das Herauslesen (Key-, Sectionname) verstreut und nicht alles an einer Stelle. Deshalb frage ich einfach mal ganz unverschämt, wie ihr das macht. :mrgreen: Dankeschön, Andreas |
Re: Wie Programmoptionen organisieren?
Zitat:
|
Re: Wie Programmoptionen organisieren?
Du kannst auch ein Objekt mehr oder weniger Vollautomatisch füllen und speichern lassen.
Du gehts halt per RTTI über das Objekt und nimmst den Klassennamen als Sectionname und die einzelnen Felder als Wertenamen. Das geht volldynamisch und Du kannst so beliebige Struktur ablegen und wieder auslesen. |
Re: Wie Programmoptionen organisieren?
Hallo Andreas,
Zitat:
![]() Auf diese Weise könntest du sogar relativ schnell auf ein anderes Medium (Registry, XML-Datei) wechseln. Gruß Hawkeye |
Re: Wie Programmoptionen organisieren?
Also ich mach das so:
![]() Kommt natürlich auch auf Art und Größe des Programms an, aber in den meisten Fällen is das ganz praktisch... mfg Christian |
Re: Wie Programmoptionen organisieren?
Zitat:
ich habe ein Objekt "XYZSettings", das seinerseits aus "Value"-Objekten besteht, die einen sinnvollen Namen haben wie "PrinterMarginLeft" und einen Typ wie Integer, Real, Color usw. was man so brauchen kann (wird ständig erweitert). Diese werden im Create initialisiert, dabei (und nur hier!!!) werden auch Section und Key für die Ini-Datei bestimmt und im Value-Objekt gespeichert (die Defaultwerte übrigens auch, und auch der Bezug zu einem TEdit o.ä. sofern vorhanden). Also stehen die alle an einer Stelle (im overrided Create) und sind eindeutig. Neben Einzelroutinen für die Value-Objekete hat das Settings-Objekt auch Routinen wie ReadAllvalues (zum Programmstart) und SaveAllValues (am Ende). Normalerweise speichere ich vom User eingegebene Änderungen nicht extra in die INI-Datei, sondern nur in Settings.Value - die Saveroutinen am Programmende vergleichen den aktuellen Wert mit dem zuletzt eingelesenen und speichern nur wenn nötig (dirty). Das Ganze hat bei einem komplexen Projekt mehr als 2500 Zeilen Umfang, dafür geht so etwas wie die Verwaltung von Stiften und Farben für Plots fast automatisch. Es gibt in dem Beispiel ja auch mehr als 200 Variablen, die der Benutzer ändern kann, um seine Plots anzupassen, und entsprechend viele Controls zur Eingabe von Zahlen, Farben, Stiftmustern usw. Gruss Reinhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:23 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