Die Zugriffsverletzung kommt weil nach dem ShowModal auf das Formular zugegriffen wird welches du aber innerhalb des ShowModal zerstörst. Du musst also einfach das Formular normal schließen und nach dem ShowModal das Formular frei geben.
Delphi-Quellcode:
DeinFormular.ShowModal();
DeinFormular.Release();
nicht
Delphi-Quellcode:
DeinFormular.ShowModal();
[...]
procedure DeinFormular.Irgendwas();
begin
Self.Free;
end;