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