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 |
|
|
| KGF.dll - demandes ou suggestions de modifications ou ajouts | |
|
+7papydall Oscaribout Marc Pedro Minibug pascal10000 Klaus 11 participants | |
Auteur | Message |
---|
Oscaribout
Nombre de messages : 471 Date d'inscription : 29/12/2016
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Dim 11 Fév 2018 - 12:31 | |
| Merci Klaus, je vais essayer celà. Je me retrouve encore avec des problèmes alors que c'était résolu. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Mar 27 Fév 2018 - 1:26 | |
| @Klaus Dans la documentation de KGF, Gestion d'un browser basé sur Internet Explorer Fonction ExecuteJavaScriptIl est écrit comme explication de la fonction : - Citation :
- exécuter un code HavaScript
J’ai bien compris qu’il s’agit de JavaScript, mais si tu veux bien corriger ce lapsus clavis, ça sera mieux. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Mar 27 Fév 2018 - 2:01 | |
| Certes, Papydall ! Je vais corriger me lapsus clavis dans les prochains jours. Pour la version de ce soir, c'est trop tard. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 14:30 | |
| Bonjour Klaus !
Sur l'objet LISTBOX, lors de la sélection d'une ligne qu'elle soit en sélection simple ou multiple j'ai un soucis. Quant je souhaite changé l’icône de la ligne sélectionnée j'ai un décalage.
Je tente de t'expliquer :
1/ je clique sur la première ligne qui change de couleur mais l’icône n'est pas modifiée. 2/ Si je clique sur la ligne ou une autre ligne là l’icône change et apparaît comme souhaité.
En fait ce que je souhaiterai faire c'est pourvoir changer l’icône lors de la sélection et mettre une autre icône lors de la dé-sélection.
Est ce que tu pourrai STP faire une fonction qui retourne un flag pour savoir si la ligne est sélectionné ou pas ? Un peu comme avec index% qui lui retourne le numéro de ligne. Merci d'avance Klaus. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 15:18 | |
| Bizarrre. J'ai reteste, et la fonction - Code:
-
res% = dll_call6("OptionsForIconComboBox",ICB%,ele%,ico%,dotrans%,trans%,indent%) change l'icône avec effet immédiat, que la ligne soit sélectionnée ou pas. Lors de chaque clic, multi-sélection ou pas, la DLL envoie un USER_EVENT identifiant la ligne cliquée. Tu as également la fonction suivante: - Code:
-
nselect% = dll_call2("GetAllSelectedItemsFromIconListBox",ICB%,handle(memo%)) qui te donne dans un mémo, la liste de toutes les lignes sélectionnées: Et voici le code de ce programme de démo: - Code:
-
' test_IconComboBox.bas
label creer, supprimer, UserEvent, creerL, supprimerL, selectionL, changeL3, selectL3
dim res%, ICB%, IL%, ILB%, no%, s$, WParam%, LParam%, index%, UserICB%, UserILB% dim no_DoIcons%, no_DoIndent%, options%, no_memo%, no_Multi% dim cFond% : cFond% = hex("FFFFFF") : ' blanc dim cFont% : cFont% = hex("000000") : ' noir dim cSelect% : cSelect% = hex("FF0000") : ' bleu
' dim ilb$ : ilb$ = "KGF.ilb" dim ilb$ : ilb$ = "MonTest_32x32.ilb"
dll_on "KGF.dll" width 0,700
on_user_event UserEvent
no% = no% + 1 : memo no% : no_memo% = no% : hide no% : bar_both no%
no% = no% + 1 : check no% : top no%,10 : no_DoIcons% = no% : caption no%,"Afficher icônes" no% = no% + 1 : check no% : top no%,10 : left no%,130 : no_DoIndent% = no% : caption no%,"Indentation" no% = no% + 1 : check no% : top no%,10 : left no%,260 : no_Multi% = no% : caption no%,"Sélection multiple"
no% = no% + 1 : button no% : top no%,40 : caption no%,"Créer" : on_click no%,creer no% = no% + 1 : button no% : top no%,40 : left no%,width(no%-1) : caption no%,"Supprimer" : on_click no%,supprimer
no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1)+100 : caption no%,"Créer" : on_click no%,creerL no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Supprimer" : on_click no%,supprimerL no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Sélection" : on_click no%,selectionL no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Change ligne 3" : on_click no%,changeL3 no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Clic ligne 3" : on_click no%,selectL3
' IL% = dll_call2("CreateImageList",16,16) IL% = dll_call2("CreateImageList",32,32) res% = dll_call2("LoadImageList",IL%,adr(ilb$)) end
UserEvent: if bin_and(user_event_wparam,hex("FF000000"))=hex("09000000") : ' IconComboBox if bin_and(user_event_wparam,hex("00FF0000"))<>hex("00010000") then return index% = bin_and(user_event_wparam,hex("0000FFFF")) UserICB% = user_event_lparam : ' ici, on a l'identifiant de l'objet ayant généré l'évènement ! s$ = string$(50," ") res% = dll_call3("GetItemOfIconComboBox",ICB%,index%,adr(s$)) s$ = trim$(s$) message "clic dans IconComboBox ligne "+str$(index%)+" = "+s$ return end_if if bin_and(user_event_wparam,hex("FF000000"))=hex("0A000000") : ' IconListBox if bin_and(user_event_wparam,hex("00FF0000"))<>hex("00010000") then return index% = bin_and(user_event_wparam,hex("0000FFFF")) UserILB% = user_event_lparam : ' ici, on a l'identifiant de l'objet ayant généré l'évènement ! s$ = string$(50," ") res% = dll_call3("GetItemOfIconListBox",ILB%,index%,adr(s$)) s$ = trim$(s$) message "clic dans IconListBox ligne "+str$(index%)+" = "+s$ return end_if return
creer: if ICB%<>0 then return options% = 0 if checked(no_DoIcons%)=1 then options% = options% + 1 if checked(no_DoIndent%)=1 then options% = options% + 2 ICB% = dll_call3("CreateIconComboBox",handle(0),IL%,options%) res% = dll_call5("LocateIconComboBox",ICB%,20,80,200,0) if 1=2 transp% = hex("FFFFFF") s$ = "Déjeuner" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,1,0,0) s$ = "Hors-d'oeuvres" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),4,1,0,1) s$ = "Pâté de campagne" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),7,1,0,2) s$ = "Radis/Beurre" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),10,1,0,2) s$ = "Plats" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),13,1,0,1) s$ = "Steak/frites" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),16,1,0,2) s$ = "Dîner" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),19,1,0,0) else s$ = "Déjeuner" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),2,1,0,0) s$ = "Hors-d'oeuvres" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,0,0,1) s$ = "Pâté de campagne" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),0,1,0,2) : ' pas d'icône ! s$ = "Radis/Beurre" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,0,0,2) s$ = "Plats" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),2,1,0,1) s$ = "Steak/frites" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,0,0,2) s$ = "Dîner" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),2,1,0,0) end_if res% = dll_call4("SetColorsForIconComboBox",ICB%,cFond%,cFont%,cSelect%)
return
supprimer: ICB% = dll_call1("DeleteIconComboBox",ICB%) return
creerL: if ILB%<>0 then return options% = 0 if checked(no_DoIcons%)=1 then options% = options% + 1 if checked(no_DoIndent%)=1 then options% = options% + 2 ILB% = dll_call3("CreateIconListBox",handle(0),IL%,options%) res% = dll_call5("LocateIconListBox",ILB%,240,80,200,300) if 1=2 transp% = hex("FFFFFF") s$ = "Déjeuner" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,1,0,0) s$ = "Hors-d'oeuvres" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),4,1,0,1) s$ = "Pâté de campagne" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),7,1,0,2) s$ = "Radis/Beurre" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),10,1,0,2) s$ = "Plats" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),13,1,0,1) s$ = "Steak/frites" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),16,1,0,2) s$ = "Dîner" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),19,1,0,0) else s$ = "Déjeuner" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),2,1,0,0) s$ = "Hors-d'oeuvres" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,1) s$ = "Pâté de campagne" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),0,1,0,2) : ' pas d'icône ! s$ = "Radis/Beurre" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,2) s$ = "Plats" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),2,1,0,1) s$ = "Steak/frites" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,2) s$ = "Dîner" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),2,1,0,0) end_if
res% = dll_call4("SetColorsForIconListBox",ILB%,cFond%,cFont%,cSelect%) res% = dll_call2("OptionsForIconListBox",ILB%,checked(no_Multi%)) return supprimerL: ILB% = dll_call1("DeleteIconListBox",ILB%) return
selectionL: res% = dll_call2("GetAllSelectedItemsFromIconListBox",ILB%,handle(no_memo%)) message text$(no_memo%) return changeL3: res% = dll_call6("ChangeElementIconInIconListBox",ILB%,3,1,0,0,2) s$ = "Oeuf dur - mayonnaise" res% = dll_call3("ChangeElementTextInIconListBox",ILB%,3,adr(s$)) return SelectL3: res% = dll_call2("SelectItemOfIconListBox",ILB%,3) return
Est-ce que cela résoud ton problème ? | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 15:26 | |
| Merci de te pencher sur mon problème Klaus.
En fait c'est simple. Je souhaite mettre une icône pour la sélection de la ligne et une autre icône lorsque ce n'est pas sélectionné. C'est pour cela qu'une fonction qui retourne l'état 0 ou 1 de la ligne sélectionnée serai pratique.
Du style : res%=dll_call2("IsSelectedItemsFromIconListBox",ILB%,index%)
Et res% contiendrai l'état. A moins qu'il y est un autre moyen simple d'y arriver ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 16:04 | |
| Double réponse. 1. Il y avait un oubli de mise à jour de l'affichage de la ligne après un changement de l'icône, si la ligne était sélectionnée. Ceci est corrigé maintenant. En fait, je ne m'en rendais pas compte puisque dans mon programme de démo, la mise à jour de l'icône était suivie immédiatement de la mise à jour du libellé qui, elle, mettait bien à jour l'affichage. Autant pour moi. 2. Ce que tu veux faire, c'est de pouvoir intervenir lorsqu'une ligne est désélectionnée. Le seul moyen que je voie, c'est de mémoriser la liste des éléments sélectionnées (récupérée par GetAllSelectedItemsFromIconListBox lors de la réception d'un USER_EVENT) et de a comparer avec la liste précédente. Pour la ou les lignes sélectionnées précédemment et ne figurant plus dans la nouvelle liste, tu peux intervenit pour changer l'icône.2. J'ai mis une nouvelle version en line. Maintenant, la fonction GetAllSelectedItemsFromIconListBox retourne, comme avant, la liste des lignes sélectionnées ET en plus, si une ligne a été désélectionnée, la ligne désélectionnée précédé d'un signe "-", comme ceci: Je pense que ceci résoud ton problème. Il suffit de vérifier si la dernière ligne de ce mémo est précédée d'un "-". Si oui, tu changes son icône. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 17:04 | |
| Je viens de mettre à jour la DLL et j'ai mis le code suite en EVENT : - Code:
-
IF USER_EVENT_LPARAM=LB_ssp% t$=string$(50," ") : res%=dll_call3("GetItemOfIconListBox",LB_ssp%,index%,adr(t$)) : trim$(t$) res%=dll_call2("GetAllSelectedItemsFromIconListBox",LB_ssp%,handle(MEM_ssp%)) t$=LEFT$(ITEM_READ$(MEM_ssp%,COUNT(MEM_ssp%)),1) IF t$="-" res%=dll_call6("SetItemFontAttributesOfIconListBox",LB_ssp%,index%,0,0,0,0) res%=dll_call5("SetItemFontColorOfIconListBox",LB_ssp%,index%,0,0,0) res%=dll_call6("ChangeElementIconInIconListBox",LB_ssp%,index%,2,0,0,0) ELSE res%=dll_call6("SetItemFontAttributesOfIconListBox",LB_ssp%,index%,0,1,0,0) res%=dll_call5("SetItemFontColorOfIconListBox",LB_ssp%,index%,255,255,255) res%=dll_call6("ChangeElementIconInIconListBox",LB_ssp%,index%,1,0,0,0) END_IF END_IF
Mais j'ai encore un problème bizarrement avec les sélections (ligne 7, 21, 29 et 30 sur la capture ci-dessous). J'ai essayé de mettre des PAUSE 200 entre lignes sans résultat. Et j'ai essayé aussi le OFF_USER_EVENT sans résultat non plus. Aurai tu une autre idée ? | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 17:14 | |
| Ce qui est vraiment bizarre c'est que je ne peut pas sélectionner les 2 dernières ligne 29 et 30. même en le faisant plusieurs fois c'est impossible. J'obtiens toujours le même résultat : l'icone sélectionné est bien la bonne mais le texte n'est pas sélectionné correctement ! EDIT : Je suis passé à un affichage de 50 items et toujours le problème avec les 2 derniers. C'est à dire le num 49 et 50. J'ai vérifié le retour de la variable index% et c'est OK même avec 49 et 50. Je crois qu'il y a un soucis avec les fonctions : res% = dll_call5("SetItemFontColor"InIconListBox,ILB%,item%,,R%,G%,B%) res% = dll_call6("SetItemFontAttributesInIconListBox",ILB%,item%,B%,I%,U%,S%)J'ai constaté aussi que les options de texte B%,I%,U%,S% ne sont pas dans le bon ordre. Il faudrait que tu regarde aussi pour la fonction : ChangeElementIconInIconComboBox car l'exemple ne correspond pas ! Et pour terminer il y a toujours la fonction suivante dans la liste de COMBOBOX : res% = dll_call2("OptionsForIconComboBox",ICB%,multi%) | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 17:57 | |
| J'allais oublier...
Comme il y a une fonction : res%=dll_call2("SelectItemOfIconComboBox",LB%,n%) serai-t-il possible d'avoir : res%=dll_call2("UnselectItemOfIconComboBox",LB%,n%) pour désélectionné une ligne. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 18:51 | |
| Je vais regarder tout cela tranquillement, ce soir. Ces retours sont précieux ! - Citation :
- Et pour terminer il y a toujours la fonction suivante dans la liste de COMBOBOX :
res% = dll_call2("OptionsForIconComboBox",ICB%,multi%) Oui. J'ai corrigé dans le source du fichier CHM ici, mais comme je suis en train de faire de grosses modifications, suite aux multiples rajouts de ces derniers jours, je ne l'ai pas encore distribué. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 21:38 | |
| Rapport d'étape:
1 J'ai corrigé SelectItemOfIconComboBox et UnselectItemOfIconComboBox. Il y avait d'ailleurs le même problème dans d'autres fonctions - j'ai corrigé partout. Maintenant, les deux dernières lignes ne posent plus de problème.
2. J'ai modifié SelectItemOfIconComboBox, et d'ailleurs également SelectItemOfIconListBox, de sorte que le paramètre index% passé comme 0 (zéro) annule la ou les sélections, quelles qu'elles soient.
Pourrais-tu essayer pour voir si tu constates une amélioration ? S'il y a encore d'autres problèmes, je continuerai. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 22:00 | |
| J'ai testé et voici le rapport ! 1/ Maintenant les 2 derniers items sont cliquables correctement. 2/ Concernant la fonction res%=dll_call2("SelectItemOfIconListBox",LB_ssp%,0). Ça marche bien aussi. 3/ Par contre pour res%=dll_call2("UnselectItemOfIconListBox",LB_ssp%,n%)j'ai le message expression arithmerique incorrecte : Erreur dans une fonction à la ligne ...J'aimerai bien avoir cette fonction car elle me permet de désélectionnée la ligne n% uniquement. En résumé même principe que le point 2 mais pour la seule ligne n%. Possibilité que je n'ai pas autrement ou alors j'ai zappé quelque chose. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 22:16 | |
| - Citation :
- Par contre pour res%=dll_call2("UnselectItemOfIconListBox",LB_ssp%,n%)
j'ai le message expression arithmerique incorrecte : Erreur dans une fonction à la ligne ... Oui, tu as zappé quelque chose. J'ai dit: - Citation :
- 2. J'ai modifié SelectItemOfIconComboBox, et d'ailleurs également SelectItemOfIconListBox, de sorte que le paramètre index% passé comme 0 (zéro) annule la ou les sélections, quelles qu'elles soient.
Donc, il n'y a pas de nouvelle fonction - tu passes simplement zéro comme indice, à la fonction. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 22:22 | |
| Oui j'ai bien compris sauf que ça annule toutes les sélections et pas seulement une seule. C'est pourquoi je te demande cette fonction pour annuler une seule ligne ! Si cela est possible bien sûr sinon je vais me débrouiller... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 22:26 | |
| Ah, j'avais pas compris ! Je vais voir ça tout de suite ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 22:37 | |
| Bon, j'ai modifié la fonction SelectItemOfIconComboBox comme suit: - index%>0 ==> sélection de la ligne index% si elle n'était pas sélectionnée - index%=0 ==> désélection de toutes les sélections - index%<0 ==> désélection de la ligne index% si elle était sélectionnée
Si abs(index)>nombre de lignes alors ereur. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 22:41 | |
| Ok merci Klaus je vais tester.
Dois moi y a-t-il une manière de savoir combien de ligne sont enregistrées dans la LISTBOX ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 22:45 | |
| Lors d'un ajout de ligne, la fonction AddItemToIconListBox retourne le nombre de lignes présentes dans la IcinListBox, après ajout. EDIT Il suffit donc de faire - Code:
-
NombreElements% = dll_callx("AddItemToIconListBox",...) pour avoiur toujours ce nombre sous la main. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 20 Avr 2018 - 23:28 | |
| Ah OK pas mal cette idée ! Je viens de tester et ça c'est bon.
Par contre j'ai un soucis avec SelectItemOfIconListBox et je dis bien ListBox et pas ComboBox !
Comme je ne souhaite pas sélectionner plus de 9 lignes en même temps, j'ai ajouté la ligne suivante dans le sous-programme EVEN qui réagit à la 10eme sélection :
IF COUNT(MEM_ssp%)>9 THEN res%=dll_call2("SelectItemOfIconListBox",LB_ssp%,index%) : RETURN
MEM_ssp% est le MEMO receveur.
Mais ça part en boucle : La ligne se met à cliqgnoter (un coup sélect, un coup déselect...) et ensuite plantage. J'ai encore loupé quelque chose ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Sam 21 Avr 2018 - 0:33 | |
| Tu as certainement placé cette ligne dans le traitement du USER_EVENT, n'est-ce pas ? Eh oui, dans ce cas, c'est normal, car la sélection par cette fonction équivaut à un clic sur une ligne qui génère un USER_EVENT qui refait une sélection etc.
Non. Ce n'est pas la bonne solution. Tu peux essayer ceci: si le nombre est plus grand que ton maximum, alors désélectionne le dernier sélectionné en appelant la fonction avec le même index, mais négatif.
Sinon, je ne vois qu'une seule solution: je vais installer une limite maximale du nombre de lignes sélectonnées (défaut: aucune limite), avec une nouvelle fonction permettant d'imposer cette valeur. Quest-ce que tu en dis ? | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Sam 21 Avr 2018 - 0:39 | |
| - Citation :
- désélectionne le dernier sélectionné en appelant la fonction avec le même index, mais négatif.
J'ai testé mais c'est sans résultat. Cela ne fonctionne pas ! - Citation :
- Sinon, je ne vois qu'une seule solution: je vais installer une limite maximale du nombre de lignes sélectonnées (défaut: aucune limite), avec une nouvelle fonction permettant d'imposer cette valeur. Quest-ce que tu en dis ?
Si cela ne te déranges pas, je veux bien. Merci. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Sam 21 Avr 2018 - 1:13 | |
| C'est fait... Tu as maintenant la fonction - Code:
-
LimitePrecedente% = dll_call2("SetMultiSelectionLimit",ILB%,limite%) La fonction impose une limite aux sélections multiples et retourne la valeur précédente de cette limite. Une valeur de zéro pour le paramètre limite% désactive la limitation. Tu peux constater l'effet dans le programme de démo, en choisissant une limite dans le SPIN en haut à droite, avant le clic sur le bouton de création. - Code:
-
' test_IconComboBox.bas
label creer, supprimer, UserEvent, creerL, supprimerL, selectionL, changeL3, selectL3
dim res%, ICB%, IL%, ILB%, no%, s$, WParam%, LParam%, index%, UserICB%, UserILB% dim no_DoIcons%, no_DoIndent%, options%, no_memo%, no_Multi%, no_Limite% dim cFond% : cFond% = hex("FFFFFF") : ' blanc dim cFont% : cFont% = hex("000000") : ' noir dim cSelect% : cSelect% = hex("FF0000") : ' bleu
' dim ilb$ : ilb$ = "KGF.ilb" dim ilb$ : ilb$ = "MonTest_32x32.ilb"
dll_on "KGF.dll" width 0,700
on_user_event UserEvent
no% = no% + 1 : memo no% : no_memo% = no% : hide no% : bar_both no%
no% = no% + 1 : check no% : top no%,10 : no_DoIcons% = no% : caption no%,"Afficher icônes" no% = no% + 1 : check no% : top no%,10 : left no%,130 : no_DoIndent% = no% : caption no%,"Indentation" no% = no% + 1 : check no% : top no%,10 : left no%,260 : no_Multi% = no% : width no%,120 : caption no%,"Sélection multiple" no% = no% + 1 : alpha no% : top no%,10 : left no%,390 : caption no%,"Limite de sélection:" no% = no% + 1 : spin no% : top no%,10 : left no%,490 : no_Limite% = no% : width no%,60 : min no%,0
no% = no% + 1 : button no% : top no%,40 : caption no%,"Créer" : on_click no%,creer no% = no% + 1 : button no% : top no%,40 : left no%,width(no%-1) : caption no%,"Supprimer" : on_click no%,supprimer
no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1)+100 : caption no%,"Créer" : on_click no%,creerL no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Supprimer" : on_click no%,supprimerL no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Sélection" : on_click no%,selectionL no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Change ligne 3" : on_click no%,changeL3 no% = no% + 1 : button no% : top no%,40 : left no%,left(no%-1)+width(no%-1) : caption no%,"Clic ligne 3" : on_click no%,selectL3
' IL% = dll_call2("CreateImageList",16,16) IL% = dll_call2("CreateImageList",32,32) res% = dll_call2("LoadImageList",IL%,adr(ilb$)) end
UserEvent: if bin_and(user_event_wparam,hex("FF000000"))=hex("09000000") : ' IconComboBox if bin_and(user_event_wparam,hex("00FF0000"))<>hex("00010000") then return index% = bin_and(user_event_wparam,hex("0000FFFF")) UserICB% = user_event_lparam : ' ici, on a l'identifiant de l'objet ayant généré l'évènement ! s$ = string$(50," ") res% = dll_call3("GetItemOfIconComboBox",ICB%,index%,adr(s$)) s$ = trim$(s$) message "clic dans IconComboBox ligne "+str$(index%)+" = "+s$ return end_if if bin_and(user_event_wparam,hex("FF000000"))=hex("0A000000") : ' IconListBox if bin_and(user_event_wparam,hex("00FF0000"))<>hex("00010000") then return index% = bin_and(user_event_wparam,hex("0000FFFF")) UserILB% = user_event_lparam : ' ici, on a l'identifiant de l'objet ayant généré l'évènement ! s$ = string$(50," ") res% = dll_call3("GetItemOfIconListBox",ILB%,index%,adr(s$)) s$ = trim$(s$) message "clic dans IconListBox ligne "+str$(index%)+" = "+s$ return end_if return
creer: if ICB%<>0 then return options% = 0 if checked(no_DoIcons%)=1 then options% = options% + 1 if checked(no_DoIndent%)=1 then options% = options% + 2 ICB% = dll_call3("CreateIconComboBox",handle(0),IL%,options%) res% = dll_call5("LocateIconComboBox",ICB%,20,80,200,0) if 1=2 transp% = hex("FFFFFF") s$ = "Déjeuner" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,1,0,0) s$ = "Hors-d'oeuvres" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),4,1,0,1) s$ = "Pâté de campagne" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),7,1,0,2) s$ = "Radis/Beurre" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),10,1,0,2) s$ = "Plats" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),13,1,0,1) s$ = "Steak/frites" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),16,1,0,2) s$ = "Dîner" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),19,1,0,0) else s$ = "Déjeuner" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),2,1,0,0) s$ = "Hors-d'oeuvres" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,0,0,1) s$ = "Pâté de campagne" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),0,1,0,2) : ' pas d'icône ! s$ = "Radis/Beurre" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,0,0,2) s$ = "Plats" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),2,1,0,1) s$ = "Steak/frites" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),1,0,0,2) s$ = "Dîner" res% = dll_call6("AddItemToIconComboBox",ICB%,adr(s$),2,1,0,0) end_if res% = dll_call4("SetColorsForIconComboBox",ICB%,cFond%,cFont%,cSelect%)
return
supprimer: ICB% = dll_call1("DeleteIconComboBox",ICB%) return
creerL: if ILB%<>0 then return options% = 0 if checked(no_DoIcons%)=1 then options% = options% + 1 if checked(no_DoIndent%)=1 then options% = options% + 2 ILB% = dll_call3("CreateIconListBox",handle(0),IL%,options%) res% = dll_call5("LocateIconListBox",ILB%,240,80,200,300) res% = dll_call2("SetMultiSelectionLimit",ILB%,position(no_Limite%)) if 1=2 transp% = hex("FFFFFF") s$ = "Déjeuner" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,1,0,0) s$ = "Hors-d'oeuvres" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),4,1,0,1) s$ = "Pâté de campagne" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),7,1,0,2) s$ = "Radis/Beurre" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),10,1,0,2) s$ = "Plats" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),13,1,0,1) s$ = "Steak/frites" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),16,1,0,2) s$ = "Dîner" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),19,1,0,0) else s$ = "Déjeuner" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),2,1,0,0) s$ = "Hors-d'oeuvres" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,1) s$ = "Pâté de campagne" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),0,1,0,2) : ' pas d'icône ! s$ = "Radis/Beurre" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,2) s$ = "Plats" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),2,1,0,1) s$ = "Steak/frites" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,2) s$ = "Dîner" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),2,1,0,0) end_if
res% = dll_call4("SetColorsForIconListBox",ILB%,cFond%,cFont%,cSelect%) res% = dll_call2("OptionsForIconListBox",ILB%,checked(no_Multi%)) return supprimerL: ILB% = dll_call1("DeleteIconListBox",ILB%) return
selectionL: res% = dll_call2("GetAllSelectedItemsFromIconListBox",ILB%,handle(no_memo%)) message text$(no_memo%) return changeL3: res% = dll_call6("ChangeElementIconInIconListBox",ILB%,3,1,0,0,2) s$ = "Oeuf dur - mayonnaise" res% = dll_call3("ChangeElementTextInIconListBox",ILB%,3,adr(s$)) return SelectL3: res% = dll_call2("SelectItemOfIconListBox",ILB%,3) return
Bien entendu, tuy peux utiliser cette fonction n'importe quand, après la création de l'objet. Son action prendra effet immédiatement. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Sam 21 Avr 2018 - 1:37 | |
| Merci Klaus, c'est tout a fait ça ! Par contre, en cliquant de manière rapide (Bourrin est passé par là ! ), j'ai réussi à passer la barrière. AU départ j'ai sélectionné de 2 à 10 normalement et ensuite en forçant un peu... Crois tu pouvoir contrer cela ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Sam 21 Avr 2018 - 1:42 | |
| Ah oui - j'ai vu. J'y travaille... | |
| | | Contenu sponsorisé
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts | |
| |
| | | | KGF.dll - demandes ou suggestions de modifications ou ajouts | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |