Entwickler-Ecke

Sonstiges (Delphi) - speichern von strings und variablen


Arctics - Mi 22.11.06 17:36
Titel: speichern von strings und variablen
das speichern von strings usw. wäre mir sehr hilfreich beim erstellen (z.B.) einer Highscoreliste


jasocul - Mi 22.11.06 17:38

Ich würde Dir den Einsatz von INI-Dateien empfehlen.


Leuchtturm - Mi 22.11.06 17:38


Delphi-Quelltext
1:
2:
3:
4:
5:
var
a: string;
begin
a := 'Hallo';
Label1.Caption := a;


oder mit einer Stringlist.
Leuchtturm

PS:Deine Probleme müsstest du mit der suche eigentlich auch finden :wink:


jasocul - Mi 22.11.06 17:39

Zur Ergänzung hier ein Link:
http://www.delphi-library.de/viewtopic.php?t=182&highlight=inifile


Leuchtturm - Mi 22.11.06 17:41

user profile iconjasocul hat folgendes geschrieben:
Ich würde Dir den Einsatz von INI-Dateien empfehlen.

na gut für eine Highscore wäre eine ini-Datei besser


Arctics - Mi 22.11.06 17:45

user profile iconLeuchtturm hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
var
a: string;
begin
a := 'Hallo';
Label1.Caption := a;


oder mit einer Stringlist.
Leuchtturm

PS:Deine Probleme müsstest du mit der suche eigentlich auch finden :wink:



ich habe vor eine highscore liste zu machen, wenn man dann seinen namen einträgt und das programm beendet und dann wieder aufruft wurde der name doch "vergessen" und genau dass sollte ja nicht passieren


Leuchtturm - Mi 22.11.06 17:48

user profile iconArctics hat folgendes geschrieben:
user profile iconLeuchtturm hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
var
a: string;
begin
a := 'Hallo';
Label1.Caption := a;


oder mit einer Stringlist.
Leuchtturm

PS:Deine Probleme müsstest du mit der suche eigentlich auch finden :wink:



ich habe vor eine highscore liste zu machen, wenn man dann seinen namen einträgt und das programm beendet und dann wieder aufruft wurde der name doch "vergessen" und genau dass sollte ja nicht passieren

dann schaue dir mal jasocul's Link [http://www.delphi-library.de/viewtopic.php?t=182&highlight=inifile] an


Arctics - Mi 22.11.06 17:51

user profile iconLeuchtturm hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
var
a: string;
begin
a := 'Hallo';
Label1.Caption := a;


oder mit einer Stringlist.
Leuchtturm

PS:Deine Probleme müsstest du mit der suche eigentlich auch finden :wink:



ich habe vor eine highscore liste zu machen, wenn man dann seinen namen einträgt und das programm beendet und dann wieder aufruft wurde der name doch "vergessen" und genau dass sollte ja nicht passieren


Leuchtturm - Mi 22.11.06 17:54

Hier [http://www.dsdt.info/tipps/?kat=33] gibt es auch noch was zum Thema ini dateien


Arctics - Mi 22.11.06 18:07

ich hab mir mal Das hier [http://www.dsdt.info/tipps/?id=104]
angeschaut um überhaupt mal was über ini zu erfahren - habs natürlich auch gleich ausprobiert:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.FormCreate(Sender: TObject);
var
  Ini: TIniFile;  //zeile37
begin
  try
    Ini:=TIniFile.Create('C:\Test.ini'); //zeile 40 usw.
    Ini.WriteString('Section','Schlüssel1','Wert');
    Ini.WriteInteger('Section','Schlüssel2',10);
    Ini.WriteBool('Section','Schlüssel3',True);
  finally
    Ini.Free;
  end;
end;

aber da kamen folgede probleme :
Zitat:
[Error] Unit1.pas(37): Undeclared identifier: 'TIniFile'
[Error] Unit1.pas(40): Missing operator or semicolon
[Error] Unit1.pas(40): Incompatible types: 'TComponent' and 'String'
[Error] Unit1.pas(41): Missing operator or semicolon
[Error] Unit1.pas(42): Missing operator or semicolon
[Error] Unit1.pas(43): Missing operator or semicolon
[Error] Unit1.pas(45): Missing operator or semicolon
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'



was hab ich denn falsch gemaccht?

Moderiert von user profile iconjasocul: Quote-Tags durch Delphi-Tags ersetzt


Marc. - Mi 22.11.06 18:14

Fehlermeldung markieren und F1 drücken ;)
Hast du nebenbei bemerkt, auch die Unit Inifiles in deinem Projekt mit eingebunden?

grüße marc


Arctics - Mi 22.11.06 18:18

user profile iconMarc. hat folgendes geschrieben:
Fehlermeldung markieren und F1 drücken ;)
Hast du nebenbei bemerkt, auch die Unit Inifiles in deinem Projekt mit eingebunden?

grüße marc



danke hat geklappt :D :)

aber nun müsste doch die datei test.ini in c:\ erstellt werden? oder hab ich da was fasch verstanden?


BerTeL - Mi 22.11.06 19:08

Genau du hast es erfasst ... und um es irgendwo anders zu speichern einfach anstatt C:\ C:\xyz\ eingeben ...


Arctics - Mi 22.11.06 19:22

ja, aber das ist nicht da :(


Popov - Mi 22.11.06 19:25

Hier ein kleines Beispiel. Die INI wird im gleichen Verzeichnis wie das Programm automatisch erstellt, Du mußt nichts machen. Für das Beispiel habe ich meine Unit "EasyIniAppExe.pas" benutzt. Die findest du hier: http://www.delphi-forum.de/viewtopic.php?p=127274#127274 . Ich hoffe du weißt wie man eine Unit einbindet?

Der Rest ist einfach. Zuerst erstellen wir Beispieldateien:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
uses
  EasyIniAppExe;

type
  THighScore = Record
    Name: String;
    Points: Integer;
  end;

var
  HighScore: Array[1..3of THighScore;


Dann Beispiel für das Sichern:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  //Beispielwerte

  HighScore[1].Name := 'Paul';
  HighScore[1].Points := 24566;
  HighScore[2].Name := 'Klaus';
  HighScore[2].Points := 12534;
  HighScore[3].Name := 'Jörg';
  HighScore[3].Points := 42134;

  // Sichern mit EasyIniAppExe

  // Zuerst alle HighScore Werte in der Ini löschen. Wir sichern alles zusammen; ist besser.
  EraseIniSection('HighScorePunkte');

  // Jetzt speichern
  for i := 1 to 3 do
    WriteIniInteger('HighScorePunkte', HighScore[i].Name, HighScore[i].Points);
end;


Jetzt noch das Zurücklesen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
procedure TForm1.Button2Click(Sender: TObject);
var
  sl: TStringList;
  i: Integer;
begin
  // Laden mit EasyIniAppExe

  // Zuerst alle alten Werte im Array löschen und kurz prüfen ob wirklich leer.
  for i := 1 to 3 do
  begin
    HighScore[i].Name := '';
    HighScore[i].Points := 0;
    with HighScore[i] do ShowMessage(Format('Nur Test!!!!! Platz %d: %s, %d', [i, Name, Points]));
  end;

  // Jetzt holen wir wieder die Werte aus der Ini zurück
  sl := TStringList.Create;
  try
    ReadIniSection('HighScorePunkte', sl);
    for i := 0 to sl.Count - 1 do
    begin
      HighScore[i+1].Name := sl[i];
      HighScore[i+1].Points := ReadIniInteger(sl[i], 'Points', -1);
    end;
  finally
    sl.Free;
  end;

  // Jetzt testen wir den Array Inhalt neu
  for i := 1 to 3 do
    with HighScore[i] do ShowMessage(Format('Platz %d: %s hat %d Punkte', [i, Name, Points]));

end;