Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Objekt und Filestream... Wie Passt Daaas??? (https://www.delphipraxis.net/95632-objekt-und-filestream-wie-passt-daaas.html)

LDericher 10. Jul 2007 18:45


Objekt und Filestream... Wie Passt Daaas???
 
Delphi-Quellcode:
var fs:TFileStream;
begin
Raum.Short:='Caravan';
Raum.Long.Text:='Ein ziemlich abgenutzter Caravan';
  try
     begin
     fs:=TFileStream.Create(dir+'\data\rooms\caravan.ro', fmCreate or fmShareDenyNone);
     fs.Write(Raum, SizeOf(Raum));
     end;
  finally fs.Free;
  end;

Raum.Short:='';
Raum.Long.Text:='';

  try
    begin
    fs:=TFileStream.Create(dir+'\data\rooms\'+Figur.LOC, fmOpenRead or fmShareDenyNone);
    fs.Read(Raum, SizeOf(Raum));
    end;
  finally fs.Free;
  end;
end;

Ausgabe.Text:=Raum.Short   +#13#10+#13#10
             +Raum.Long.Text+#13#10+#13#10
             +Ausgabe.Text;
Das ganze gehört in ein Spiel und soll einen Raum laden
(Zumindest diese Funktion des Raum-Ladens testen, aber im Memofeld'Ausgabe' steht nach Ausführen dieses Codes gar nichts, bis auf 4 Zeilenumbrüche...) :kotz:

Aber wie zum Teufel lädt man ein Objekt richtig aus einer Datei?
Und wie zum Teufel speichert man ein Objekt richtig in eine Datei?

Mein Raum-Objekt sieht folgendermaßen aus:
Delphi-Quellcode:
type TRaum=class
           Short:string;     //Beschreibungen
           Long,
           Trigger_Info,
           Give_Info:TStringList;

           //1=Norden
           //2=Osten
           //3=Süden
           //4=Westen
           Exit_true:array[1..4]of boolean;
           Exit:array[1..4]of string[255];

           IsNPC:boolean;
           NumNPCs:ShortInt;
           NPC:array[1..10]of string[255];
           NPCList:TStringList;

           IsMonsterLock:boolean;
           MonsterLock:string[255];

           constructor Create;
           procedure GoExit(Ausgang:integer; Raum:TRaum; Ausgabe:TMemo; Go:array of Tleer_Button);
           procedure GetNPC;
           procedure GoIn(Raum:TRaum; Ausgabe:TMemo; Go:array of Tleer_Button);
           function Kampf(Enemy:string):boolean;
           function SearchString(SearchIn:String;
                    SearchFor:TStringList):TIntBool;
           function Analyze_Input(Input:string):string; //Rückgabewert=Output
           end;

Für weitere (detailliertere) Fragen zu meinem Problem bin ich immer offen :coder:

sirius 10. Jul 2007 19:08

Re: Objekt und Filestream... Wie Passt Daaas???
 
So geht das mal nicht.

Du musst schon jede Variable selber speichern. Am besten ist, du machst dir im dem Raum zwei Methoden die alle Variablen in einen Stream speichern bzw. laden.

Ich habe zwar hier eine Funktion, die automatisch alle Variablen einer Klasse speichern kann, allerding speichert sie deine TStrings nicht mit.

Ich bin zwar grad dabei eine Klasse zu schreiben, von der man dann ableiten kann, die dann schon eine speichern und laden Methode mitbringt. Aber mir fehlt grad die Zeit das zu Ende zu bringen.

LDericher 11. Jul 2007 10:13

Re: Objekt und Filestream... Wie Passt Daaas???
 
Ich werde das so schreiben, dass ich eine speichern/laden Methode implementiere, die über einen temporären Record läuft.

Die StringListen kann ich dann ja per loadfrom/savetofile direkt in diesen Methoden speichern

________________________________
:coder: *bääääääääääm*


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz