Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Optimierte Optionen (https://www.delphipraxis.net/34238-optimierte-optionen.html)

adecke 19. Nov 2004 20:15


Optimierte Optionen
 
Hallo und guten Abend,

mein Interesse gilt dem optimalen Handling von Programm-Optionen. Jeder kennt ja
das vermeintliche Menü "Extras" mit dem Eintrag "Optionen.."

Nun mach ich mir so meine Gedanken wie dies am besten zu handhaben wäre. Folgende
Möglichkeiten sehe ich hier.

1. Laden und Sichern der Einstellungen über eine Schleife (TComponent) in einen Datastream
(Optionen.dat).

2. Laden und Sichern in/aus einem Ini-File. Problem hier, die Typen usw.

3. Laden und Sichern in/aus Registry. So machen es fast alle.

4. Laden und Sichern in/aus XML. Hab ich noch nicht ausprobiert.

Bei all diesen Optionen (der Optionen) stellt sich die Frage an welcher Stelle (Zeitpunkt) selbige
nun eigentlich geladen bzw. gesichert werden sollten. Meiner Meinung nach, noch bevor die eigentliche Applikation rennt (Splash Screen?), oder doch später. Doppeltes laden ? Application und Optionen-Dialog.

Mich würde intressieren wie Ihr hier verfahrt oder.


gruss adecke

Stanlay Hanks 19. Nov 2004 20:39

Re: Optimierte Optionen
 
Hi. Also wenn es nicht zu viele Optionen/Einstellungen sind, speichere ich meine Einstellungen in einer INI Datei. Das geht immer noch am schnellsten. XML ist aber wahrscheinlich nicht viel anders.

Zitat:

Zitat von adecke
Bei all diesen Optionen (der Optionen) stellt sich die Frage an welcher Stelle (Zeitpunkt) selbige
nun eigentlich geladen bzw. gesichert werden sollten. Meiner Meinung nach, noch bevor die eigentliche Applikation rennt (Splash Screen?), oder doch später. Doppeltes laden ? Application und Optionen-Dialog.

Sind es so viele, dass man für die Zeit des Ladens einen Splashscreen braucht? Ich denke, einfach beim Starten des Programms laden und beim Verlassen des Programmes und (bei Klick auf OK/Übernehmen) des Optionendialoges speichern.

Man liest sich, Stanlay :hi:

adecke 19. Nov 2004 20:47

Re: Optimierte Optionen
 
Hallo,

bei einem kleinen Programm ist es sicher sinnvoll (ini), aber nehmen wir mal
etwas größeres. Wie macht es z.B. Microsoft bei Word ? Viele der Optionen werden
ja schon für die Darstellung des 1. Dokuments benötigt (einige liegen sogar im Doc).

Nehmen wir einmal an es geht um eine ganze Menge Props. Macht es da nicht Sinn den
Optionen-Dialog als ersten zu initialisieren. Alle weiteren Forms können dann direkt
auf die Props des Optionen-Dialog zugreifen. Somit sind alle Props Global.

gruss

Christian Seehase 19. Nov 2004 23:00

Re: Optimierte Optionen
 
Moin adecke,

also ich verwende immer ein Settings Objekt, über das die Einstellungen geladen und gespeichert werden, und lese die Werte dann nicht aus dem Formular aus, sondern aus diesem Objekt.
Dadurch bin ich auch vom Formular unabhängig.

adecke 20. Nov 2004 00:52

Re: Optimierte Optionen
 
Auch Moin,

das ist mir jetzt nicht klar, wie das laufen soll. Wäre Dir dankbar für ein kleines
Beispiel. In den Jedi VCL gibt es ja auch ein paar Components (AppStorage usw.).

Ein Ansatz war z.B. der:

Delphi-Quellcode:
Program TestOptions;

Uses
  Forms,
  master In 'master.pas' {mForm},
  optionen In 'optionen.pas' {oForm};

{$R *.res}

Begin

  oForm := ToForm.Create(Application);
  oForm.Update;

  Application.Initialize;
  Application.CreateForm(TmForm, mForm);
  Application.CreateForm(ToForm, oForm);
  Application.Run;

End.
stellt mich aber nicht zufrieden. Das Close-Event (oForm) schreibt zwar die
Props (in diesem Fall in die Registry), aber das Close-Event der oForm überschreibt
die Werte (löscht sie).

Na ja, werde mir jetzt eine DVD einwerfen und mich vor's TV hängen.
Morgen geht es weiter.

Also dann, gut's Nächtle (sagt der Schwabe)

Christian Seehase 20. Nov 2004 04:15

Re: Optimierte Optionen
 
Moin adecke,

ich dachte mir das so:

Ein Settings Objekt:

Delphi-Quellcode:
type
  TadSettings = class(TObject)
  private
    Fini : TIniFile;
    function GetMyOption: string;
    procedure SetMyOption(const Value: string);
  public
    constructor Create(const AsIniPath : string);
    destructor Destroy; override;
    property MyOption : string read GetMyOption write SetMyOption;
  end;

implementation
 
constructor TadSettings.Create(const AsIniPath: string);
begin
  inherited Create;
  Fini := TIniFile.Create(AsIniPath);
end;

destructor TadSettings.Destroy;
begin
  FreeAndNil(Fini);
  inherited;
end;

function TadSettings.GetMyOption: string;
begin
  Result := Fini.ReadString('Options','MyOption','<NIX>');
end;

procedure TadSettings.SetMyOption(const Value: string);
begin
  Fini.WriteString('Options','MyOption',Value);
  Fini.UpdateFile;
end;
das dann, z.B. im Hauptformular deklariert wird, und dann überall zur Verfügung steht.


Delphi-Quellcode:
 type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    FSettings : TadSettings;
  public
    { Public-Deklarationen }
    property Settings : TadSettings read FSettings;
  end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  FSettings := TadSettings.Create(ExtractFilePath(paramstr(0))+'\MySettings.ini');
  Edit1.Text := FSettings.MyOption;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(FSettings);
end;

adecke 20. Nov 2004 10:01

Re: Optimierte Optionen
 
Morgen Chris,

danke für den Source, werde es heute noch implementieren.
Melde mich.

gruss adecke

adecke 23. Nov 2004 17:08

Re: Optimierte Optionen
 
Hallo,

die Sache ist echt super, hat funkt.

gruss und Thanks adecke


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 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 by Thomas Breitkreuz