Il y a quelques temps, je cherchais sur le net des informations au sujet de la fonction ChampClone pour savoir s’il y avait une possibilité de créer des champs clonés en dehors de la fenêtre dont il hérite. A ce que j’ai lu, la réponse est négative. En fait, par une utilisation détournée, il est possible de cloner des champs en dehors de sa fenêtre mère. Le concept est vraiment très très simple. Disons que vous avez fait un programme windev basique. Dans le clic d’un bouton, vous voulez cloner un champ dans une fenêtre secondaire. Comment ça va se passer ?.
Dans le clic du bouton, vous chargez une DLL précise. Ce dernier va appelé ensuite une fonction exportée qui va se charger de lister les modules loadés (les DLL en fait) par l’exécutable Windev. Quand on a trouvé la bonne DLL, on se charge de scanner la table d’importation à la recherche de la bonne API (je ne la citerais pas). On sauvegarde l’adresse de cette dernière. On pose ensuite un hook et on va remplacer l’adresse de l’API par une fonction codée dans la DLL. Enfin, on « déhook » et c’est fini.
Pour les Windeviens pensant que le chinois est ma langue natale, j’ai créé une WDL englobant la code ci-dessus.
Pour tester le fonctionnement, vous aurez juste à écrire ça:
ChargeWDL("MA_WDL_WINDEV.WDL")
ExécuteTraitement("ChampCloneFenêtre", trtProcédure, "FEN_DESTINATION", "SAI_Saisie1", "MON_CHAMP_DE_SAISIE", SAI_Saisie1..X, SAI_Saisie1..Y)
En gros, c’est le même prototype que ChampClone avec en plus le nom de la fenêtre destination.
Vous pouvez télécharger un exemple tout simple de l’utilisation de la WDL (version Windev 12).
Download
Downloaded 74 times
Si vous avez des remarques, n’hésitez pas à me laissez un mail: vroy1_dot_hotmail.com (oter _dot_).
A bientôt.
No Responses to “ChampClone, vous avez dit ChampClone !!!”