Registriert seit: 16. Mär 2004
2.287 Beiträge
|
Eigener Typ + TIniFile = Fehler????
28. Jan 2005, 21:21
also, ich versuche einen eigenen typ in eine inifile zu speichern
aber irgendwie is das resultat "anders als gewünscht"...
erst mal was code:
der typ bzw die typen
Delphi-Quellcode:
TEuroMuenze = record
Vorhanden: Boolean;
Wert: Integer;
Kommentar: String;
end;
TEuroLand = record
Name: String;
Abk: String;
Muenzen: array of TEuroMuenze;
MuenzenCount: Integer;
end;
TProfil = record
Land: array of TEuroLand;
LandCount: Integer;
IsChanged: Boolean;
end;
konstanten
Delphi-Quellcode:
const
STD_LAND = 12; //Länder
STD_MUENZEN = 8; //Münzen
STD_WERTE: array [1..STD_MUENZEN] of Integer = (1, 2, 5, 10, 20, 50, 100, 200);
STD_ABK: array[1..STD_LAND] of String = (
'A','B','D','E','F','FIN','GR','I','IRL','L','NL','P');
STD_LAENDER: array[1..STD_LAND] of String = (
'Österreich','Belgien','Deutschland','Spanien','Frankreich','Finnland',
'Griechenland','Italien','Irland','Luxemburg','Niederlande','Portugal');
var
Form1: TForm1;
AktProfil: TProfil;
erzeugen
Delphi-Quellcode:
procedure TForm1.NeuesProfil1Click(Sender: TObject);
var i,j:Integer;
begin
if AktProfil.IsChanged then
begin
ProfilSpeichern1Click(Form1);
SetLength(AktProfil.Land,STD_LAND);
AktProfil.LandCount:=STD_LAND;
for i:=1 to STD_LAND do
begin
SetLength(AktProfil.Land[i].Muenzen,STD_MUENZEN);
AktProfil.Land[i].Name:=STD_LAENDER[i];
AktProfil.Land[i].Abk:=STD_ABK[i];
for j:=1 to STD_MUENZEN do
begin
AktProfil.Land[i].Muenzen[j].Kommentar:='';
AktProfil.Land[i].Muenzen[j].Wert:=STD_WERTE[j];
AktProfil.Land[i].Muenzen[j].Vorhanden:=False;
AktProfil.Land[i].MuenzenCount:=STD_MUENZEN;
end;
end;
end;
end;
uns speichern
Delphi-Quellcode:
procedure TForm1.SaveProfil(FileName: TFileName);
var SaveFile: TIniFile;
temp:TStrings;
i, j:Integer;
begin
//Leeren
SaveFile:=TIniFile.Create(FileName);
temp:=TStrings.Create;
try
//Speichern
SaveFile.WriteInteger('Profil','Laender',AktProfil.LandCount);
SaveFile.WriteBool('Profil','Laender',AktProfil.IsChanged);
ShowMessage(IntToStr(AktProfil.LandCount));
for i:=1 to AktProfil.LandCount do
begin
ShowMessage(IntToStr(i));
SaveFile.WriteString('Land'+IntToStr(i),'Name',AktProfil.Land[i].Name);
SaveFile.WriteString('Land'+IntToStr(i),'Abk',AktProfil.Land[i].Abk);
SaveFile.WriteInteger('Land'+IntToStr(i),'Muenzen',AktProfil.Land[i].MuenzenCount);
for j:=1 to AktProfil.Land[i].MuenzenCount do
begin
SaveFile.WriteBool('Land'+IntToStr(i),'ExMuenze'+IntToStr(j),AktProfil.Land[i].Muenzen[j].Vorhanden);
SaveFile.WriteInteger('Land'+IntToStr(i),'ValMuenze'+IntToStr(j),AktProfil.Land[i].Muenzen[j].Wert);
SaveFile.WriteString('Land'+IntToStr(i),'Muenze'+IntToStr(j),AktProfil.Land[i].Muenzen[j].Kommentar);
end;
end;
finally
Temp.Free;
SaveFile.Free;
end;
end;
aber warum zum teufel ist die inifile danach nur mit der profil-section gefüllt???
ich habe die variable erzeugt und befüllt, aber die inifile bleibt vergleichsweise gefüllt.
warum?
LandCount ist 0, dabei sage ich AktProfil.LandCount:=STD_LAND;
was soll das?? was mache ich falsch???
(ich hoffe ich erschlag euch mit dem code nicht.. )
»Unlösbare Probleme sind in der Regel schwierig...«
|