Entwickler-Ecke
Dateizugriff - label speichern und abrufen :/
blazeR - Mo 23.12.02 23:38
Titel: label speichern und abrufen :/
hab nen kleines Spiel programmiert und würde gerne mein Label_punktzahl als highscore speichern und abrufen können. Hab leider kein Plan, wie ich sowas mach. :oops:
Plz help me!
blazeR - Di 24.12.02 09:50
danke erstmal. Ich bekomms aber trotzdem noch nicht so richtig hin ..
procedure TForm1.Button1Click(Sender: TObject);
begin
ini.free;
close;
ini.WriteString(test); [Not enough actual parameters]
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.Text:=test;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
var ini: TIniFile;
begin
ini:=TIniFile.create('einstellungen.ini');
end;
end;
end.
Visum - Di 24.12.02 12:27
Hi,
eine INI Datei ist immer in Sektoren eingeteilt.
der Befehl heißt also z.B.
Quelltext
1:
| ini.writestring('1','2','Test'); |
In der Datei steht dann:
[1]
2=Test
So werden die Daten dann auch wieder ausgelesen.
p.s. steht aber auch in dem Tutorial drin ...
blazeR - Di 24.12.02 12:28
hab meinen Fehler selbst entdeckt :roll: .
Nun hab ich aber einen neuen:
Das Programm läuft zunächst. Ich schreibe etwas in das edit-feld und klicke anschliessend auf button2(speichern).
Soweit funzt noch alles.
Klick ich dann aber auf button2(schliessen)
| Zitat: |
procedure TForm1.Button1Click(Sender: TObject);
begin
ini.free;
close;
ini.WriteString('Mittel','Name',test);
end; |
Dann kommt eine Fehlermeldung. Und unter meinem code steht dann sowas in der Art:
'... never used before'.
Dies bezieht sich auf folgende line:
| Zitat: |
| ini.WriteString('Mittel','Name',test); |
blazeR - Di 24.12.02 12:29
| Visum hat folgendes geschrieben: |
Hi,
eine INI Datei ist immer in Sektoren eingeteilt.
der Befehl heißt also z.B.
Quelltext 1:
| ini.writestring('1','2','Test'); |
In der Datei steht dann:
[1]
2=Test
So werden die Daten dann auch wieder ausgelesen.
p.s. steht aber auch in dem Tutorial drin ... |
Jo, ich weis. Hatte ich übersehen
Visum - Di 24.12.02 12:35
Der Fehler könnte durch diese Zeile kommen:
edit1.Text:=test;
Du weist edit1.text den Inhalt von test zu. Dadurch bleibt Test aber undefiniert. Dreh das ganze einfach um, damit der Text auch wirklich in 'test' steht.
test:=edit1.text;
Ausserdem solltest du erst in die Datei schreiben, und sie dann wieder freigeben, sonst passiert einfach gar nichts ;)
Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Button1Click(Sender: TObject); begin ini.WriteString('Mittel','Name',test); ini.free; close; end; |
Anonymous - Di 24.12.02 12:43
Du solltest das Tutorial ein wenig mehr studieren. Du bringst ein wenig durcheinander und gibst zuerst das Ini frei und versuchst dann mit Ini etwas abzuspeichern. Das wird nie funktionieren. Guck dir vielleicht das Tutorial hier im Forum unter FAQ an.
Ich hab mir das noch einmal genauer angeguckt und muß sagen, daß das das bescheuerdste Stück Code ist was ich je gesehen habe. Das klingt vielleich ein wenig arrogant (Sorry), aber erklär mir bitte wie du das zustande gebracht hast? Hast du von hinten nach vorne programmiert?
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.Button1Click(Sender: TObject); begin ini.free; close; ini.WriteString(test); //[Not enough actual parameters] end;
procedure TForm1.FormCreate(Sender: TObject); begin edit1.Text:=test; end;
procedure TForm1.Button2Click(Sender: TObject); begin var ini: TIniFile; begin ini:=TIniFile.create('einstellungen.ini'); end; end;
end. |
Hier ein Crashkurs in OOP:
Wenn noch nicht eingebunden (z.B. automatisch), dann bindet man zuerst die passende Unit zu dem Objekt ein. Hier im Beispiel die Unit IniFiles:
Wenn man mit Ojekten arbeiten will, dann braucht man auch eine Objektvariable. Wir brauchen eine TIniFile Variable:
Vor dem Arbeiten mit Objekten muß man eine Instanz erstellen. Hier im Beispiel für die Ini:
Quelltext
1:
| Ini := TIniFile.Create('IniDatei.ini') |
Tip:
Wenn du die Ini im gelichen Verzeichnis wie dein Programm haben willst, dann machst du das so:
Quelltext
1:
| Ini := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini')) |
Dann kannst du mit dem Objekt arbeiten. Hier mit der Ini:
Quelltext
1:
| Ini.WriteString('Abschnitt', 'Schuessel', Wert); |
Zum lesen:
Quelltext
1:
| Wert := Ini.ReadString('Abschnitt', 'Schuessel', 'ErsatzWert'); |
Dann muß man das Objekt frei geben, sonst kann dieser Ram-Bereich bis ende der Windowssitzung nicht mehr benutzt werden:
Wenn du das Objekt freigegeben hast, dann kannst du es nicht weiter nutzen. Die "Verbindung" ist gelöscht. Um weiter arbeiten zu können mußt du eine neue Instanz erstellen.
So, das nächste mal liest du dir das Tutorial aber richtig durch.
Das mit Try/Finally hab ich weggelassen, sonst wirst du noch mehr verwirrt.
Delete - Di 24.12.02 13:32
| Popov hat folgendes geschrieben: |
| Das mit Try/Finally hab ich weggelassen, sonst wirst du noch mehr verwirrt. |
Aber du hast es ja wemfalls noch erwähnt. Sollte man auf keinen Fall weglassen, wenn man vorhat sauber zu programmieren.
blazeR - Di 24.12.02 15:11
okok, ich gebs ja zu. hatte keine lust mich einzu arbeiten in das tutorial. Wollt das bis heute abend fertig haben und hab deshalb lieber alles gefragt :oops:.
Nun hab ich aber noch ein prob, dass nicht im tutorial drinsteht, wenn ich nicht irre :roll:. Und bitte nicht wieder meine Schreibweise bemängeln. Is erst mein 2tes geschriebenes Program,, ich schreib irgendwie immer alles durcheinander und komplizierter als es eigentlich ist..
Quelltext
1: 2: 3: 4:
| if timer5.Interval= 1200 then Ini := TIniFile.Create('C:\highscore.ini'); highscore:=label_punktzahl.caption; ini.WriteString('Schwierigkeit','einfach', highscore); |
Hier wird, wenn zb die variable highscore 8 ist, für alle schwierigkeitsgrade die selbe Zahl eingetragen. Ich würde aber gerne NUR den Schwierigkeitsgrad 'einfach' verändern und alle anderen sollen unberührt bleiben.
Visum - Di 24.12.02 17:06
ich würde hier noch ein begin ... end; einfügen, da sonst nur die eine Zeile in die Bedinung eingenommen ist.
Wenn ich das Problem richtig verstehe könnte es dadurch entstehen ;)
Quelltext
1: 2: 3: 4: 5: 6: 7:
| if timer5.Interval= 1200 then begin Ini := TIniFile.Create('C:\highscore.ini'); highscore:=label_punktzahl.caption; ini.WriteString('Schwierigkeit','einfach', highscore); ini.free; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!