Delphi-PRAXiS
Seite 1 von 2  1 2      

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 TMemIniFile neu einlesen (https://www.delphipraxis.net/83781-tmeminifile-neu-einlesen.html)

faux 6. Jan 2007 11:47


TMemIniFile neu einlesen
 
Hallo!

Ich benutze ein TMemIniFile zum speichern der Konfiguration. Die ganze Konfiguration soll über die INI Datei passieren, also kein GUI.
Wie kann ich den Befehl "Reload Config" realisieren? Es soll hierbei die Datei neu eingelesen werden, falls etwas verändert wurde.

Grüße
Faux

marabu 6. Jan 2007 12:06

Re: TMemIniFile neu einlesen
 
Hallo,

du könntest das Verzeichnis mit der Konfigurationsdatei überwachen und auf Änderungen an der Datei reagieren. Alternativ könntest du eine externe Überwachung implementieren die deine Anwendung benachrichtigt.

Grüße vom marabu

faux 6. Jan 2007 12:15

Re: TMemIniFile neu einlesen
 
Danke für die Antwort, aber so aufwändig will ich das gar nicht machen. Der Benutzer soll selbst im Menü wählen "Konfiguration JETZT neu einlesen".
Hört sich leicht an, aber wie lese ich ein TMemIniFile neu ein?

Jelly 6. Jan 2007 12:17

Re: TMemIniFile neu einlesen
 
Zitat:

Zitat von faux
Ich benutze ein TMemIniFile zum speichern der Konfiguration. Die ganze Konfiguration soll über die INI Datei passieren, also kein GUI.

Das widerspricht sich. Wenn Du ein ini-File direkt im Notepad ohne eigene Gui bearbeitest, wieso musst du mit TMemIniFile was speichern?

Zitat:

Zitat von faux
Wie kann ich den Befehl "Reload Config" realisieren? Es soll hierbei die Datei neu eingelesen werden, falls etwas verändert wurde.

Indem Du dir eine ReloadConfig Prozedur schreibst, die die Ini File ausliest und die Werte in Eigenschaften einer oder mehrerer Klassen speichert.

Willst Du allerdings die Konfiguration automatisch neu laden sobald die ini-Datei von aussen verändert wurde, könntest du in regelmässigen Abständen den Timestamp der ini-Datei prüfen und gegebenfalls dann neu laden.

Christian Seehase 6. Jan 2007 12:45

Re: TMemIniFile neu einlesen
 
Moin Tom,

Zitat:

Zitat von Jelly
könntest du in regelmässigen Abständen den Timestamp der ini-Datei prüfen und gegebenfalls dann neu laden.

statt Polling wäre aber die Überwachung des Verzeichnisses, wie Marabu sie vorgeschlagen hat, zu bevorzugen (Hier im Forum suchenReadDirectoryChangesW / [dp]FindFirstChange*[/dp] usw.
Solche Änderungen sollten ja nicht so häufig auftreten.

Wobei natürlich MemIniFile den Nachteil hat, dass die Datei bei einer Änderung nicht gleich neu geschrieben wird, da müsste man dann bei jeder Änderung schon UpdateFile aufrufen.

thkerkmann 6. Jan 2007 12:52

Re: TMemIniFile neu einlesen
 
Tach zusammen,

ich glaube das geht alles an seiner Fragestellung vorbei - obwohl gute Vorschläge, werd ich mir auch mal anschauen... :-)

Seine Frage war doch: Wie lese ich ein TMemIniFile neu ein - der Benutzer triggert dies ja.

Und vielleicht ist die Antwort einfach:

Delphi-Quellcode:
  MyMemIniFile.Free;
  MyMemIniFile := tMemIniFile.Create(meinIniFilename);
jetzt ist die Collection der Werte neu eingelesen.

Sollte ich die Aufgabe falsch verstanden haben, ignoriert einfach meinen Post. :oops:

Gruss

faux 6. Jan 2007 12:54

Re: TMemIniFile neu einlesen
 
Jup, thkerkmann, das wars. ;)
Aber wird bei MemIniFile.Free nicht der Cache in die Datei geschrieben, also alle Änderungen überschrieben?

Grüße
Faux

Christian Seehase 6. Jan 2007 13:02

Re: TMemIniFile neu einlesen
 
Moin Faux,

Zitat:

Zitat von faux
Aber wird bei MemIniFile.Free nicht der Cache in die Datei geschrieben, also alle Änderungen überschrieben?

vor dem Problem stehst Du bei MemIniFile aber immer, wenn Du die Änderungen nicht mit UpdateFile zurückschreibst. Dann würdest Du ja, wie schon gesagt, nicht einmal merken können, das etwas geändert wurde.

thkerkmann 6. Jan 2007 13:31

Re: TMemIniFile neu einlesen
 
Zitat:

Zitat von Christian Seehase
Moin Faux,

Zitat:

Zitat von faux
Aber wird bei MemIniFile.Free nicht der Cache in die Datei geschrieben, also alle Änderungen überschrieben?

vor dem Problem stehst Du bei MemIniFile aber immer, wenn Du die Änderungen nicht mit UpdateFile zurückschreibst. Dann würdest Du ja, wie schon gesagt, nicht einmal merken können, das etwas geändert wurde.

Also diese Antwort finde ich jetzt wieder verwirrend.

Eindeutige Antwort: Bei
Delphi-Quellcode:
MemIniFile.Free;
wird nix zurückgeschrieben.

Dazu gibt es eine extra Methode, nämlich
Delphi-Quellcode:
MemIniFile.UpdateFile;
Gruss

Christian Seehase 6. Jan 2007 15:49

Re: TMemIniFile neu einlesen
 
Moin Thomas,

Zitat:

Zitat von thkerkmann
Eindeutige Antwort: Bei
Delphi-Quellcode:
MemIniFile.Free;
wird nix zurückgeschrieben.

Dazu gibt es eine extra Methode, nämlich
Delphi-Quellcode:
MemIniFile.UpdateFile;

Stimmt auch wieder :oops: :wall:

Auch wenn es, mehr oder weniger, dokumentiert, ist, halte ich dieses Verhalten für einen Fehler in der Implementierung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 Uhr.
Seite 1 von 2  1 2      

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