Geschlossen: Inhalte eines Programmes speichern ?
-
- Beiträge: 58
- Registriert: Sa 28. Aug 2010, 18:30
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Geschlossen: Inhalte eines Programmes speichern ?
Ich bin grad dabei ein Programm zu machen, indem man eingibt wie viel man noch von einer Ware im Haushalt hat.
Wie schaffe ich es, dass die Inhalte beim nächsten starten des Programmes noch genauso sind, wie ich sie vorher eingegeben habe.
Ich denke an einen Speicherbutton oder sowas.
hoffe jmd kann mir helfen
Wie schaffe ich es, dass die Inhalte beim nächsten starten des Programmes noch genauso sind, wie ich sie vorher eingegeben habe.
Ich denke an einen Speicherbutton oder sowas.
hoffe jmd kann mir helfen
Zuletzt geändert von jaslaz am Do 2. Sep 2010, 17:12, insgesamt 3-mal geändert.
-
- Beiträge: 144
- Registriert: So 22. Aug 2010, 16:06
- OS, Lazarus, FPC: Backtrack 5 RC4 - 64bit Gnome
- CPU-Target: 64bit
- Wohnort: NRW
- Kontaktdaten:
Re: Inhalte eines Programmes speichern ?
Ich ignoriere jetzt mal den anderen Thread von dir und schreibe dir in diesem.
Es gibt 2 Möglichkeiten deine Einstellungen zu speichern:
1. Mit INI-Dateien. Das ist die etwas ältere Version, aber dennoch zuverlässig und dazu recht simpel.
2. Mit XML-Dateien. Die modernere Variante und auch Platform-unabhängig.
Die Dateien kannst du dann z.B. im Programm-Ordner deines Projektes speichern und mit einem Form.Create Ereignis wieder laden.
Es gibt 2 Möglichkeiten deine Einstellungen zu speichern:
1. Mit INI-Dateien. Das ist die etwas ältere Version, aber dennoch zuverlässig und dazu recht simpel.
2. Mit XML-Dateien. Die modernere Variante und auch Platform-unabhängig.
Die Dateien kannst du dann z.B. im Programm-Ordner deines Projektes speichern und mit einem Form.Create Ereignis wieder laden.
-
- Beiträge: 58
- Registriert: Sa 28. Aug 2010, 18:30
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Inhalte eines Programmes speichern ?
Das mit den zwei threads wollt ich nich aber egal.
kannst du mir das mit der ersten variante noch mal genauer erklären?
kannst du mir das mit der ersten variante noch mal genauer erklären?
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
Re: Inhalte eines Programmes speichern ?
Hallo jaslaz,
die Inhalte kann man, wie live schon schilderte, in Dateien abspeichern. Einsteigern empfehle ich das Abspeichern in Textdateien, das ist wohl das Einfachste. Durch diese Routine speicherst Du einen Text in eine Datei ab:
Der Text befindet sich dann in der Datei textfile.ini . Du kannst ihn dann mit den folgenden Zeilen wieder auslesen:
(Code ist ungetestet)
Noch eine Bemerkung: Bitte keine Doppelposts erstellen.
Viele Grüße, Euklid
die Inhalte kann man, wie live schon schilderte, in Dateien abspeichern. Einsteigern empfehle ich das Abspeichern in Textdateien, das ist wohl das Einfachste. Durch diese Routine speicherst Du einen Text in eine Datei ab:
Code: Alles auswählen
Var F : text;
Inhalt:string;
begin
Inhalt:='Dies ist der zu speichernde Programminhalt.';
AssignFile(F,'textfile.ini');
Rewrite(F);
Writeln (F,Inhalt);
CloseFile(F);
end;
Code: Alles auswählen
Var F : text;
Inhalt:string;
begin
AssignFile(F,'textfile.ini');
Reset(F);
Readln (F,Inhalt);
CloseFile(F);
end;
Noch eine Bemerkung: Bitte keine Doppelposts erstellen.
Viele Grüße, Euklid
-
- Beiträge: 58
- Registriert: Sa 28. Aug 2010, 18:30
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Inhalte eines Programmes speichern ?
das funktioniert nicht : er zeigt eine fehlermeldung hinter 'textfile.ini'
Re: Inhalte eines Programmes speichern ?
Ja, ein Speicherbutton ist die Lösung.
Nimm einfach einen TSpeicherButton und gut is.
Euklid's Vorschlag ist viel zu einfach, ich würde das in Assembler machen.
Bitte denke daran: Klassen benutzen wie TStringList oder TIniFile ist gaaaanz böse!
Also immer so kompliziert wie möglich!

Nimm einfach einen TSpeicherButton und gut is.

Euklid's Vorschlag ist viel zu einfach, ich würde das in Assembler machen.
Bitte denke daran: Klassen benutzen wie TStringList oder TIniFile ist gaaaanz böse!
Also immer so kompliziert wie möglich!

Re: Inhalte eines Programmes speichern ?
Die obige Antwort war an Euklid gerichtet, nicht an dich jaslaz.
Du musst dir überlegen, wie die Daten strukturiert sind, die du speichern möchtest.
Das können wir so nicht wissen.
Wenn es nur eine Liste ist, die du in einem TMemo hältst, dann reicht eigentlich Memo1.SaveToFile und Memo1.LoadFromFile.
Sonst braucht es vllt. eher eine Datenbank.
Überlege dir mal, wie deine Daten genau aussehen, dann finden wir eine Lösung für dich.
Du musst dir überlegen, wie die Daten strukturiert sind, die du speichern möchtest.
Das können wir so nicht wissen.
Wenn es nur eine Liste ist, die du in einem TMemo hältst, dann reicht eigentlich Memo1.SaveToFile und Memo1.LoadFromFile.
Sonst braucht es vllt. eher eine Datenbank.
Überlege dir mal, wie deine Daten genau aussehen, dann finden wir eine Lösung für dich.
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Inhalte eines Programmes speichern ?
Persistenz ist ein Programmparadigma, das noch in keiner Programmiersprache eingebaut wurde. Es fehlt momentan noch die zündende Idee, wie man so was realisieren sollte.
Zuletzt geändert von carli am Sa 28. Aug 2010, 21:40, insgesamt 1-mal geändert.
Re: Inhalte eines Programmes speichern ?
Meinst du Persistenz? Wir wollen jaslaz aber doch jetzt nicht ein OPF aufschwatzen, oder?carli hat geschrieben:Konsistenz ist ein Programmparadigma, das noch in keiner Programmiersprache eingebaut wurde. Es fehlt momentan noch die zündende Idee, wie man so was realisieren sollte.

-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Inhalte eines Programmes speichern ?
Jap, editiert.theo hat geschrieben: Meinst du Persistenz?
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
Re: Inhalte eines Programmes speichern ?
Euklid findet seinen Ansatz ganz einfach.theo hat geschrieben:Die obige Antwort war an Euklid gerichtet, nicht an dich jaslaz.

Re: Inhalte eines Programmes speichern ?
Ich würds so machen:
Oder Einfach mal den Namen, dessen was du spichern willst eingeben, und dann einen Punkt, und Strg+Space drücken.
Wenn es hier SaveToFile gibt, kannst du es auch so Speichern:
Aller Code ist ungetestet...
Code: Alles auswählen
Procedure OnSpeicherbuttonclick(Sender: Tobject);//Das kommt wenn mann doppelt auf den Button klickt
Var Txt: Tstrings
Begin
Txt:=Tstringlist.Create;
Txt.Clear;
Txt.Add(Edit1.Text);
Txt.Add(Label1.Text);//z.B.
//...
Txt.SavaToFile('Bla.Bla');
Txt.Free;
End;
//Wiederherstellen:
//On Create;
Var Txt: Tstrings;
Begin
If Fileexists('Bla.Bla') then//bin mir nicht sicher ob der Befehl so richtig geschriben ist
begin
Txt:=Tstringlist.Create;
Txt.LoadFromFile('Bla.Bla');
Edit1.Text:=Txt[0];
Label1.Caption:=Txt[1];//z.B.
//usw.
Txt.Free;
end;
Wenn es hier SaveToFile gibt, kannst du es auch so Speichern:
Code: Alles auswählen
{Speichern} ListBox1.SaveToFile('Bla.Bla');
{Wiederherstellen} ListBox1.LoadFromFile('Bla.Bla');
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!
it´s not a bug, it´s a feature!
Re: Inhalte eines Programmes speichern ?
Das findet aber nur Euklid.Euklid hat geschrieben:Euklid findet seinen Ansatz ganz einfach.theo hat geschrieben:Die obige Antwort war an Euklid gerichtet, nicht an dich jaslaz.

Ich finde man sollte dieses AssignFile/Reset Zeug ins Museum stellen.
Mal ganz abgesehen davon, ist dein Vorschlag nicht ganz sauber. Es wird ja noch kryptischer:
Code: Alles auswählen
{$i-}
Reset (f);
{$i+}
If IOresult<>0 then
writeln ('File ',paramstr(1),' doesn''t exist')
else
writeln ('File ',paramstr(1),' exists');
Dann sollte man ihm nicht gleich diesen Jurassic-Code an den Kopf schmeissen, sondern erst mal herausfinden, was er eigentlich benötigt.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Inhalte eines Programmes speichern ?
Mit Lazarus kann ich dir leider nicht helfen. In MSEgui gibt es eine entsprechende Komponente, tstatfile aus dem tab 'NoGui'. Viele MSEgui Komponenten haben die Eigenschaft 'statfile'. Wenn die 'statfile'-Eigenschaft einen Verweis auf eine tstatfile Komponente enthält, wird der Zustand der Komponente in einer durch tstatfile geschriebenen Datei gespeichert. Wird die tstatfile Komponente in der 'statfile' Eigenschaft des Hauptformulares eingetragen, geschieht das Laden und Speichern automatisch. Zudem werden Grösse und Position des Formulares ebenfalls gespeichert.jaslaz hat geschrieben: Ich denke an einen Speicherbutton oder sowas.
hoffe jmd kann mir helfen
Beispiel:
Ein Eingabeformular mit einem Datum- einem Text- und einem Fliesskommazahl-Eingabefeld soll seinen Zustand speichern.
- 'Project'-'New'-'From Template'.
- 'default.prj' auswählen.
- Projekt Ort auswählen, Projekt Dateinamen eintragen 'OK' drücken, das Projekt wird angelegt.
- 'View'-'Component Palette'-'Edit', ein tdatetimeedit, ein tstringedit und ein trealedit auf dem Formular platzieren.
- Aus dem tab 'NoGui' ein tstatfile im Formular platzieren.
- In den 'statfile' Eigenschaften des Formulares und den drei Eingabefeldern diese tstatfile Komponente auswählen.
- F9 drücken, fertig.

Martin
-
- Beiträge: 58
- Registriert: Sa 28. Aug 2010, 18:30
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Inhalte eines Programmes speichern ?
felix96 hat geschrieben:Ich würds so machen:Code: Alles auswählen
Procedure OnSpeicherbuttonclick(Sender: Tobject);//Das kommt wenn mann doppelt auf den Button klickt Var Txt: Tstrings Begin Txt:=Tstringlist.Create; Txt.Clear; Txt.Add(Edit1.Text); Txt.Add(Label1.Text);//z.B. //... Txt.SavaToFile('Bla.Bla'); Txt.Free; End; //Wiederherstellen: //On Create; Var Txt: Tstrings; Begin If Fileexists('Bla.Bla') then//bin mir nicht sicher ob der Befehl so richtig geschriben ist begin Txt:=Tstringlist.Create; Txt.LoadFromFile('Bla.Bla'); Edit1.Text:=Txt[0]; Label1.Caption:=Txt[1];//z.B. //usw. Txt.Free; end;
Code: Alles auswählen
Edit1.Text:=Txt[0];
In der Zeile zeigt er mir immer Diese Fehlermeldung:
unit1.pas(52,6) Error: Identifier not found "Edit1"