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
|