Fermer envoi d'un message

GERER LES MESSAGES WINDOWS

ENVOI ET CREATION D'UN MESSAGE PAR NOTRE APPLICATION

Dernière mise à jour : 21/09/02

Envoyer un message a l'aide de PostMessage et SendMessage

L'API Windows met à notre disposition les procédures PostMessage et SendMessage qui permettent d'envoyer un message. Contrairement à PostMessage, SendMessage attend que le message soit traité. SendMessage envoie directement le message à une procédure de fenêtre sans passer par la file d'attente. L'événement Application.OnMessage n'est donc pas déclenché.

PostMessage est plutôt utlisé pour des notifications ou des traitements asynchrones. PostMessage ne poste rien si la file d'attente est pleine (donc toujours tester le résultat de PostMessage et récidiver éventuellement).

Exemple :
Placez sur une fiche un bouton, deux TEdit et un panel puis placez ce code dans l'événement OnClick du bouton:

procedure TForm1.Button1Click(Sender: TObject);
{--------------------------------------------------------------------------------------}
{ PostMessage place un message dans la file d'attente d'une fenêtre ou d'un contrôle }
{ SendMessage fait la même chose mais attend qu'il soit traité }
{--------------------------------------------------------------------------------------}
begin

Edit1.selectall;// sélectionne tout le texte de l'édit1
PostMessage(Form1.Panel1.Handle,WM_CLOSE,0,0); // ferme le panel (pas besoin d'attendre que ce soit fait pour passer à la suite
SendMessage(Form1.Edit1.Handle,WM_COPY,0,0); // message servant à copier le texte sélectioné de l'édit1
SendMessage(Form1.Edit2.Handle,WM_PASTE,0,0); // message servant à copier dans l'edit2
SendMessage(Form1.Edit2.Handle,WM_CHAR,ord('k'),0);// envoi d'un caractère à l'édit2

end;

pour voir un exemple d'application

 


Envoyer un message à l'aide de TControl.Perform :

TControl.Perform répond comme si le contrôle avait reçu le message Windows spécifié.

function Perform(Msg: Cardinal; WParam, LParam: Longint): Longint;


Perform permet de court-circuiter la file d'attente des messages Windows et d'envoyer directement un message à la procédure de fenêtre du contrôle.

Voir son utilisation dans l'exemple de Interception des messages destinés à une fenêtre ou un composant; WindProc


Création d'un message

Avant la déclaration du type TForm1, ajoutez

const
WM_MESSAGEPERSO = WM_USER + 1;
// le 1 peut être remplacé par le chiffre de votre choix
// ne pas utiliser le même chiffre pour un autre message

Dans la partie private, ajoutez la déclaration de la procédure qui réagira au message WM_MESSAGEPERSO

private
procedure WMMessagePerso(var Msg : TMessage); message WM_MESSAGEPERSO;
// procédure destinée à recevoir le message WM_MESSAGEPERSO

 

pour voir un exemple d'utilisation

retour au sommaire