To zalezy czy chodzi ci o przejście do procedury zamykajacej wywoływanej przy zamknięciu programu (wtedy po prosty wywołyjesz Close) czy chcesz tylko wykonać kod który zawiera ta procedura bez zamykania programu. W drugim przypadku najlepiej będzie zrobić tak:
procedure ProgClose;
begin
//jakieś tam rzeczy
end;
procedure Tform1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ProgClose;
end;
W procedurze ProgClose masz to co miałes wcześniej w FormClose i wywołujesz sobie ten kod z tej procedury.
[dopisane]
W zasadzie tak jak MatroX też może być (tyle ze troche więcej kodu). W sumie nie wiem czy to coś zmieni, ale dałbym nie caFree ale caNone.