Registriert seit: 20. Jan 2011
Ort: Leipzig
15 Beiträge
Turbo Delphi für Win32
|
Problem bei Speichen von Filestream
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)
|