Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie Programmoptionen organisieren? (https://www.delphipraxis.net/80968-wie-programmoptionen-organisieren.html)

EConvertError 18. Nov 2006 10:10


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:
MainForm.Width := Settings.Width;
MainForm.Color := Settings.Color;
// usw.
Und wenn ihr das so macht: Wie geht ihr mit Verschachtelungen um?

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

Der_Unwissende 18. Nov 2006 11:33

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

pacman1986 18. Nov 2006 12:04

Re: Wie Programmoptionen organisieren?
 
Ich mach mir immer ein record wo ich alle optionen reinlade und an bestimmten punkten lade und speichere

Daniel G 18. Nov 2006 12:07

Re: Wie Programmoptionen organisieren?
 
Zitat:

Zitat von pacman1986
Ich mach mir immer ein record wo ich alle optionen reinlade und an bestimmten punkten lade und speichere

Jupp, dito.

EConvertError 18. Nov 2006 12:24

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

Daniel G 18. Nov 2006 12:33

Re: Wie Programmoptionen organisieren?
 
Zitat:

Zitat von EConvertError
Ihr verzichtet also auf eine Verschachtelung?

Sorry, aber ich kapier nicht ganz, was du mit "Verschachtelungen" meinst.

Phoenix 18. Nov 2006 12:39

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.

Hawkeye219 18. Nov 2006 13:05

Re: Wie Programmoptionen organisieren?
 
Hallo Andreas,

Zitat:

Zitat von EConvertError
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.

Das vermeidest du, indem du den richtigen Ansatz wählst: klick
Auf diese Weise könntest du sogar relativ schnell auf ein anderes Medium (Registry, XML-Datei) wechseln.

Gruß Hawkeye

r2c2 18. Nov 2006 13:15

Re: Wie Programmoptionen organisieren?
 
Also ich mach das so: http://www.delphipraxis.net/internal...ct.php?t=80217
Kommt natürlich auch auf Art und Größe des Programms an, aber in den meisten Fällen is das ganz praktisch...

mfg

Christian

Reinhard Kern 18. Nov 2006 23:00

Re: Wie Programmoptionen organisieren?
 
Zitat:

Zitat von EConvertError
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

Hallo,

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

Sharky 19. Nov 2006 07:49

Re: Wie Programmoptionen organisieren?
 
Hai Andreas,

Zitat:

Zitat von Phoenix
....Du gehts halt per RTTI über das Objekt und nimmst den Klassennamen als Sectionname und die einzelnen Felder als Wertenamen. ...

So ähnlich wie Sebastian es vorschlägt habe ich es hier einmal für die Sprachunterstützung in einem Programm gemacht.

Wenn Du das ganze etwas erweiterst kannst Du das sicher recht einfach für deine Zwecke anpassen.

EConvertError 19. Nov 2006 12:02

Re: Wie Programmoptionen organisieren?
 
Hallo!


Zitat:

Zitat von Daniel G
Zitat:

Zitat von EConvertError
Ihr verzichtet also auf eine Verschachtelung?

Sorry, aber ich kapier nicht ganz, was du mit "Verschachtelungen" meinst.

Damit meine ich zum Beispiel die Sections aus einer Inifile, oder aber auch die beliebige Baumstruktur der Registry.


Ich werde wohl den von Hawkeye219 vorgeschlagenen Ansatz in Verbindung mit der RTTI verwenden. Scheint mir das vernünftigste zu sein, da ich durch die RTTI meine "Verschachtelungen" sehr leicht erreiche und gleichzeitig meinen "typisierten Ansatz" verwirklichen kann. Ein paar Ideen von Reinhard Kern gefallen mir auch sehr gut...

Vielen Dank,
Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:20 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