Bei OnCloseQuery kannst du festlegen, ob das Fenster überhaupt geschlossen wurde.
Wenn Du einen Unterschied zwischen 'Kreuzklick' und 'Abbrechen' machen willst, dann weise dem ModalResult des Abbrechen-Buttons einen anderen Wert zu und prüfe dies im OnClose;
Delphi-Quellcode:
Procedure TForm1.FormClose (Sender : TObject)
Begin
Case ModalResult Of
mrCancel : // Kreuz geklickt
mrIrgendwass : // Dein Button
else ... // OK, oder ein anderer Buttoni
End;
End;
Denkbar wäre auch (schon erwähnt?) das im Click-Ereignis des 'Abbrechen'-Buttons ein Flag gesetzt wird und du das dann im FormClose abfragst. Du kannst auch im Click-Ereignis des Buttons das FormClose-Ereignis des Formulars auf Nil setzen, dann wird FormClose eben nicht aufgerufen...