Hacer parpadear el caption de un formulario

2914 vistas

Para notificar al usuario que la aplicación espera una intervención por su parte (confirmación de un mensaje, evento a validar,....) cuando la aplicación no tiene el foco, podemos hacer parpadear la ventana usando el API FlashWindow. El primer parámetro que espera la función es el handle de la ventana y el segundo un booleano que indica si tiene que hacerse o no el parpadeo.

Para ello usaremos un TTimer en el que estableceremos su propiedad Interval a 500ms y codificaremos su evento OnTimer de la siguiente manera:



delphi
  1. FlashWindow(Form1.Handle,True);



También podemos crear una clase que encapsule esta API



delphi
  1. TFlasher = class
  2.     private
  3.       FTimer : TTimer;
  4.       FHandle : Cardinal;
  5.       procedure DoFlash(Sender : TObject);
  6.     public
  7.       procedure StartNotify;
  8.       procedure EndNotify;
  9.       constructor Create(ObjectToFlash : TWinControl; AInterval : Cardinal = 500);
  10.       destructor Destroy;
  11.   end;
  12.  
  13. { TFlasher }
  14.  
  15. procedure TFlasher.DoFlash(Sender : TObject);
  16. begin
  17.   FlashWindow(FHandle,True);
  18.   FlashWindow(Application.Handle,True);
  19. end;
  20.  
  21. constructor TFlasher.Create(ObjectToFlash : TWinControl; AInterval: Cardinal);
  22. begin
  23.   FTimer := TTimer.Create(nil);
  24.   FTimer.Enabled := False;
  25.   FTimer.Interval := AInterval;
  26.   FTimer.OnTimer := DoFlash;
  27.   FHandle := ObjectToFlash.Handle;
  28. end;
  29.  
  30. destructor TFlasher.Destroy;
  31. begin
  32.   if Assigned(FTimer) then FreeAndNil(FTimer);
  33. end;
  34.  
  35. procedure TFlasher.EndNotify;
  36. begin
  37.   FTimer.Enabled := False;
  38.   FlashWindow(FHandle, False);
  39. end;
  40.  
  41. procedure TFlasher.StartNotify;
  42. begin
  43.   FTimer.Enabled := True;
  44.   DoFlash(nil);
  45. end;
  46.  
  47. Function TFlasher.Actif:Boolean;
  48. begin
  49.   Result:=FTimer.Enabled;
  50. end;



Después de la creación, arrancaremos la notificación haciendo una llamada al método StartNotify y lo pararemos con EndNotify.