@xaromz: Das stimmt auch, aber _der_ Fehler ist an einer anderen Stelle.
@meisteralex: Ich glaube, du hast eine ziemlich wichtige Eigenschaft von Klassen noch nicht verstanden: Es sind immer Referenztypen. Wenn du also eine Variable einer Klasse hast, hast du eigentlich nur einen Zeiger, der auf die echte Instanz irgendwo im Arbeitsspeicher zeigt.
Delphi-Quellcode:
ScreenToFile:=screenimage;
screenimage.Free;
Hier hast du demnach nicht zwei verschiedene Objekte, sondern zwei Zeiger auf dasselbe Objekt. Wenn du dieses nun freigibst, zeigt der andere Zeiger natürlich nur noch auf Datenmüll ->
AV.
Letzten Endes erschaffst du außerdem ein Speicherleck, weil du das alte Image nicht freigibst.