Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Lecture des éléments d'une combo externe. | |
| | Auteur | Message |
---|
Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Lecture des éléments d'une combo externe. Lun 5 Juin 2017 - 9:00 | |
| Bonjour.
@Klaus.
Existe-t-il un moyen quelconque pour lire l'ensemble des éléments d'un objet combo externe à Panoramic, stp ?
Je souhaiterais enregistrer l'ensemble des éléments d'une combo d'un logiciel externe.
Merci de ton aide. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Lecture des éléments d'une combo externe. Lun 5 Juin 2017 - 10:13 | |
| Oui. Recharge KGF.dll à partir de mon site (ou de mon site miroir). Il n'y a pas de changement de version pour le moment, mais tu disposes d'une nouvelle fonction, non doicumentée, qui s'appelle ainsi: - Code:
-
res% = dll_call2("GetExternalComboContent",handleCombo%,handle(memo%)) handleCombo% est le handle de la COMBO externe memo% est le numéro d'un objet MEMO Panoramic recevant le contenu de la combo res% reçoit le nombre de lignes lues Voici une démo, utilisant une combo de Panoramic, mais accédée par son handle: - Code:
-
' test_GetExternalComboContent.bas
dim n%
combo 1 : top 1,10 : left 1,10 item_add 1,"aaaaa" item_add 1,"bbbbbbbbbbb" item_add 1,"ccccc" item_add 1,"ddddddddd" item_add 1,"eeeee" item_add 1,"f" item_add 1,"gggggggg" memo 2 : top 2,10 : left 2,width(1) + 20 : width 2,200 : height 2,300 : bar_both 2 dll_on "KGF.dll"
n% = dll_call2("GetExternalComboContent",handle(1),handle(2)) message str$(n%)+" lignes reçues" end
EDITComment trouver le handle du combo externe ? Une solution consiste à placer le curseur sur le combo, puis utiliser les fonctions suivantes: - Code:
-
dim res%, hnd%, x%, y% res% = GetAbsoluteMousePosition(adr%(x%),adr%(y%)) res% = dll_call2("GetObjectUnderPosition",x%,y%) res% contient alors le handle de ce combo. | |
| | | Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Lecture des éléments d'une combo externe. Lun 5 Juin 2017 - 13:28 | |
| Bonjour. Avec le code suivant, j'obtiens un message d'erreur: Error in function, line 14.Mais peut-être le logiciel est-il protégé !! - Code:
-
dll_on "kgf"
dim res%, hnd%, handleCombo%, x%, y%
memo 1
while 0=0 res% = dll_call2("GetAbsoluteMousePosition",adr(x%),adr(y%)) handleCombo% = dll_call2("GetObjectUnderPosition",x%,y%) caption 0,str$(handleCombo%) if handleCombo%=198614 then exit_while end_while
res% = dll_call2("GetExternalComboContent",handleCombo%,handle(1)) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Lecture des éléments d'une combo externe. Lun 5 Juin 2017 - 14:30 | |
| Comment est déterminée la valeur 198614 ? Parce que, si tu connais a valeur, pourquoi fais-tu la boucle WHILE ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Lecture des éléments d'une combo externe. Lun 5 Juin 2017 - 15:34 | |
| Reprends à nouveau KGF.dll de mon site (ou site miroir) et fais marcher ce programme: - Code:
-
' test_GetExternalComboContent.bas
dim n%, classe$, res%
combo 1 : top 1,10 : left 1,10 item_add 1,"aaaaa" item_add 1,"bbbbbbbbbbb" item_add 1,"ccccc" item_add 1,"ddddddddd" item_add 1,"eeeee" item_add 1,"f" item_add 1,"gggggggg" memo 2 : top 2,10 : left 2,width(1) + 20 : width 2,200 : height 2,300 : bar_both 2 dll_on "KGF.dll"
classe$ = string$(255," ") res% = dll_call2("GetClassNameFromHandle",handle(1),adr(classe$)) message "classe="+trim$(classe$) n% = dll_call2("GetExternalComboContent",handle(1),handle(2)) message str$(n%)+" lignes reçues" end
Tu constateras qu'il y aura un message "classe=TComboBox", juste avant le remplissage du mémo. C'est la vérification que le handle passé est bien celui d'une combobox. Tu porras alors adapter ton code d'essai en intégrant: - Code:
-
dim classe$ classe$ = string$(255," ") res% = dll_call2("GetClassNameFromHandle",handle(1),adr(classe$)) message "classe="+trim$(classe$)
juste avant l'appel de GetExternalComboContent. Juste pour être sûr d'être bien sur une combobox. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Lecture des éléments d'une combo externe. Mar 6 Juin 2017 - 0:59 | |
| Suivant la position du curseur dans la ComboBox, on récupère le bon handle ou pas. La version suivante du programme de démo montre une façon de récupérer le bon handle de la ComboBox, dans tous les cas de figure. Recharge à nouveau la DLL de mon site (ou de mon site miroir), et exécute ceci: - Code:
-
' test_GetExternalComboContent.bas
dim n%, classe$, res%, x%, y%, hnd%, hndParent%, parent$
width 0,800 combo 1 : top 1,10 : left 1,10 item_add 1,"aaaaa" item_add 1,"bbbbbbbbbbb" item_add 1,"ccccc" item_add 1,"ddddddddd" item_add 1,"eeeee" item_add 1,"f" item_add 1,"gggggggg" memo 2 : top 2,10 : left 2,width(1) + 20 : width 2,200 : height 2,300 : bar_both 2 dll_on "KGF.dll"
classe$ = string$(255," ") res% = dll_call2("GetClassNameFromHandle",handle(1),adr(classe$)) message "classe="+trim$(classe$) n% = dll_call2("GetExternalComboContent",handle(1),handle(2)) message str$(n%)+" lignes reçues" while scancode<>27 res% = dll_call2("GetAbsoluteMousePosition",adr(x%),adr(y%)) hnd% = dll_call2("GetObjectUnderPosition",x%,y%) classe$ = string$(255," ") res% = dll_call2("GetClassNameFromHandle",hnd%,adr(classe$)) hndParent% = dll_call1("GetParentFromHandle",hnd%) parent$ = string$(255," ") if hnd%<>-1 then res% = dll_call2("GetClassNameFromHandle",hndParent%,adr(parent$)) if trim$(classe$)="TComboBox" caption 0,"handle="+str$(hnd%)+" classe="+trim$(classe$)+" parent="+str$(hndParent%)+" classe parent="+trim$(parent$)+" ==> "+str$(hnd%)+"=ComboBox" else if trim$(parent$)="TComboBox" caption 0,"handle="+str$(hndParent%)+" classe="+trim$(classe$)+" parent="+str$(hndParent%)+" classe parent="+trim$(parent$)+" ==> "+str$(hndParent%)+"=ComboBox" else caption 0,"" end_if end_if pause 100 end_while
' ceci montre que: ' soit classe$="TComboBox" ==> hnd% est le handle de la combobox ' soit Parent$="TComboBox" ==> hndParent% est le handle de la combobox ' soit aucune des deux variables n'est égal ) "TComboBox" ==> on n'est pas dedans !
end
Le début est identique (on récupère la ComboBox dans le mémo), mais après, on est dans une boucle où l'on trace la position de la souris. Si le curseur est dans la ComboBox, le handle est affiché dans la caption de la form 0, et sinon, cette caption est éffacée. Un petit commentaire montre le critère à appliquer. On sort de la démo par la touche Echap. | |
| | | Contenu sponsorisé
| Sujet: Re: Lecture des éléments d'une combo externe. | |
| |
| | | | Lecture des éléments d'une combo externe. | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |