Recherche
1 connecté

  Utilisation de Application.OnMessage

GERER LES MESSAGES WINDOWS

INTERCEPTION DE TOUS LES MESSAGES DE A NOTRE APPLICATION

Dernière mise à jour : 29/01/00

Utilisation de Application.OnMessage

Dans l'inspecteur d'objet, nous n'avons pas accès aux propriétés ou aux événements liés à l'application.
Il va donc falloir affecter "à la main" une procédure à l'événement OnMessage de l'objet application.

Dans la partie private de la déclaration de notre Form principale ajoutons la ligne

 

procedure AppMessage(var Msg: TMsg; var Handled: Boolean);

 

Dans l'événement OnCreate de notre Form ajoutons l'affectation de la procédure AppMessage à l'événement OnMessage de notre application :

{---------------------------------------------------------------------------}
{ affectation de AppMessage en temps que procédure déclenchée par OnMessage }
{---------------------------------------------------------------------------}
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := AppMessage;
end;

 

Il ne nous reste plus qu'à implémenter notre nouvelle procédure AppMessage :

Dans la partie implementation

Ajoutons par exemple :

procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
{------------------------------------------------------------------------}
{ procédure lancée par chaque évènement OnMessage de l'application       }
{ attention cette procédure est appelée pour chaque message si vous      }
{ n'y prenez garde, elle peut ralentir votre application                 }
{ les messages arrivent même s'ils sont destinés à une autre fenêtre que }
{ la fenêtre principale (essayez dans la fenêtre du ShowMessage)         }
{ Affectez la valeur True à Handled si le message a été complètement   }
{ géré afin d'empêcher la suite du traitement normal du message.         }
{------------------------------------------------------------------------}
begin
   if (Msg.message =WM_KEYDOWN) then ShowMessage('message WM_KEYDOWN dans AppMessage')
   // handled=true; aurait empéché la suite du traitement normal du message
   // il n'aurait donc pas été traité par WindProc
end;
Lancez le programme et appuyez sur une touche ou le bouton droit de la souris.
source du programme exemple

 

 

retour au sommaire