TMemIniFile lädt nicht vom Stream? (gelöst)

Rund um die LCL und andere Komponenten
Antworten
MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

TMemIniFile lädt nicht vom Stream? (gelöst)

Beitrag von MmVisual »

Hallo,

Code: Alles auswählen

Procedure TfrmKonfig.ReadIni(st: TMemoryStream);
Var ini: TMemIniFile;
Begin
  st.Position := 0;
  ini := TMemIniFile.Create(st);
geht nicht :?:

Error beim Kompilieren:
fKonfig.pas(110,31) Error: Incompatible type for arg no. 1: Got "TMemoryStream", expected "AnsiString"

Was mache ich falsch :?:

Gruß Markus.
Zuletzt geändert von MmVisual am Mi 29. Dez 2010, 13:58, insgesamt 1-mal geändert.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6837
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TMemIniFile lädt nicht vom Stream?

Beitrag von af0815 »

MmVisual hat geschrieben:Error beim Kompilieren:
fKonfig.pas(110,31) Error: Incompatible type for arg no. 1: Got "TMemoryStream", expected "AnsiString"
Es gibt keine Überladung von TMemIniFile.Create(st) die als Parameter einen Memorystream aktzeptiert. Normalerweile gibt man dort einen Dateinamen an.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: TMemIniFile lädt nicht vom Stream?

Beitrag von theo »

Mit TIniFile geht das.

ini := TIniFile.Create(st);

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: TMemIniFile lädt nicht vom Stream?

Beitrag von MmVisual »

Danke für die schnelle Antwort :D
Es geht wie gewünscht.

Gruß Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: TMemIniFile lädt nicht vom Stream?

Beitrag von MmVisual »

Geht doch nicht :(

Sobald ich was ändere und Schreib-Befehle ini.WriteString() mache, dann schreibt der einen Schrott in den Stream.

Also TIniFile macht nicht das was ich möchte, ich denke der TMemIniFile würde das besser machen, denn der arbeitet ganz im Memory.

Gibt es noch eine andere Möglichkeit?

Anbei ein Bild mit dem Inhalt nach dem Schrieben

Mein Ziel ist:
- Konfiguartionsdialog
- Zu Beginn wird die INI-Datei in das Memo eingelesen und die Konfig-Steuerelemente in den anderen Reiter gesetzt
- Wenn man nun bei Steuerelementen einen anderen Parameter einstellt, dann soll der im Reiter "Ini-Datei" online mit geändert werden
- Wenn nun unter "Ini-Datei" (im text) manuell etwas geändert wird, dann soll das in die anteren Reiter/Steuerelemente übernommen werden
- Erst die "Speichern" Taste schreibt die Datei

Gruß Markus.
Dateianhänge
Bild1.png
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: TMemIniFile lädt nicht vom Stream?

Beitrag von MmVisual »

Ich habs raus gefunden:

TIniFile arbeitet wie ein TMemIniFile wenn der Parameter
ini.CacheUpdates := True;
gesetzt wird. Aber es ging immer noch nicht richtig, denn da ist noch ein Feature (Bug) in der INI-Dateiverwaltung, denn die löscht den Stream nicht, sondern hängt die Daten einfach an. Der Bug (das Feature) kann so umgangen werden:

st.Clear; // Stream leeren
ini.UpdateFile; // Schreibt Daten neu in den Stream

Wenn man den Stream vor UpdateFile nicht leert, dann werden die Daten an den bestehenden Stream einfach angehängt und man hat alle Einträge doppelt und dreifach.

Gruß Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6837
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TMemIniFile lädt nicht vom Stream?

Beitrag von af0815 »

MmVisual hat geschrieben: TIniFile arbeitet wie ein TMemIniFile wenn der Parameter
ini.CacheUpdates := True;
Ein Blick in die Sourcen hätte dir gezeigt, das TMemIniFile von TIniFile abgeleitet ist und nur einen Parameter in der Create zusätzlich setzt und dann das ererbte Create aufruft. Ebenso sieht man in den Sourcen was wie läuft, welche Überladungen es gibt,....
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: TMemIniFile lädt nicht vom Stream? (gelöst)

Beitrag von MmVisual »

Jo, schon klar.

Var ini: TMemIniFile;

Wenn ich bei ini ein . (Punkt) drücke, und dann Strg+Leerschlag, und dann noch die Buchstaben Cr, dann erscheinen in der Liste 3 Einträge mit Create, davon einer mit TStream :!:

Wenn also Lazarus diese Liste richtig anzeigen würde, wäre ich niemals auf die Idee gekommen diesen Thread zu schreiben.

> > Lazarus Bug :mrgreen: :mrgreen:
EleLa - Elektronik Lagerverwaltung - www.elela.de

Antworten