if messageDLG('wollen Sie die vorhandenen "'+inttostr(Objekte.Count)+'" Objekte überschreiben',mtConfirmation,[mbYes,mbNo],0) = mrno then weiter:=False;
Hier muss noch der Fall abgefangen werden, wenn kein Button, sondern das Kreuz zum Schließen verwendet wird.
OB:=Objekte[0];
Ist OB eine globale Variable? Würde ich an dieser Stelle auf keinen Fall machen. Wer weiß, was dann an anderer Stelle im Programm möglicherweise in OB steht.
Es ist nicht sichergestellt, dass Objekte überhaupt einen Wert hat. Ich würde mindestens eine Prüfung mit
assigned
erwarten.
Die kritischen Stellen sind ohne try..except/finally.
Du schreibst auch nicht, mit welcher Meldung das Programm abstürzt. Mit einem
Exception-Handling könntest du vermutlich noch mehr Infos bekommen.
Das Löschen der Objekte wirkt auch etwas merkwürdig. Vom
Objekte.Clear
würde ich erwarten, dass es sich um die Freigabe der Objektliste kümmert. Läuft hier vielleicht irgendwas doppelt und der Absturz resultiert aus der Doppelbehandlung?