Para conseguir lo que deseas, debes emplear el evento OnCloseQuery:
Código Delphi
[-]procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if IDYES = MessageBox(Handle,'¿Desea cerrar?','Advertencia',MB_YESNO)
then CanClose := True
else Canclose := False;
end;
Este evento se dispara en el momento de la orden del cierre del formulario y tiene un parámetro por valor (CanClose) que permite determinar si debe o no cerrarse. Si el valor es verdadero, se ejecuta el evento OnClose que corresponde al cierre, si se pone en falso, se cancela el cierre.
MessageBox() es una función que permite mostrar en pantalla un cuadro de díalogo. Y regresa un valor que representa la acción del botón pulsado.
Por ejemplo: la constante MB_YESNO, pemite mostrar dos botones: SI y NO. Y dependiendo de cual botón se pulse... se devuelve un valor que comparo con IDYES. Si es igual... se que se ha oprimido el botón SI.
Fijate y estudia el evento onCloseQuery. Deberás codificar que hacer ante la orden SI o ante la orden NO.
Saludos,