Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Nouvelles fonctions: messages entre programmes Panoramic ! Lun 26 Avr 2010 - 18:59 | |
| Ca y est: grâce à la correction de la fonction adr(a$) par Jack, j'au pu intégrer mon outil d'envoi de messages texte entre programmes Panoramic ! Voilà un moyen simple d'échanger des données ou de synchroniser des programmes. Un programme qui veut recevoir un message texte, doit déclarer un objet edit un peu particulier. Les valeurs pour top et left doivent être IDENTIQUES, NEGATIVES et INFERIEURS à -500. Ceci me permet d'identifier ce champ à partir d'un programme émetteur. Rien n'interdit de déclarer plusieurs objets edit de ce type dans un même programme, avec des valeurs différentes bien sûr; on pourrait ainsi prévoir de recevoir des messages d'émetteurs différents, ou des messages de nature différente, etc. Ces champs servent en quelque sorte à définir un "canal" unidirectionnel. Chacun de ces champs peut recevoir une déclaration d'évènement on_change ce qui permet de déclencher un traitement sur réception d'un message. Attention: le message suivant remplace le message précédemment reçu, qu'il ait été traité ou pas. Il n'y a rien d'autre à faire dans programme récepteur. Exemple: - Citation :
edit 17 top 17,-1234 left 17,-1234 on_change 17,message_recu_17 edit 18 top 18,-1234 left 18,-1234 on_change 18,message_recu_18
message_recu_17: rem ici, text$(17) est le message du champ 17 return message_recu_18: rem ici, text$(18) est le message du champ 18 return
Le programme émetteur doit d'abord récupérer le handle du champ edit du programme récepteur. Pour cela, il suffit de connaître le nom (la caption de la form0 du programme récepteur) et l'identifiant qui est la valeur (négative) pour top et left du champ de destination. Il y a alors une nouvelle fonction dans KGF.dll qui récupère ce handle, de la manière suivante: - Citation :
dim nom$,id%,hand%
nom$ = "Titre de la fenêtre de destination" id% = -1234 hand% = dll_call3("IPCGetHandle",adr(nom$),len(nom$),i%)
si hand%=0, le programme n'a pas été trouvé ou n'a pas de champ edit avec un top et left égal à id%. Maintenant, on peut envoyer des messages. Pour cela, il y a une autre fonction dans KGF.dll qui utilise le handle récupéré par PCGetHandle: - Citation :
dim mes$,ret%
mes$ = "Message texte à envoyer" ret% = dll_call3("IPGSendMessage",adr(mes$),len(mes$),hand%)
et le tour est joué. Bien sûr, si l'on veut obtenir une communication bi-directionnelle, il faut que les deux programmes déclarent un champ edit de ce type, et utilisent tous les deux la routine IPCGetHand pour trouver le handle correspondant. | |
|