Delphi-PRAXiS
Seite 1 von 2  1 2      

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


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

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