ENVOI ET CREATION D'UN MESSAGE PAR NOTRE APPLICATION
Dernière mise à jour : 29/01/00
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