Hola,
No sé yo si bastaría con estar pendiente del evento "OnTerminate" de la clase "Application" o tal vez del evento "OnClose" del formulario en cuestión... me temo que en caso de apagón ni si quiera podrías procesar el mensaje "
WM_QUERYENDSESSION", pues tal vez este ni se produzca...
Si la cuestión es "crítica", desde luego, lo mejor sería un aparato de esos que, en caso de apagón, precisamente, procuran cierta energía al ordenador para poder apagarlo sin mayores problemas; si no es esta la cuestión tal vez con los eventos mencionados arriba podrías solucionarla.