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 |
|
|
| Version d'essai d'un objet IconComboBox | |
| | |
Auteur | Message |
---|
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Version d'essai d'un objet IconComboBox Mer 7 Mar 2018 - 18:32 | |
| Bonsoir Klaus Je viens de faire un test avec res% = dll_call2("GetAllSelectedItemsFromIconListBox",ILB%,handle(mem%))Et tout fonctionne parfaitement. C'est génial ! Je n'ai plus qu'a intégrer tout ça dans GPP et la nouvelle interface. Pourrai tu juste STP m'expliquer cette partie : - Code:
-
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 !
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Version d'essai d'un objet IconComboBox Mer 7 Mar 2018 - 18:40 | |
| J'ai ajouté cette possibilité dans le programme de démo ci-dessous. Crée une IconListBox, sélectionne quelques lignes, puis clique sur "Sélection". Voici le code: - Code:
-
' test_IconComboBox.bas
label creer, supprimer, UserEvent, creerL, supprimerL, selectionL
dim res%, ICB%, IL%, ILB%, no%, s$, WParam%, LParam%, index%, UserICB%, UserILB% dim no_DoIcons%, no_DoIndent%, options%, no_memo% 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"
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 : 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
' 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%,1) return supprimerL: ILB% = dll_call1("DeleteIconListBox",ILB%) return
selectionL: res% = dll_call2("GetAllSelectedItemsFromIconListBox",ILB%,handle(no_memo%)) message text$(no_memo%) return
et voici le résultat: | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Version d'essai d'un objet IconComboBox Mer 7 Mar 2018 - 18:47 | |
| oui j'ai remarqué ! J'ai d'ailleurs commencé à adapter le code à mes besoins. J'aimerai juste que tu m'expliques les 2 premières ligne de code de mon message ci dessus (commençant par if bin_and...). Quant à UserILB il ne semble pas utilisé pour l'instant dans le programme ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Version d'essai d'un objet IconComboBox Mer 7 Mar 2018 - 18:57 | |
| Regarde la doc en ligne ici: http://klauspanoramic.esy.es/IconComboBoxIconListBox.html#IconComboBox_frou la page correspondante dans KGF.chm. Voici de quoi il retourne: Il n'y a qu'un seul USER_EVENT disponible en Panoramic. Il transmet deux variables système: USER_EVENT_WPARAM et USER_EVENT_lLPARAM. J'utilise le premier pour signaler quelle partie de KGF.dll a généré le USER_EVENT (actuellement, il peut y avoir 10 origines différentes, et il y en aura d'autres). Chaque "origine" a un code d'identification qui est codé dans les 8 bits supérieurs des 32 bits de USER_EVENT_WPARAM. Dans notre cas, hex("09000000") signifie IconListBox". Les 8 bits suivants indiquent ce que l'objet en question veut signaler. Ici, hex("00010000") signifie "clic dans une ligne". Les 16 bits de droite contiennent le numéro de ligne visée par le clic. Et USER_EVENT_LPARAM contient l'identifiant de l'objet ayant généré le USER_EVENT. Dans notre cas, ça doit être identique à ILB%. Ceci te permet d'avoir plusieurs IcinListBox et de déterminer quelle IcinListBox a envoyé le USER_EVENT. Donc, pour résumer, la première ligne active le traitement suivant s'il s'agit bien d'une IconListBox. La deuxième ligne arrête le traitement s'il ne s'agit pas d'un clic. Ce dernier test est actuellement inutile, car seul le clic gauche génère un USER_EVENT. Mais plus tard, ça changera peut-être (clic droit, ...), et il est dont utile de prévoir cela dès le départ. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Version d'essai d'un objet IconComboBox Mer 7 Mar 2018 - 19:06 | |
| Hummm je comprends mieux ! Très intéressant. C'est une sacré mécanique que tu as mis en place ! Moi je n'irai pas si loin. Mais je vais continuer la reprise de GPP. J'ai remis le programme complètement à plat avec une nouvelle interface. En fait je reprends tout depuis le début mais pour faire quelque chose de plus simple. Avec une interface dans une seule fenêtre hors mis les fenêtres SYNEDIT d'édition gérées à part. Avec tous ces nouveaux objets que tu as créés, je devrai pouvoir m'en sortir... Encore merci. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Version d'essai d'un objet IconComboBox Mer 7 Mar 2018 - 20:28 | |
| Klaus, crois tu qu'il serai possible de changer l’icône ou le texte d'une ligne existante pour les 2 objets IconComboBox et IconListBox ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Version d'essai d'un objet IconComboBox Mer 7 Mar 2018 - 20:44 | |
| Ah, les grands esprits se rencontrent... C'est justement ce que je suis en train de coder. C'est pour ce soir... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Version d'essai d'un objet IconComboBox Mer 7 Mar 2018 - 21:02 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Version d'essai d'un objet IconComboBox Mer 7 Mar 2018 - 21:45 | |
| C'est fait avec la nouvelle version que viens de mettre en ligne. Tu peux changer séparément l'icône et/ou le libellé de n'importe quelle ligne d'un IconComboBox ou IconListBox. Voici le programme de démo: - Code:
-
' test_IconComboBox.bas
label creer, supprimer, UserEvent, creerL, supprimerL, selectionL, changeL3
dim res%, ICB%, IL%, ILB%, no%, s$, WParam%, LParam%, index%, UserICB%, UserILB% dim no_DoIcons%, no_DoIndent%, options%, no_memo% 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"
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 : 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
' 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%,1) 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
Pour la IconListBox, il y a maintenant un bouton "Change ligne 3" qui change l'icône et le libellé de la ligne 3. La même chose peut être faite pour le IconComboBox, bien sûr. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Version d'essai d'un objet IconComboBox Mer 7 Mar 2018 - 21:58 | |
| Peut être encore une idée Klaus...
Pouvoir simuler un clic sur une ligne par programme. Un peu à la façon du TRIGGER_CLICK.
Cela permettra par exemple de sélectionner des lignes au démarrage du programme par exemple... Qu'est ce que tu en penses ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Version d'essai d'un objet IconComboBox Mer 7 Mar 2018 - 22:53 | |
| J'ai corrigé un petit but dans la fonction SelectItemOfIconListBox, et maintenant, tu peux l'utiliser pour cela. Voici la démo, avec un bouton de clic sur la ligne 3: - 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% 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 : 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%,1) 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 | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Version d'essai d'un objet IconComboBox Mer 7 Mar 2018 - 23:09 | |
| | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Version d'essai d'un objet IconComboBox Mer 14 Mar 2018 - 19:18 | |
| Bonsoir Klaus ! J'aurai besoin d'un petit coup de main stp... J'essaie de mettre en place le LISTBOX que tu a créé mais j'ai quelques soucis. 1/ Je ne vois pas les icones s'afficher 2/ je n'arrive pas à désactiver la sélection multiple 3/ Je n'ai pas de retour des événements Merci d'avance. voici le code : - Code:
-
' ------------------------- DECLARATION DES VARIABLES -------------------------- DIM a% , b% , c% , d% , no% : ' Variables générales numériques DIM t$ : ' Variables générales aphabétiques
DIM res% , index% , IL% , ilb$ : ' Gestion pour la dll KGF
DIM TREE%
dim cFond% : cFond% = hex("FFFFFF") : ' blanc dim cFont% : cFont% = hex("000000") : ' noir dim cSelect% : cSelect% = hex("FF0000") : ' bleu
' --------------------------- DECLARATION DES LABELS --------------------------- LABEL menu , evenement : ' Gestion des CLICS et evenements ' -------------------------- CHARGEMENT DE LA DLL KGF -------------------------- DLL_ON "KGF.dll"
ON_USER_EVENT evenement
' ----------------------------- GESTION DES OBJETS ----------------------------- WIDTH no%,560 : HEIGHT no%,500 : COLOR no%,30,30,30 : BORDER_SMALL no% : no%=no%+1 : '
IL%=DLL_CALL2("CreateImageList",32,32) ilb$="D:\BASIC\GPP - 2.02\MonTest_32x32.ilb" res%=DLL_CALL2("LoadImageList",IL%,adr(ilb$))
TREE%=DLL_CALL3("CreateIconListBox",handle(0),IL%,3) res%=DLL_CALL5("LocateIconListBox",TREE%,5,5,(WIDTH_CLIENT(0)-10),(HEIGHT_CLIENT(0)-10)) ' --------------------------------- AFFICHAGE ---------------------------------- t$=file_find_first$ : res%=DLL_CALL6("AddItemToIconListBox",TREE%,adr(t$),4,1,0,2) : t$=file_find_next$ while t$<>"_" res%=dll_call6("AddItemToIconListBox",TREE%,adr(t$),4,1,0,1) t$=file_find_next$ end_while file_find_close
res% = dll_call4("SetColorsForIconListBox",TREE%,cFond%,cFont%,cSelect%) res% = dll_call2("OptionsForIconListBox",TREE%,0)
END
' ------------------------------ SOUS-PROGRAMMES ------------------------------- evenement: 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")) t$ = string$(50," ") res% = dll_call3("GetItemOfIconListBox",TREE%,index%,adr(t$)) t$ = trim$(t$) message "clic dans IconListBox ligne "+str$(index%)+" = "+t$ return end_if RETURN
menu:
RETURN | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Version d'essai d'un objet IconComboBox Mer 14 Mar 2018 - 22:50 | |
| J'ai corrigé le bug de la confusion entre sélection simple et multiple. La nouvelle version est officiellement publiée partout. La raison pour la non-réception des USER_EVENT est un problème de détection automatique du handle de la form 0. Normalement, ça marche bien. Dans quelques rares cas, le handle est mal déterminé. Et comme c'est vers ce handle que le USER_EVENT est envoyé... Alors, depuis longtemps, KGF.dll contient une fonction qui permet d'impose ce handle: - Code:
-
res% = dll_call1("SetMainFormHandle",handle(0)) Tu l'appeles immédiatement avant CreateIconListBox, et ça marchera. Pour les icônes, je ne vois pas - un problème de chemin, peut-être ? Essaie avec KGF.ilb en créant un objet IL% avec 16,16 comme paramètres, pour voir. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Version d'essai d'un objet IconComboBox Mer 14 Mar 2018 - 23:02 | |
| Merci Klaus. Je viens de recharger et tester de nouveau. Tout semble OK cette fois. Concernant les icônes, j'ai testé un autre fichier ilb puis de nouveau le premier et ça fonctionne aussi. Le fichier ilb c'est celui que j'ai téléchargé sur ton Webdav et il fallait que je le 'débloque' comme à chaque fois pour la dll. Merci Klaus. Pour l'info je tente de faire un explorateur de fichiers 100% Panoramic avec icônes et couleurs persos. Rien de très compliqué... juste un peu de réflexion, quelques bonnes idées, et la super dll KGF ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Version d'essai d'un objet IconComboBox Jeu 15 Mar 2018 - 0:01 | |
| Super ! Je suis content. Voilà une affaire qui roule ! | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Version d'essai d'un objet IconComboBox Jeu 15 Mar 2018 - 0:07 | |
| Argfff ! J'ai encore un petit soucis. sûrement une erreur de ma part... ATTENTION JE N AI MIS AUCUNE BARRIERE DE SECURITE - POUR L INSTANT LE CODE EST BRUT... Lorsque je clique sur un des dossiers, l'affichage s'effectue correctement mais à la fin j'ai ce message. Je ne comprends pas pourquoi ? En plus le programme ne plante pas. c'est juste dans la DLL KGF !? J'en reste là pour ce soir. On verra demain... voici le code dans son intégralité : - Spoiler:
- Code:
-
' ------------------------- DECLARATION DES VARIABLES -------------------------- DIM a% , b% , c% , d% , no% : ' Variables générales numériques DIM t$ : ' Variables générales aphabétiques
DIM res% , index% , IL% , ilb$ , doss% : ' Gestion pour la dll KGF
DIM TREE%
dim cFond% : cFond% = hex("FFFFFF") : ' blanc dim cFont% : cFont% = hex("000000") : ' noir dim cSelect% : cSelect% = hex("FF0000") : ' bleu
' --------------------------- DECLARATION DES LABELS --------------------------- LABEL menu , evenement : ' Gestion des CLICS et evenements ' -------------------------- CHARGEMENT DE LA DLL KGF -------------------------- DLL_ON "KGF.dll"
ON_USER_EVENT evenement
' ----------------------------- GESTION DES OBJETS ----------------------------- WIDTH no%,560 : HEIGHT no%,500 : COLOR no%,30,30,30 : BORDER_SMALL no% : no%=no%+1 : '
affichage("C:") END
' ------------------------------ SOUS-PROGRAMMES ------------------------------- evenement: IF BIN_AND(USER_EVENT_WPARAM,HEX("FF000000"))=HEX("0A000000") IF BIN_AND(USER_EVENT_WPARAM,HEX("00FF0000"))<>HEX("00010000") THEN RETURN index%=BIN_AND(USER_EVENT_WPARAM,HEX("0000FFFF")) t$ = string$(50," ") : res% = dll_call3("GetItemOfIconListBox",TREE%,index%,adr(t$)) t$ = trim$(t$) : CAPTION 0,"Ligne "+str$(index%)+" = "+t$ IF index%<=doss% res%=dll_call1("DeleteIconListBox",TREE%) : PAUSE 1000 affichage(DIR_CURRENT$+""+t$) END_IF END_IF RETURN
' --------------------------------- AFFICHAGE ---------------------------------- SUB affichage(chem$)
IL%=DLL_CALL2("CreateImageList",15,15) ilb$="D:\BASIC\GPP - 2.02\lolo.ilb" res%=DLL_CALL2("LoadImageList",IL%,adr(ilb$))
res% = dll_call1("SetMainFormHandle",handle(0)) TREE%=DLL_CALL3("CreateIconListBox",handle(0),IL%,3) res%=DLL_CALL5("LocateIconListBox",TREE%,5,5,(WIDTH_CLIENT(0)-10),(HEIGHT_CLIENT(0)-10)) DIR_CHANGE chem$ : CAPTION 0,DIR_CURRENT$ : doss%=0 ' Affichage des dossiers t$=FILE_FIND_FIRST$ IF t$<>"." THEN res%=DLL_CALL6("AddItemToIconListBox",TREE%,adr(t$),1,1,0,0) t$=FILE_FIND_NEXT$ while t$<>"_" IF DIR_EXISTS(t$)=1 THEN res%=dll_call6("AddItemToIconListBox",TREE%,adr(t$),2,1,0,0) : doss%=doss%+1 t$=FILE_FIND_NEXT$ end_while FILE_FIND_CLOSE
' Affichage des fichiers t$=FILE_FIND_FIRST$ IF t$<>"." THEN res%=DLL_CALL6("AddItemToIconListBox",TREE%,adr(t$),3,1,0,0) t$=FILE_FIND_NEXT$ while t$<>"_" IF DIR_EXISTS(t$)<>1 THEN res%=dll_call6("AddItemToIconListBox",TREE%,adr(t$),4,1,0,0) t$=FILE_FIND_NEXT$ end_while FILE_FIND_CLOSE
res% = dll_call2("OptionsForIconListBox",TREE%,0) res% = dll_call4("SetColorsForIconListBox",TREE%,cFond%,cFont%,cSelect%) END_SUB
menu:
RETURN
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Version d'essai d'un objet IconComboBox Jeu 15 Mar 2018 - 0:58 | |
| Ca marchera beaucoup mieux comme ça: - Code:
-
' ------------------------- DECLARATION DES VARIABLES -------------------------- DIM a% , b% , c% , d% , no% : ' Variables générales numériques DIM t$ : ' Variables générales aphabétiques
DIM res% , index% , IL% , ilb$ , doss% : ' Gestion pour la dll KGF
DIM TREE%
dim cFond% : cFond% = hex("FFFFFF") : ' blanc dim cFont% : cFont% = hex("000000") : ' noir dim cSelect% : cSelect% = hex("FF0000") : ' bleu
' --------------------------- DECLARATION DES LABELS --------------------------- LABEL menu , evenement : ' Gestion des CLICS et evenements ' -------------------------- CHARGEMENT DE LA DLL KGF -------------------------- DLL_ON "KGF.dll"
ON_USER_EVENT evenement
' ----------------------------- GESTION DES OBJETS ----------------------------- WIDTH no%,560 : HEIGHT no%,500 : COLOR no%,30,30,30 : BORDER_SMALL no% : no%=no%+1 : '
' ----------------------------- CREATION DE L'IMAGELIST ------------------------ ' (section déplacée ici par Klaus) IL%=DLL_CALL2("CreateImageList",15,15) ilb$="D:\BASIC\GPP - 2.02\lolo.ilb" res%=DLL_CALL2("LoadImageList",IL%,adr(ilb$))
affichage("C:") END
' ------------------------------ SOUS-PROGRAMMES ------------------------------- evenement: IF BIN_AND(USER_EVENT_WPARAM,HEX("FF000000"))=HEX("0A000000") IF BIN_AND(USER_EVENT_WPARAM,HEX("00FF0000"))<>HEX("00010000") THEN RETURN index%=BIN_AND(USER_EVENT_WPARAM,HEX("0000FFFF")) t$ = string$(50," ") : res% = dll_call3("GetItemOfIconListBox",TREE%,index%,adr(t$)) t$ = trim$(t$) : CAPTION 0,"Ligne "+str$(index%)+" = "+t$ IF index%<=doss% res%=dll_call1("DeleteIconListBox",TREE%) : PAUSE 1000 affichage(DIR_CURRENT$+chr$(92)+t$) : ' <====== le backslash était "mangé" par le forum ! END_IF END_IF RETURN
' --------------------------------- AFFICHAGE ---------------------------------- SUB affichage(chem$)
res% = dll_call1("SetMainFormHandle",handle(0)) TREE%=DLL_CALL3("CreateIconListBox",handle(0),IL%,3) res%=DLL_CALL5("LocateIconListBox",TREE%,5,5,(WIDTH_CLIENT(0)-10),(HEIGHT_CLIENT(0)-10)) DIR_CHANGE chem$ : CAPTION 0,DIR_CURRENT$ : doss%=0 ' Affichage des dossiers t$=FILE_FIND_FIRST$ IF t$<>"." THEN res%=DLL_CALL6("AddItemToIconListBox",TREE%,adr(t$),1,1,0,0) t$=FILE_FIND_NEXT$ while t$<>"_" IF DIR_EXISTS(t$)=1 THEN res%=dll_call6("AddItemToIconListBox",TREE%,adr(t$),2,1,0,0) : doss%=doss%+1 t$=FILE_FIND_NEXT$ end_while FILE_FIND_CLOSE
' Affichage des fichiers t$=FILE_FIND_FIRST$ IF t$<>"." THEN res%=DLL_CALL6("AddItemToIconListBox",TREE%,adr(t$),3,1,0,0) t$=FILE_FIND_NEXT$ while t$<>"_" IF DIR_EXISTS(t$)<>1 THEN res%=dll_call6("AddItemToIconListBox",TREE%,adr(t$),4,1,0,0) t$=FILE_FIND_NEXT$ end_while FILE_FIND_CLOSE
res% = dll_call2("OptionsForIconListBox",TREE%,0) res% = dll_call4("SetColorsForIconListBox",TREE%,cFond%,cFont%,cSelect%) END_SUB
menu:
RETURN J'ai remplacé un backslash par chr$(92) - il était mangé par le forum. Mais, surtout, j'ai sorti la création de l'objet IL% de la sub. Cet objet ne doit être créé qu'une seule fois, au démarrage. Puis, à chaque création de TREE%, on réutilise le même objet IL%. Sinon, comme tu en supprimes pas l'objet IL% avant de le recréer, tu empiles plein de copies de IL% en mémoire, et ça pla,nte à terme. Il faut ajouter une sécurité importante: - "inactive 0" au début de affichage - "active 0" à la fin de affichage | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Version d'essai d'un objet IconComboBox Jeu 15 Mar 2018 - 7:45 | |
| Bonjour Klaus Merci pour ton aide. Ce qui est surprenant c'est que lors du 1er clic et seulement le premier j'ai toujours le même message d'erreur de KGF. Ensuite sur les autres clics tout va bien. Concernant INACTIVE 0 et ACTIVE 0 je les ai placé au début et à la fin de la SUB affichage(). J'ai tenté de les placer dans le sous-programme evenement mais rien n'y fait. J'ai toujours un plantage sur le 1er clic. C'est bizarre non ?! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Version d'essai d'un objet IconComboBox Jeu 15 Mar 2018 - 12:21 | |
| Tel que c'est ici, je n'ai aucun message d'erreur. Et tant que la SUB n'a pas terminé son boulot, on ne peut pas cliquer sur une ligné déjà affichée, ce qui est essentiel. - Code:
-
' ------------------------- DECLARATION DES VARIABLES -------------------------- DIM a% , b% , c% , d% , no% : ' Variables générales numériques DIM t$ : ' Variables générales aphabétiques
DIM res% , index% , IL% , ilb$ , doss% : ' Gestion pour la dll KGF
DIM TREE%
dim cFond% : cFond% = hex("FFFFFF") : ' blanc dim cFont% : cFont% = hex("000000") : ' noir dim cSelect% : cSelect% = hex("FF0000") : ' bleu
' --------------------------- DECLARATION DES LABELS --------------------------- LABEL menu , evenement : ' Gestion des CLICS et evenements ' -------------------------- CHARGEMENT DE LA DLL KGF -------------------------- DLL_ON "KGF.dll"
ON_USER_EVENT evenement
' ----------------------------- GESTION DES OBJETS ----------------------------- WIDTH no%,560 : HEIGHT no%,500 : COLOR no%,30,30,30 : BORDER_SMALL no% : no%=no%+1 : '
' ----------------------------- CREATION DE L'IMAGELIST ------------------------ ' (section déplacée ici par Klaus) IL%=DLL_CALL2("CreateImageList",15,15) ilb$="D:\BASIC\GPP - 2.02\lolo.ilb" res%=DLL_CALL2("LoadImageList",IL%,adr(ilb$))
affichage("C:") END
' ------------------------------ SOUS-PROGRAMMES ------------------------------- evenement: IF BIN_AND(USER_EVENT_WPARAM,HEX("FF000000"))=HEX("0A000000") IF BIN_AND(USER_EVENT_WPARAM,HEX("00FF0000"))<>HEX("00010000") THEN RETURN index%=BIN_AND(USER_EVENT_WPARAM,HEX("0000FFFF")) t$ = string$(50," ") : res% = dll_call3("GetItemOfIconListBox",TREE%,index%,adr(t$)) t$ = trim$(t$) : CAPTION 0,"Ligne "+str$(index%)+" = "+t$ IF index%<=doss% res%=dll_call1("DeleteIconListBox",TREE%) : PAUSE 1000 affichage(DIR_CURRENT$+chr$(92)+t$) : ' <====== le backslash était "mangé" par le forum ! END_IF END_IF RETURN
' --------------------------------- AFFICHAGE ---------------------------------- SUB affichage(chem$) inactive 0 res% = dll_call1("SetMainFormHandle",handle(0)) TREE%=DLL_CALL3("CreateIconListBox",handle(0),IL%,3) res%=DLL_CALL5("LocateIconListBox",TREE%,5,5,(WIDTH_CLIENT(0)-10),(HEIGHT_CLIENT(0)-10)) DIR_CHANGE chem$ : CAPTION 0,DIR_CURRENT$ : doss%=0 ' Affichage des dossiers t$=FILE_FIND_FIRST$ IF t$<>"." THEN res%=DLL_CALL6("AddItemToIconListBox",TREE%,adr(t$),1,1,0,0) t$=FILE_FIND_NEXT$ while t$<>"_" IF DIR_EXISTS(t$)=1 THEN res%=dll_call6("AddItemToIconListBox",TREE%,adr(t$),2,1,0,0) : doss%=doss%+1 t$=FILE_FIND_NEXT$ end_while FILE_FIND_CLOSE
' Affichage des fichiers t$=FILE_FIND_FIRST$ IF t$<>"." THEN res%=DLL_CALL6("AddItemToIconListBox",TREE%,adr(t$),3,1,0,0) t$=FILE_FIND_NEXT$ while t$<>"_" IF DIR_EXISTS(t$)<>1 THEN res%=dll_call6("AddItemToIconListBox",TREE%,adr(t$),4,1,0,0) t$=FILE_FIND_NEXT$ end_while FILE_FIND_CLOSE
res% = dll_call2("OptionsForIconListBox",TREE%,0) res% = dll_call4("SetColorsForIconListBox",TREE%,cFond%,cFont%,cSelect%) active 0 END_SUB
menu:
RETURN | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 15 Mar 2018 - 13:09 | |
| J' ai fait un essai et je n' ai pas de message de retour en cliquant sur l' objet. Qu' ai je fait de mal ? - Code:
-
hide 0 variables() constantes() labels() init() gui() RedimensionForm0() on_user_event UserEvent show 0 end
sub variables() dim no% dim index% dim UserILB% dim res% dim s$ end_sub
sub constantes() dim_local i% dim Kgf$ : Kgf$="C:\KGF\KGF.dll" dim Ilb$ : Ilb$="C:\KGF\KGF.ilb" dim Fra%(3) : for i%=1 to 3 : no%=no%+1 : Fra%(i%)=no% : next i% dim RetList% : no%=no%+1 : RetList%=no% dim IL% dim ILB% end_sub
sub labels() label clic label change label dclic label resize label shutdown label UserEvent end_sub
sub init() dll_on Kgf$ IL% = dll_call2("CreateImageList",16,16) res% = dll_call2("LoadImageList",IL%,adr(ilb$)) end_sub
sub gui() dim_local i%
height 0,600 width 0,900 top 0,(screen_y-height(0))/2 left 0,(screen_x-width(0))/2 color 0,0,0,255 font_name 0,"Arial" font_size 0,8 caption 0,"Storys Book"
for i%=1 to 3 : panel Fra%(i%) : next i% ILB% = dll_call3("CreateIconListBox",handle(0),IL%,3) s$ = "Déjeuner" res% = dll_call6("AddItemToIconListBox",ILB%,adr(s$),1,0,0,0) on_resize 0,resize on_close 0,shutdown end_sub
clic: return
change: return
dclic: return
resize: RedimensionForm0() return
shutdown: ILB% = dll_call1("DeleteIconListBox",ILB%) return
UserEvent: 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
sub RedimensionForm0()
height Fra%(1),28 width Fra%(1),width_client(0)-10 top Fra%(1),5 left Fra%(1),5
res% = dll_call5("LocateIconListBox",ILB%,5,top(Fra%(1))+height(Fra%(1))+5,300,height_client(0)-76) height Fra%(2),height_client(0)-76 width Fra%(2),width_client(0)-315 top Fra%(2),top(Fra%(1))+height(Fra%(1))+5 left Fra%(2),310 height Fra%(3),28 width Fra%(3),width_client(0)-10 top Fra%(3),height_client(0)-33 left Fra%(3),5 end_sub | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Version d'essai d'un objet IconComboBox Jeu 15 Mar 2018 - 13:24 | |
| Rien... tu tombes sur le même problème que MiniBug: dans certains cas, KGF.dll de détermine pas correctement le handle de la form 0. Or, l'objet IconListBox en a besoin pour envoyer le USER_EVENT. Pour cela, depuis longtemps, il y a une fonction dans KGF.dll: - Code:
-
res% = dll_call1("SetMainFormHandle",handle(0)) Tu insères cet appel juste avant l'appel de CreateIconListBox, et tout marchera bien. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 15 Mar 2018 - 13:27 | |
| Cela ne viendrait il pas du redimensionnement du form 0 ? | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 15 Mar 2018 - 13:29 | |
| J' ai fait comme tu as dit et tout est rentré dans l' ordre. Merci Klaus. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Version d'essai d'un objet IconComboBox Jeu 15 Mar 2018 - 18:29 | |
| Bonsoir Klaus ! J'ai repris ton code d'Aujourd'hui à 12:21 et j'ai même rechargé la DLL. Lors du premier clic sur la LISTBOX j'ai toujours la même erreur ! et seulement la première fois. Après tout fonctionne correctement. As tu essayé de cliqué sur l'un des dossiers pour voir si tu rencontrais la même erreur ? EDIT : Salut Yannick, ça fait plaisir de te voir ! | |
| | | Contenu sponsorisé
| Sujet: Re: Version d'essai d'un objet IconComboBox | |
| |
| | | | Version d'essai d'un objet IconComboBox | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |