Einzelnen Beitrag anzeigen

Klausi1305

Registriert seit: 20. Jan 2011
Ort: Leipzig
15 Beiträge
 
Turbo Delphi für Win32
 
#1

Problem bei Speichen von Filestream

  Alt 20. Jan 2011, 19:11
Hallo,

Ich fingere zur Zeit an einem Simulator für die Berrechnung von Gefechten rum. Ich erstelle zu erst ein Objekt Einheit und will es später weiterverwenden.
Ich wollte bis jetzt die Sache in einem TFilestream verwenden. jedoch scheint es Probleme beim Speichern des Streams zu geben.
Ich lese von Comboboxen den gewählten Itemindex aus und wandle diese in einen String um und übergebe diese Variable an mein Objekt...(Ich weiss nicht wie ich direkt Integerwerte in einen Streaj speicher). Dies läuft auch einwandfrei..Trotz zig maliger Beobachtung der Speicherung im Debugger,welches auch scheinbar das macht, was es soll, werden irgendwie auf mir unersichtliche Weise die Werte "um eine Position" verschoben. Bsp aus Combobox6 wird der Index 4 in der Variable eigentlich gespeichert, jedoch beim laden hat Combobox6 den Wert 0 dafür aber Combobox7 den Wert....

Ich bin am verzweifeln...
Ich verwende Turbo Delphi 2006 und Vista

alle Variablen sind vom Typ AnsiString....

Hier die Procedure zum Speichern der Werte ins Object und dessen Speicherung in einen TFilestream:


Delphi-Quellcode:
//Einstellungen speichern
procedure TForm2.Button1Click(Sender: TObject);

var Einheit : TEinheitTyp;
    Stream : TFilestream;
    i : Integer;
    S : String;

begin

   Einheit:= TEinheittyp.Create; // neues Exemplar muss in die Liste
   Einheit.Init;
   //NeuerEinheitTyp.SetzeName(Edit1.Text);
   Einheit.SetzeName(Form2.Edit1.Text);
   Einheit.SetzeGrundTyp(IntToStr(ComboBox1.ItemIndex));
   Einheit.SetzeGeschwindigkeit(IntToStr(ComboBox2.ItemIndex));
   Einheit.SetzeBenzinGef(IntToStr(ComboBox3.ItemIndex));
   Einheit.SetzeBenzinBew(IntToStr(ComboBox4.ItemIndex));
   Einheit.SetzeMunGef(IntToStr(ComboBox5.ItemIndex));
   Einheit.SetzeGrösse(IntToStr(ComboBox13.ItemIndex));
   //Schreiben Landeinheit Werte
   Einheit.SetzePanzerAn(IntToStr(ComboBox6.ItemIndex));
   Einheit.SetzePanzerVer(IntToStr(ComboBox7.ItemIndex));
   Einheit.SetzeInfAn(IntToStr(ComboBox8.ItemIndex));
   Einheit.SetzeInfVer(IntToStr(ComboBox9.ItemIndex));
   Einheit.SetzeBoLuAn(IntToStr(ComboBox10.ItemIndex));
   Einheit.SetzeBoLuVer(IntToStr(ComboBox11.ItemIndex));
   Einheit.SetzeLandSpez(IntToStr(ComboBox12.ItemIndex));
   //Schreiben Lufteinheiten Werte;
   Einheit.SetzeLuLuAn(IntToStr(ComboBox14.ItemIndex));
   Einheit.SetzeLuLuVer(IntToStr(ComboBox15.ItemIndex));
   Einheit.SetzeLuBoAn(IntToStr(ComboBox16.ItemIndex));
   Einheit.SetzeLuBoVer(IntToStr(ComboBox17.ItemIndex));
   //Schreiben Marineeinheiten Werte;
   Einheit.SetzeSeeSeeAn(IntToStr(ComboBox18.ItemIndex));
   Einheit.SetzeSeeSeeVer(IntToStr(ComboBox19.ItemIndex));
   Einheit.SetzeSeeLuftAn(IntToStr(ComboBox20.ItemIndex));
   Einheit.SetzeSeeLuftVer(IntToStr(ComboBox21.ItemIndex));
   Einheit.SetzeSeeSpez(IntToStr(ComboBox22.ItemIndex));

   //Schreiben in Datei mit Filestream
   Stream := TFileStream.Create(Form1.programmpfad+'\Einheittyp\'+Einheit.GibName, fmCreate);
   Einheit.InDateiSchreiben(Stream,Form1.programmpfad+'\Einheittyp\'+Einheit.GibName);
   Stream.Free;
   Einheit.Free;
Hier die Procedure aus der Klasse Einheittyp zum speichern

Delphi-Quellcode:
procedure TEinheitTyp.InDateiSchreiben (var Fs : TFilestream; Filename : String);
(* -------------------------------------------------------------------- *)
var
   len : integer;

begin
  DeleteFile(Filename);
  //Allgemeine Werte
  FS.Position:=0;
   Len:=0;
  Len := Length(Name);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(Name)^, Len);
    Len:=0;
  Len := Length(GrundTyp);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(GrundTyp)^, Len);
    Len:=0;
  Len := Length(Geschwindigkeit);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(Geschwindigkeit)^, Len);
    Len:=0;
  Len := Length(BenzinGef);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(BenzinGef)^, Len);
     Len:=0;
   Len := Length(BenzinBew);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(BenzinBew)^, Len);
     Len:=0;
  Len := Length(MunGef);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(MunGef)^, Len);
     Len:=0;
  Len := Length(Grösse);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(Grösse)^, Len);
    Len:=0;
  Len := Length(BenzinGef);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(BenzinGef)^, Len);
     Len:=0;
  //Landeinheitwerte
  Len := Length(PanzerAn);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(PanzerAn)^, Len);
     Len:=0;
  Len := Length(PanzerVer);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(PanzerVer)^, Len);
         Len:=0;
  Len := Length(InfAn);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(InfAn)^, Len);
       Len:=0;
   Len := Length(InfVer);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(InfVer)^, Len);
     Len:=0;
  Len := Length(BoLuAn);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(BoLuAn)^, Len);
   Len:=0;
  Len := Length(BoLuVer);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(BoLuVer)^, Len);
    Len:=0;
  Len := Length(LandSpez);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(LandSpez)^, Len);
    Len:=0;
  //Lufteinheitwerte
  Len := Length(LuLuAn);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(LuLuAn)^, Len);
    Len:=0;
  Len := Length(LuLuVer);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(LuLuVer)^, Len);
    Len:=0;
  Len := Length(LuBoAn);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(LuBoAn)^, Len);
    Len:=0;
   Len := Length(LuBoVer);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(LuBoVer)^, Len);
    Len:=0;
  //Marineeinheitwerte
  Len := Length(SeeSeeAn);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(SeeSeeAn)^, Len);
     Len:=0;
  Len := Length(SeeSeeVer);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(SeeSeeVer)^, Len);
     Len:=0;
  Len := Length(SeeLuftAn);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(SeeLuftAn)^, Len);
     Len:=0;
   Len := Length(SeeLuftVer);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(SeeLuftVer)^, Len);
     Len:=0;
  Len := Length(SeeSpez);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(SeeSpez)^, Len);

end;
und hier die zum lesen aus der Klasse Einheittyp
Delphi-Quellcode:
procedure TEinheitTyp.AusDateiLesen (var Fs : TFilestream) ;
(* -------------------------------------------------------------------- *)
var
   len : integer;
begin
  Len:=0;
  //Allgemeine Werte
  FS.read(Len, SizeOf(Len));
  SetLength(Name, Len);
  FS.read(PChar(Name)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(GrundTyp, Len);
  FS.read(PChar(GrundTyp)^, Len);
   Len:=0;
   FS.read(Len, SizeOf(Len));
  SetLength(Geschwindigkeit, Len);
  FS.read(PChar(Geschwindigkeit)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(BenzinGef, Len);
  FS.read(PChar(BenzinGef)^, Len);
  Len:=0;
   FS.read(Len, SizeOf(Len));
  SetLength(BenzinBew, Len);
  FS.read(PChar(BenzinBew)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(MunGef, Len);
  FS.read(PChar(MunGef)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(Grösse, Len);
  FS.read(PChar(Grösse)^, Len);
  Len:=0;
  //Landeinheitwerte
  FS.read(Len, SizeOf(Len));
  SetLength(PanzerAn, Len);
  FS.read(PChar(PanzerAn)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(PanzerVer, Len);
  FS.read(PChar(PanzerVer)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(InfAn, Len);
  FS.read(PChar(InfAn)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(InfVer, Len);
  FS.read(PChar(InfVer)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(BoLuAn, Len);
  FS.read(PChar(BoLuAn)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(BoLuVer, Len);
  FS.read(PChar(BoLuVer)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(LandSpez, Len);
  FS.read(PChar(LandSpez)^, Len);
  Len:=0;
  //Lufteinheitwerte
  FS.read(Len, SizeOf(Len));
  SetLength(LuLuAn, Len);
  FS.read(PChar(LuLuAn)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(LuLuVer, Len);
  FS.read(PChar(LuLuVer)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(LuBoAn, Len);
  FS.read(PChar(LuBoAn)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(LuBoVer, Len);
  FS.read(PChar(LuBoVer)^, Len);
   Len:=0;
  //Marineeinheitenwerte
  FS.read(Len, SizeOf(Len));
  SetLength(SeeSeeAn, Len);
  FS.read(PChar(SeeSeeAn)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(SeeSeeVer, Len);
  FS.read(PChar(SeeSeeVer)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(SeeLuftAn, Len);
  FS.read(PChar(SeeLuftAn)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(SeeLuftVer, Len);
  FS.read(PChar(SeeLuftVer)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(SeeSpez, Len);
  FS.read(PChar(SeeSpez)^, Len);
end;
Sebastian

Geändert von Klausi1305 (20. Jan 2011 um 20:11 Uhr)
  Mit Zitat antworten Zitat