TXMLPropStorage / TINIPropStorage

Rund um die LCL und andere Komponenten
Antworten
Jochen
Beiträge: 35
Registriert: So 30. Nov 2008, 23:35

TXMLPropStorage / TINIPropStorage

Beitrag von Jochen »

Hallo,

zuerst mal ein Gruß ans Forum, hab schon viel gelesen und gelernt.

Aber jetz muss ich mal eine Frage stellen, ich hoffe jemand weiß Rat:

Ich verwende die SessionProperties zum Speichern verschiedener Einstellungen der Form. Auf der Form befindet sich eine ListBox, deren Inhalt (Items) ich auch über die SessionProperties speichern kann. Das erste Speichern funktioniert, beim nächsten Öffnen der Anwendung werden auch alle Items der Listbox (und alle anderen Einstellungen) geladen.

Lösche ich nun die Listbox und beende die Anwendung, so wird das nicht korrekt in die XML/INI-Datei (egal) übernommen! Beim nächsten Start der Anwendung werden wieder Items geladen, teilweise stimmen Anzahl (count) und Einträge in der XML/INI-Datei nicht überein.

Mache ich etwas falsch? Funktioniert das Speichern der Items nicht, obwohl es angeboten wird? Muss ich 'von Hand' speichern (http://wiki.lazarus.freepascal.org/TXML ... igenschaft" onclick="window.open(this.href);return false;)?

Jochen

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: TXMLPropStorage / TINIPropStorage

Beitrag von theo »

Sieht nach Bug aus -> ab in den Bugtracker mit Versionsangabe: http://bugs.freepascal.org/view_all_bug_page.php" onclick="window.open(this.href);return false;
Alternativ kannst du einfach die Listbox Inhalte so speichern und laden:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  if FileExists('/home/theo/testlist.txt') then
  ListBox1.Items.LoadFromFile('/home/theo/testlist.txt');
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  ListBox1.Items.SaveToFile('/home/theo/testlist.txt');
end;

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: TXMLPropStorage / TINIPropStorage

Beitrag von Socke »

Soweit ich weiß, ist dieses Verhalten bisher noch normal (auch wenn es nicht wirklich erwünscht ist). Abhilfe wäre manuelles speichern (auch mit TXML/INIPropStorage). Im Wiki könnte dazu mehr stehen (ich meine, dort hätte ich mal etwas darüber gelesen).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: TXMLPropStorage / TINIPropStorage

Beitrag von monta »

Es gibt dafür um es manuell zu machen (auch wenn das in meinen Augen nicht wirklich der Sinn von XMLPropStorage ist) die Befehle:
XMLPropStorage1.Write... und XMLPropStorage1.Read... unter anderem auch mit dem Datentyp TStrings damit könntest du direkt die selbe Datei nutzen und recht leicht die Strings manuell beim beenden speichern.
Johannes

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: TXMLPropStorage / TINIPropStorage

Beitrag von Socke »

monta hat geschrieben:Es gibt dafür um es manuell zu machen (auch wenn das in meinen Augen nicht wirklich der Sinn von XMLPropStorage ist) die Befehle:
XMLPropStorage1.Write... und XMLPropStorage1.Read... unter anderem auch mit dem Datentyp TStrings damit könntest du direkt die selbe Datei nutzen und recht leicht die Strings manuell beim beenden speichern.
Zum manuellen Speichern von Werten ist *PropStorage nicht wirklich geeignet. Einfacher gehts mit TXMLConfig.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Jochen
Beiträge: 35
Registriert: So 30. Nov 2008, 23:35

Re: TXMLPropStorage / TINIPropStorage

Beitrag von Jochen »

Hab jetzt TXMLConfig genommen, funktioniert wunderbar. Ist halt mehr Tipparbeit, aber egal.

Vielleicht interessant: (auch) TXMLConfig löscht keine nicht mehr vorhanden Einträge. Es werden nur neue hinzu genommen, oder bestehende überschrieben. Ein

Code: Alles auswählen

XMLConfig1.Clear
vor dem Schreiben der Werte löst das Problem.

Vielen Dank!


Jochen

Antworten