Einzelnen Beitrag anzeigen

Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

Eigener Typ + TIniFile = Fehler????

  Alt 28. Jan 2005, 20: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...«
  Mit Zitat antworten Zitat