Autor Beitrag
blazeR
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mo 23.12.02 23:38 
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!
BungeeBug
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 901



BeitragVerfasst: Di 24.12.02 07:49 
Hi

also am einfachsten is es in na INI-Dateil und wie das geht kommt nach der nächsten Maus :P

[maus]

www.tutorials.delphi-source.de/ini/
und wenn du was fürs Leben lernen willst machst dus mit nem Datei-Stream ...
www.tutorials.delphi-source.de/stream/

ich denke das sollte dein Problem lösen ...


Frohe Weihnachten euch allen ....

MfG BungeeBug
blazeR Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: Di 24.12.02 12:27 
Hi,
eine INI Datei ist immer in Sektoren eingeteilt.
der Befehl heißt also z.B.
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: 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 ;)
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button1Click(Sender: TObject); 
begin 
ini.WriteString('Mittel','Name',test); 
ini.free; 
close; 
end;
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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?

ausblenden 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:

ausblenden Quelltext
1:
uses ..., IniFiles;					


Wenn man mit Ojekten arbeiten will, dann braucht man auch eine Objektvariable. Wir brauchen eine TIniFile Variable:

ausblenden Quelltext
1:
2:
var
  Ini: TIniFile;


Vor dem Arbeiten mit Objekten muß man eine Instanz erstellen. Hier im Beispiel für die Ini:

ausblenden 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:

ausblenden Quelltext
1:
  Ini := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'))					


Dann kannst du mit dem Objekt arbeiten. Hier mit der Ini:

ausblenden Quelltext
1:
  Ini.WriteString('Abschnitt', 'Schuessel', Wert);					


Zum lesen:

ausblenden 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:

ausblenden Quelltext
1:
  Ini.Free;					


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.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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..
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: 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 ;)
ausblenden 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;