| Evènement USER_EVENT | |
|
|
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Evènement USER_EVENT Ven 22 Avr 2016 - 22:21 | |
| Jack, puisque tu sembles avoir à nouveau un peu de disponibilité pour faire avancer Panoramic, je reviens sur mon "serpent de mer": l'évènement ON_USER_EVENT qu'on pourrait déclencher à partir d'une DLL et qui serait traité en Panoramic comem n'importe quel évènement. Je m'explique. Je propose de définit un USER_MESSAGE tel que - Code:
-
const CM_PANORAMIC_USER = WM_USER + 3000; La DLL enverrait ce message par l'api SEND_MESSAGE au handle de la form 0 (que je sais trouver en toutes circonstances). Et la WndProc de la form 0 pourrait alors déclencer l'évènement Paanoramic ON_ISER_EVENT que j'appelle de mes voeux. Les deux paramètres LPARAM et WPARAM seraient mis à disposition du programme Panoramic dans des variables système, du genre USER_EVENT_LPARAM et USER_EVENT_WPARAM. A partir de là, on pourrait traiter efficacement des évènements déclenchés par la DLL. Actuellement, je suis obligé à imposer l'utilisation d'un objet EDIT (caché par HIDE) avec un évènement ON_CHANGE. Et je lui envoie des messages texte par SEND_MESSAGE WM_SETTEXT. Il faut alors décoder la chaîne de caractères pour savoir de quoi il retourne. Ca marche. Mais ce n'est pas élégant. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Evènement USER_EVENT Sam 15 Oct 2016 - 2:18 | |
| Bonsoir, Jack,
Après une longue absence contrainte, je reviens sur le forum et j'essaie de me remettre à jour. Et je vois que je n'ai pas de réponse à ma suggestion d'une commande ON_USER_EVENT (sauf si tu as posté quelque chose ailleurs, sans que je l'aie vu). Que penses-tu d'une telle commande ON_USER_EVENT avec des variables système USER_EVENT_LPARAM et USER_EVENT_WPARAM ? Un tel évènement serait déclenché par un message du type CM_PANORAMIC_USER = WM_USER + 3000; // 3000 est un exemple ! envoyé par l'API SendMessage au handle de la form 0.
Tu penses que ce serait faisable ? | |
|
| |
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Evènement USER_EVENT Sam 15 Oct 2016 - 9:22 | |
| Tout d'abord, je suis heureux de te retrouver dans ce forum et encore plus heureux de te voir faire des propositions comme cela.
Le ON_USER_EVENT que tu proposes est une bonne idée et je le code ce week-end. A bientôt pour de longues et nouvelles aventures. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Evènement USER_EVENT Sam 15 Oct 2016 - 10:41 | |
| Mille merci, Jack ! Ca va être super ! | |
|
| |
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Evènement USER_EVENT Lun 17 Oct 2016 - 21:33 | |
| Tu trouveras ici une version de Panoramic sans éditeur qui permet de traiter un événement "utilisateur" déclenché par une fonction d'une DLL. http://panoramic-language.pagesperso-orange.fr/PANORAMIC.zipPour gérer les événements utilisateur en Panoramic, il y a 2 commandes : ON_USER_EVENT L : exécute le programme à partir du label L quand un événement utilisateur est adressé à FORM0 OFF_USER_EVENT : ignore les événements utilisateur et 2 variables système : USER_EVENT_LPARAM et USER_EVENT_WPARAM qui contiennent des valeurs numériques envoyées par la DLL. Voici à titre d'exemple une DLL écrite en Delphi qui permet de déclencher un événement : - Code:
-
library MaDLL; uses Windows, Messages; const Message_DLL = WM_USER + 3000; function USER_EVENT(Nb1 : integer) : integer; stdcall; // Nb1 est un handle var WP, LP : integer; begin WP := 10; // par exemple LP := 20; // par exemple Result := SendMessage(Nb1, Message_DLL, WP, LP); end; exports USER_EVENT; end.
et un source Panoramic qui traite l'événement déclenché par la DLL : - Code:
-
label traite_event On_User_Event traite_event dll_on "MaDLL.dll" print dll_call1("USER_EVENT",handle(0)) dll_off end
traite_event: message "événement déclenché par DLL"+chr$(13)+chr$(10)+str$(USER_EVENT_LPARAM)+chr$(13)+chr$(10)+str$(USER_EVENT_WPARAM) return
Je suis comme d'habitude preneur de toute remarque, critique, proposition ... A toi de jouer ... _________________ username : panoramic@jack-panoramic password : panoramic123 | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Evènement USER_EVENT Mar 18 Oct 2016 - 0:05 | |
| YESSS !!! Je télécharge de suite et j'essaie. De façon "prévisionnelle", j'ai adapté la gestion de mon objet StringGrid à cette technique, et je vais voir ce que ça donne. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Evènement USER_EVENT Mar 18 Oct 2016 - 0:26 | |
| Succès total, Jack ! Ca fait exactement ce que je souhaitais et ce que j'espérais. Voilà qui va donner une toute nouvelle souplesse dans la communication entre Panoramic et les DLLs écrites pour Panoramic ! Sincèrement MERCI, et j'attendrai patiemment l'apparition dans la version "éditeur" pour pouvoir progresser plus facilement avec la mise au point. Ceci dit, ça marche dès maintenant en mode "exécution" et en mode "debug" avec Synedit_Editor, puisque j'exécute à travers Panoramic.exce sans éditeur.
Bravo et Merci ! | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 18 Oct 2016 - 9:19 | |
| @Klaus, Cela signifierait il la fin programmée des "edit" cachés avec leur "on_change" ?... | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Evènement USER_EVENT Mar 18 Oct 2016 - 10:11 | |
| Oui et non. Les évènements passeront par des ON_USER_EVENT au lieu des ON_CHANGE d'un EDIT. Mais dans certains cas, la quantité d'information à transmettre est plus importante que ce qui peut tenir dans deux valeurs entières, comme du texte, par exemple. Et dans ce cas, il y aura toujours un EDIT, un MEMO ou un LIST pour recevoir les informations. Mais plus d'évènements sur ces objets. En fait, j'utiliserai USER_EVENT_WPARAM pour coder l'origine de l'évènement et sa nature, ainsi que certaines informations numériques. USER_EVENT_LPARAM sera entièrement dédié aux informations retournées par l'évènement. Et donc, éventuellement, un texte dans un EDIT, MEMO ou LIST. Mais dans tous les cas, pour les fonctions existantes, je ferai en sorte que ce soir compatible avec les codes Panoramic existants. Il y aura par exemple, pour l'objet StringGrid, un nouveau code fonction pour DridFunction (code 33 pour être précis) qui "active" se nouveau comportement. Par défaut, la DLL fonctionnera exactement comme avant. Ce n'est qu'en activant le nouveau comportement que la DLL va générer ces nouveaux USER_EVENT. Bien sûr, les nouvelles créations intégrerons ce mode dès le départ. EDITVoici comment ça va s'articuler, dans une première approche. J'ai créé une fonction dans KGF.dll qui retourne, dans un MEMO, des lignes Panoramic pour gérer le codage de la gestion des USER_EVENTs. Exemple: - Code:
-
Rem *** Liste des constantes Panoramic de KGF.dll *** dim UserEventConstants : UserEvent_WParam_Module = 4278190080 : ' Masque pour le module dans WParam dim UserEventConstants : UserEvent_WParam_Type = 16711680 : ' Masque pour le type dans WParam dim UserEventConstants : UserEvent_WParam_Data = 65535 : ' Masque pour les données spécifiques dans WParam dim UserEvent_GRID : UserEvent_GRID = 16777216 : ' module GRID (No. 1)Rem *** constantes pour ON_USER_EVENT *** dim UserEvent_GRID : UserEvent_GRID = 16777216 : ' module GRID (No. 1) dim UserEvent_GRID_Click : UserEvent_GRID_Click = 1*65536 : ' type "click dans cellule" dim UserEvent_GRID_Leave : UserEvent_GRID_Leave = 2*65536 : ' type "sortie de cellule" dim UserEvent_GRID_Return : UserEvent_GRID_Return = 3*65536 : ' type "touche Return dans cellule" Rem Usage: select bin_and(UserEvent_WParam,UserEvent_WParam_Module) case UserEvent_GRID select bin_and(UserEvent_WParam,UserEvent_WParam_Type) case UserEvent_GRID_Click message "Ligne="+str$(UserEvent_LParam)+" Colonne="+str$(bin_and(UserEvent_WParam,UserEvent_WParam_Data)) ... case UserEvent_GRID_Leave ... case UserEvent_GRID_Return ... end_select : ' fin USER_EVENT_GRID end_select : ' fin UserEvent_WParam Ces lignes définissent les constantes pour gérer cela, et donnent la structure de codage pour les 3 évènements générés par l'objet StringGrid. | |
|
| |
Contenu sponsorisé
| Sujet: Re: Evènement USER_EVENT | |
| |
|
| |
| Evènement USER_EVENT | |
|