Deine Objekte brauchen kein Canvas-Property.
Der Canvas wird nur beim Rendern benötigt, übergib den dort als Parameter.
type TObjekt = class(TObject)
Diese Namensähnlichkeit ruft geradezu nach Fehlern.
Delphi-Quellcode:
Blockwrite(Datei, Datenarray, Max);
{...}
So werden keine Objekte sondern nur Zeiger auf diese gespeichert.
Entsprechend werden dann auch nur ungültige Zeiger geladen.
Das Speichern und Laden von Objekten ist deutlich komplexer.
Sie dir dazu die Klassen TPersistent, TWriter, TReader und eventuell TComponent genauer an.