No es que sea una pavada sino que es un método más de aplicaciones DOS que de Windows. Lo normal sería que usaras una ventana modal (sea con ShowMessage o una ventana propia) para mostrar el mensaje de error. La aplicación no continuará mientras no se cierre dicha ventana.
De todas formas creo que puedes lograr el efecto que quieres de la siguiente manera.
Declara una variable Esperar, de tipo Booleano, en tu formulario. Coloca una componente ApplicationEvents y en su evento OnMessage pones:
Código:
if Esperar then
begin
Esperar := Msg.message <> WM_KEYDOWN;
Handled := true;
end;
Cuando vayas a mostrar el mensaje lo haces así:
Código:
Panel1.Caption := 'Espere...';
Panel1.Refresh;
Esperar := true;
Panel1.Caption := 'Gracias!';
Tan pronto asignes
true a Esperar, el evento OnMessage se comerá todos los mensajes que se envían a la aplicación (con el efecto de desactivarla) y sólo volverá a responder hasta recibir el mensaje WM_KEYDOWN (tecla oprimida).
Bye