TXMLPropStorage mit GetAppConfigDir nutzen

Rund um die LCL und andere Komponenten
Antworten
Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

TXMLPropStorage mit GetAppConfigDir nutzen

Beitrag von Timm Thaler »

Ich verwende TXMLPropStorage, um Programmeinstellungen abzuspeichern. Default speichert das die Einstellungen bei Linux und bei Windows im Programmordner, was spätestens unter Win7 nicht mehr geht.

Empfohlen wird die Speicherung im Benutzerverzeichnis unter AppData/.myApp unter Windows bzw. home/user/.myApp unter Linux. Dafür gibt es nun GetAppConfigDir, welches diese Pfade zurückgeben sollte.

Aber wie bekomme ich das TXMLPropStorage dazu, das AppConfigDir zu benutzen? Darüber schweigt sich die Hilfe (http://wiki.freepascal.org/TXMLPropStorage/de) leider aus.

Ein Workaround unter Linux wäre wohl, als Filename ~/.myApp/myApp.xml anzugeben, aber das geht unter Windows nicht.

wp_xyz
Beiträge: 4888
Registriert: Fr 8. Apr 2011, 09:01

Re: TXMLPropStorage mit GetAppConfigDir nutzen

Beitrag von wp_xyz »

GetAppConfigFile(false) speichert in einer Datei <project>.cfg im c:\users\<username>\AppData\Local\<project>, und das ist m.E. der offizielle Speicherort, die Punkt-Ordner (.<project>) sind unter Windows nicht üblich.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2639
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: TXMLPropStorage mit GetAppConfigDir nutzen

Beitrag von m.fuchs »

Du setzt im Objektinspektor die Eigenschaft Active auf False und machst einfach das:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  XMLPropStorage1.FileName := GetAppConfigDir(False) + 'text.xml';
  XMLPropStorage1.Active := True;
end;


Eine Prüfung ob das AppConfigDir existiert wird vor dem Schließen empfohlen. Andernfalls kann es zu einer unschönen Exception kommen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: TXMLPropStorage mit GetAppConfigDir nutzen

Beitrag von Timm Thaler »

m.fuchs hat geschrieben:Du setzt im Objektinspektor die Eigenschaft Active auf False und machst einfach das:


Einfach, soso. Ja, ist einfach, wenn man weiss wie es geht.

Danke.

m.fuchs hat geschrieben:Eine Prüfung ob das AppConfigDir existiert wird vor dem Schließen empfohlen. Andernfalls kann es zu einer unschönen Exception kommen.


Hatte ich schon. Gib mal Windows "/" im Pfad. ;-)

Muss ich auch noch Compiler-IFs setzen...

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2639
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: TXMLPropStorage mit GetAppConfigDir nutzen

Beitrag von m.fuchs »

Timm Thaler hat geschrieben:Hatte ich schon. Gib mal Windows "/" im Pfad. ;-)
Muss ich auch noch Compiler-IFs setzen...


Wozu? GetAppConfigDir fummelt doch schon den richtigen Trenner dazwischen. Wenn du allerdings irgendwo selber noch einen reinsetzen willst, kannst du dir die IFDEF sparen. Die Konstante DirectorySeparator enthält immer den richtigen Trenner für die Verzeichnisse.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten