Einzelnen Beitrag anzeigen

Geri

Registriert seit: 23. Nov 2004
Ort: Feldkirch
47 Beiträge
 
Delphi 2005 Personal
 
#19

Re: Referzen in ein Stream speichern

  Alt 15. Sep 2006, 12:38
Hallo Hagen

Du bist wirklich spitze!! Vielen Dank! Ich glaube, nun kratze ich doch nochmal die Kurve.

Der code liess sich mit zwei Ausnahmen compilieren einmal ein Tippfehler und einmal die Meldung
[Fehler] uHagen2.pas(70): E2015 Operator ist auf diesen Operandentyp nicht anwendbar
im folgenden COde bei "if not (AClasses[I] is TBaseClass) then"

Delphi-Quellcode:

procedure RegisterBaseClasses(const AClasses: array of TBaseClass);
var
  I: Integer;
begin
  Assert(FClassList <> nil);

  for I := Low(AClasses) to High(AClasses) do
   if not (AClasses[I] is TBaseClass) then
      raise Exception.Create('ungültige Klasse in RegisterBaseClasses')
    else
      if GetBaseClass(AClasses[I].ClassName) <> nil then
        raise Exception.CreateFmt('eine Klasse mit Namen "%s" ist schon registriert', [AClasses[I].ClassName])
      else
        FClassList.Add(AClasses[I]);
end;
Deshalb habe ich den Teil ausser "FClassList.Add(AClasses[I]);" ausgeklammert

Dann habe ich eine Beispiel geschrieben. Es werden 10 Punkte und fünf Kanten erzeugt. Das Schreiben und das Lesen der Punkte klappt. Nur sind in der Liste nach dem Auslen 15 Punkte drin. Die restlichen 5 Punkte haben deshalb nicht definierte Werte. Hmmm??

Die Katenliste ist nach dem Laden auch leer. KantenListe.count = 0. Hast du bitte vielleicht noch eine Idee an was es liegen könnte.

Delphi-Quellcode:
procedure TForm6.Button1Click(Sender: TObject);
var i:Byte;
    P:TPoint;
    K:TKante;
Begin
   PunkteListe:=TList.Create;
   KantenListe:=TList.Create;

   // erzeuge 10 zufällige Punkte
   for i:=0 TO 9 Do
   Begin
      P:=TPoint.create();
      P.X:=i;
      P.y:=i;
      memo1.lines.Add('Init Punkt ' + IntToStr(i) + ' ' + IntToStr(P.x) + ' ' + IntToStr(P.y));
      PunkteListe.Add(p);
   End;

   // Erzeuge 4 zufällige Kanten
   For i:=0 TO 4 Do
   Begin
      K:=TKante.Create();
      K.Start:=PunkteListe[Random(9)];
      K.Stop:=PunkteListe[Random(9)];
      memo1.lines.Add('Init Kante ' + IntToStr(i));
      KantenListe.Add(k);
   End;

   SaveToFile('C:\test.txt'); // schreibe Punkte und Katen in ein File
   PunkteListe.Clear;
   KantenListe.Clear;

   LoadFromFile('C:\test.txt'); // lade Punkte und Katen aus einem File
//------------ zeige Punkte --------------------
   For i:=0 TO PunkteListe.count-1 Do
   Begin
      P:=PunkteListe[i];
      memo1.lines.Add('Gelesen Punkt ' + IntToStr(i) + ' ' + IntToStr(P.x) + ' ' + IntToStr(P.y));
   end;

//------------ zeige Kanten --------------------
   For i:=0 TO KantenListe.count-1 Do
   Begin
      K:=KantenListe[i];
      memo1.lines.Add('Gelesen Kante ' + IntToStr(i) + ' ' + IntToStr(K.Start.x) + ' ' + IntToStr(K.Start.y));

  end;

end;
Beste Grüsse und vielen Dank

Geri
PS: Könntest doch mal vieleicht ein Buch über das Thema schreiben... Reich wird man davon nicht, aber es macht auch Spass. Wenn Deine Beiträge alle so lange sind, dann liegt der Inhalt ja schon vor
Gerhard
  Mit Zitat antworten Zitat