Hallo Lee,
ich hab das mal 1:1 kopiert.
Bei mir wurde das nicht kompiliert, weil in der Prozedur ReadRecord hinter
New(hDreieck)
das Semikolon fehlt.
Nach Hinzufügen des Semikolons lief das einwandfrei.
Ich habe die Daten aus #28 ins Clipboard kopiert und in Button2Click in list gestellt.
Nach Ausführen von Button2Click habe ich die Daten mit CopyDreiecke in Log.txt geschrieben.
Ergebnis : Alle Werte sind identisch mit den Originalwerten.
Dann habe ich die Daten aus #28 in eine Datei gestellt und in Button2Click aus dieser Datei in list geladen.
Nach Ausführen von Button2Click habe ich die Daten mit CopyDreiecke in Log.txt geschrieben.
Ergebnis : Alle Werte sind identisch mit den Originalwerten.
Da das, was du gepostet hast, so wie es war (fehlendes Semikolon), nicht kompiliert wurde, kann ich nicht so recht glauben, dass das die Version war, die bei dir fehlerhafte Ergebnisse brachte, denn die hätte ja gar nicht laufen können.
Aber vielleicht hast du ja so einen Zauberkompiler, der fehlende Semikola toleriert – kann ich aber auch nicht glauben.
Was mir noch auffiel:
Erstens:
Oberhalb der Prozeduren deklarierst du einen Typ
hDreieck=^TDreieck
.
In der Prozedur ReadRecord deklarierst du eine Variable
hDreieck=^TDreieck
.
Das ist zwar unkritisch aber unschön.
Sinnvoller wäre, die Variable als z.B.
Dreieck:hDreieck
zu deklarieren.
Zweitens:
Im Except Block in Button2Click schreibst du Dreiecke:=nil;
Wenn es tatsächlich zu einer
Exception kommt erzeugst du damit schöne Memory Leaks.
Richtig wäre.
Delphi-Quellcode:
for i:=0 to Dreiecke.Count-1 do Dispose(Dreiecke[i]);
Dreiecke.Free;
Drittens:
Du lädtst eine Datei deren Namen du aus OpenDialog.Filename entnimmst.
Kann es sein, dass da ein anderer Dateiname steht, als du vermutest ?