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 |
|
|
| [Résolu] Soucis IconListBox de KGF | |
| | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: [Résolu] Soucis IconListBox de KGF Mar 3 Nov 2020 - 12:49 | |
| Normalement, il suffit de placer - Code:
-
res% = dll_call1("UnblockIconListBox",LB_ssp%) juste avant le RETURN de ta routine USER_EVENT. LB_ssp est l'identifiant de ta IconListBox. Je teste avec ceci (ça vient de chez toi): - Code:
-
' test_Minibug_IconListBox.bas
label UserEvent
dim res%, no%, PAN_menu%(10), for%(10), t$, CONT_ssp%, IL%, chemin$, LB_ssp% dim txt$, i%, cnt%, index%, LP%, WP%
for%(0) = 0 no% = 17 chemin$ = "" cnt% = 0 full_space 0
dll_on "KGF.dll" on_user_event UserEvent
PANEL no% : HIDE no% : PARENT no%,FOR%(0) : TOP no%,52 : COLOR no%,60,60,60 : show no% : ' Création du MENU OBJETS dans la fenetre principale WIDTH no%,WIDTH_CLIENT(FOR%(0))-1 : HEIGHT no%,HEIGHT_CLIENT(FOR%(0))-52 : PAN_menu%(3)=no% : no%=no%+1 : '
CONTAINER no% : PARENT no%,PAN_menu%(3) : LEFT no%,8 : TOP no%,2 : WIDTH no%,257 : HEIGHT no%,572 : ' Positionnement des CONTAINERS d'affichage des SSP COLOR no%,60,60,60 : FONT_COLOR no%,230,230,230 : FONT_NAME no%,"Segoe UI" : FONT_SIZE no%,12 : ' Mep couleur, police, taille et titre des CONTAINERs ' datas() t$=" "+t$+" " : ' Lecture des informations CONTAINERs et HINTs CAPTION no%,t$ : CONT_ssp%=no% : no%=no%+1 ' --------------- CREATION DE L'IMAGELIST --------------- IL%=DLL_CALL2("CreateImageList",15,15) : ' ' t$=chemin$+"\ilb\gestssp.ilb" : ' t$=chemin$+"KGF.ilb" : ' res%=DLL_CALL2("LoadImageList",IL%,adr(t$)) : ' ' --------------- CREATION DU LISTBOX (liste des sous-programmes) ---------------- res%=dll_call1("SetMainFormHandle",handle(0)) : ' LB_ssp%=DLL_CALL3("CreateIconListBox",handle(CONT_ssp%),IL%,1) : ' t$="Segoe UI" : res%=DLL_CALL3("SetDefaultFontOfIconListBox",LB_ssp%,ADR(t$),10) : ' res%=DLL_CALL5("LocateIconListBox",LB_ssp%,5,20,(WIDTH_CLIENT(CONT_ssp%)-10),(HEIGHT_CLIENT(CONT_ssp%)-25)) : ' res%=dll_call2("OptionsForIconListBox",LB_ssp%,1) : ' res%=dll_call2("SetMultiSelectionLimitOfIconListBox",LB_ssp%,9) : ' res%=dll_call4("SetColorsForIconListBox",LB_ssp%,HEX("909090"),HEX("000000"),HEX("000090")) for i%=1 to 20 txt$ = "aaaaaaaaaaaaaaaa "+str$(i%) res% = dll_call6("AddItemToIconListBox",LB_ssp%,adr(txt$),17, 17, 18, 0) next i% end
UserEvent: LP% = user_event_lparam WP% = user_event_wparam if bin_and(WP%,hex("FF000000"))=hex("0A000000") : ' un IconListBox ? if bin_and(WP%,hex("00FF0000"))<>hex("00010000") then return : ' pas un clic dans une ligne ? if LP%<>LB_ssp% then return : ' pas le ICB attendu ? index% = bin_and(WP%,hex("0000FFFF")) off_user_event : ' *********** désactiver les USER_EVENT en cas de longs traitements cnt% = cnt% + 1 caption 0,"Click no "+str$(cnt%)+" dans ligne "+str$(index%) : ' récupérer le numéro de la ligne cliquée res% = dll_call1("UnblockIconListBox",LB_ssp%) on_user_event UserEvent : ' *********** résactiver les USER_EVENT return end_if return : ' :
Là, tu peux cliquer comme tu veux - tout marche bien. Maintenant, je n'ai pas franchement la disponibilité pour installer GPP, en comprendre le fonctionnement et tester en grandeur nature. Tu peux cependant faire la chose suivante: dans ta routine USER_EVENT, tu peux désactiver l'essentiel du traitement en ne gardant que le squelette (désactiver tout ce qui est après le OFF_USER_EVENT et avant l'appel de la fonction UnblockIconListBox) en insérant trois lignes, à l'image de dl'example ci-dessous - Code:
-
UserEvent: LP% = user_event_lparam WP% = user_event_wparam if bin_and(WP%,hex("FF000000"))=hex("0A000000") : ' un IconListBox ? if bin_and(WP%,hex("00FF0000"))<>hex("00010000") then return : ' pas un clic dans une ligne ? if LP%<>LB_ssp% then return : ' pas le ICB attendu ? index% = bin_and(WP%,hex("0000FFFF")) off_user_event : ' *********** désactiver les USER_EVENT en cas de longs traitements if 1=2 : ' ####################### pour désactiver la suite cnt% = cnt% + 1 caption 0,"Click no "+str$(cnt%)+" dans ligne "+str$(index%) : ' récupérer le numéro de la ligne cliquée end_if : ' ####################### fin de la désactivation pause 500 : ' ##################### simuler un traitement d'une certaine longueur... res% = dll_call1("UnblockIconListBox",LB_ssp%) on_user_event UserEvent : ' *********** résactiver les USER_EVENT return end_if return
Là, s'il y a encore un problème d'affichage, ce sea alors lié à la DLL. Sinon, il faudrait voir dans ton code... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: [Résolu] Soucis IconListBox de KGF Mar 3 Nov 2020 - 12:53 | |
| Ok Klaus,
je regarde ça tout à l'heure. Là je dois repartir... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: [Résolu] Soucis IconListBox de KGF Mar 3 Nov 2020 - 13:11 | |
| Moi aussi. La tournée des médecins... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: [Résolu] Soucis IconListBox de KGF Mar 3 Nov 2020 - 17:26 | |
| Ok Klaus, ton test est plutôt concluant chez moi... Le problème c'est que je rajoute un traitement quand une ligne est sélectionnée : res%=dll_call5("SetItemFontColorOfIconListBox",LB_ssp%,index%,255,255,255) res%=dll_call6("SetItemFontAttributesOfIconListBox",LB_ssp%,index%,1,0,0,0) res%=dll_call6("ChangeElementIconInIconListBox",LB_ssp%,index%,1,0,0,0) Et quand une ligne est désélectionnée : res%=dll_call5("SetItemFontColorOfIconListBox",LB_ssp%,index%,0,0,0) res%=dll_call6("SetItemFontAttributesOfIconListBox",LB_ssp%,index%,0,0,0,0) res%=dll_call6("ChangeElementIconInIconListBox",LB_ssp%,index%,2,0,0,0) Et j'ai bien l'impression que c'est dans ce cas de figure qu'il y a un soucis. En plus j'ai essayé de rajouter ces lignes dans ton exemple (repris de mon code). Mais j'ai un décalage dans le traitement ?! Du coup je n'ai pas pu tester. Voici le code avec mes rajouts : - Code:
-
' test_Minibug_IconListBox.bas
label UserEvent
dim res%, no%, PAN_menu%(10), for%(10), t$, CONT_ssp%, IL%, chemin$, LB_ssp% dim txt$, i%, cnt%, index%, LP%, WP%
DIM u$ ,MEM_ssp%
for%(0) = 0 no% = 17 chemin$ = "" cnt% = 0 full_space 0
dll_on "D:\PROGRAMMATION\GPP2\dll\KGF.dll" on_user_event UserEvent
PANEL no% : HIDE no% : PARENT no%,FOR%(0) : TOP no%,52 : COLOR no%,60,60,60 : show no% : ' Création du MENU OBJETS dans la fenetre principale WIDTH no%,WIDTH_CLIENT(FOR%(0))-1 : HEIGHT no%,HEIGHT_CLIENT(FOR%(0))-52 : PAN_menu%(3)=no% : no%=no%+1 : '
CONTAINER no% : PARENT no%,PAN_menu%(3) : LEFT no%,8 : TOP no%,2 : WIDTH no%,257 : HEIGHT no%,572 : ' Positionnement des CONTAINERS d'affichage des SSP COLOR no%,60,60,60 : FONT_COLOR no%,230,230,230 : FONT_NAME no%,"Segoe UI" : FONT_SIZE no%,12 : ' Mep couleur, police, taille et titre des CONTAINERs t$=" "+t$+" " : CAPTION no%,t$ : CONT_ssp%=no% : no%=no%+1 ' MEMO des sous-programmes MEMO no% : HEIGHT no%,200 : HIDE no% : MEM_ssp%=no% : no%=no%+1 : '
' --------------- CREATION DE L'IMAGELIST --------------- IL%=DLL_CALL2("CreateImageList",15,15) : ' ' t$=chemin$+"\ilb\gestssp.ilb" : ' t$=chemin$+"KGF.ilb" : ' res%=DLL_CALL2("LoadImageList",IL%,adr(t$)) : ' ' --------------- CREATION DU LISTBOX (liste des sous-programmes) ---------------- res%=dll_call1("SetMainFormHandle",handle(0)) : ' LB_ssp%=DLL_CALL3("CreateIconListBox",handle(CONT_ssp%),IL%,1) : ' t$="Segoe UI" : res%=DLL_CALL3("SetDefaultFontOfIconListBox",LB_ssp%,ADR(t$),10) : ' res%=DLL_CALL5("LocateIconListBox",LB_ssp%,5,20,(WIDTH_CLIENT(CONT_ssp%)-10),(HEIGHT_CLIENT(CONT_ssp%)-25)) : ' res%=dll_call2("OptionsForIconListBox",LB_ssp%,1) : ' res%=dll_call2("SetMultiSelectionLimitOfIconListBox",LB_ssp%,9) : ' res%=dll_call4("SetColorsForIconListBox",LB_ssp%,HEX("909090"),HEX("000000"),HEX("000090")) for i%=1 to 20 txt$ = "aaaaaaaaaaaaaaaa "+str$(i%) res% = dll_call6("AddItemToIconListBox",LB_ssp%,adr(txt$),17, 17, 18, 0) next i% end
UserEvent: LP% = user_event_lparam WP% = user_event_wparam if bin_and(WP%,hex("FF000000"))=hex("0A000000") : ' un IconListBox ? if bin_and(WP%,hex("00FF0000"))<>hex("00010000") then return : ' pas un clic dans une ligne ? if LP%<>LB_ssp% then return : ' pas le ICB attendu ? index% = bin_and(WP%,hex("0000FFFF")) off_user_event : ' *********** désactiver les USER_EVENT en cas de longs traitements u$=string$(50," ") : ' Initialisation de la variable contenant le nom du sous-programme res%=dll_call3("GetItemOfIconListBox",LB_ssp%,index%,adr(u$)) : ' u$=trim$(u$) : ' Retrait des espaces res%=dll_call2("GetAllSelectedItemsFromIconListBox",LB_ssp%,handle(MEM_ssp%)) : ' t$=LEFT$(ITEM_READ$(MEM_ssp%,COUNT(MEM_ssp%)),1) : ' On récupére le fichier du MEMO_ssp
IF t$="-" : ' Si la chaine est vide (-) res%=dll_call5("SetItemFontColorOfIconListBox",LB_ssp%,index%,0,0,0) : ' res%=dll_call6("SetItemFontAttributesOfIconListBox",LB_ssp%,index%,0,0,0,0) : ' On désactive l'affichage dans la liste res%=dll_call6("ChangeElementIconInIconListBox",LB_ssp%,index%,2,0,0,0) : ' ELSE res%=dll_call5("SetItemFontColorOfIconListBox",LB_ssp%,index%,255,255,255) : ' res%=dll_call6("SetItemFontAttributesOfIconListBox",LB_ssp%,index%,1,0,0,0) : ' On active l'affichage dans la liste res%=dll_call6("ChangeElementIconInIconListBox",LB_ssp%,index%,1,0,0,0) END_IF cnt% = cnt% + 1 caption 0,"Click no "+str$(cnt%)+" dans ligne "+str$(index%)+" "+t$ : ' récupérer le numéro de la ligne cliquée res% = dll_call1("UnblockIconListBox",LB_ssp%) on_user_event UserEvent : ' *********** résactiver les USER_EVENT return end_if return
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: [Résolu] Soucis IconListBox de KGF Mar 3 Nov 2020 - 17:44 | |
| Ok. J'ai pris ton code et je vais m'amuser avec... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: [Résolu] Soucis IconListBox de KGF Mar 3 Nov 2020 - 17:56 | |
| Ben... je ne vois pas où est le problème. Je peux cliquer à n'importe quelle vitesse, n'importe où, ça se passe bien. Une ligne nouvellement sélectionnée change de couleur et la police est blanche, une ligne désélectionnée reprend sa couleur initiale et la police est noire. ET, comme il est indiqué par - Code:
-
res%=dll_call2("SetMultiSelectionLimitOfIconListBox",LB_ssp%,9) seules 9 lignes peuvent être sélectionnées en même temps. Une tentative de sélectionner une 10ème ligne est simplement ignorée. Pour moi, ça marche. Voici ce que ça donne: C'est correct, non ? | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: [Résolu] Soucis IconListBox de KGF Mar 3 Nov 2020 - 18:44 | |
| Ben chez moi, il y a un décalage dans les traitements... J'ai rechargé la dll plusieurs fois croyant que cela venait de là mais non. EDIT : Ca y est je viens de comprendre, c'était à cause des icônes. Je n'avais pas remis le bon chemin... Donc effectivement de cette façon ça fonctionne parfaitement. Il va donc falloir que je reprenne mon code pour trouver d'ou cela provient. Un grand merci Klaus pour le temps passé et ta patience... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: [Résolu] Soucis IconListBox de KGF Mar 3 Nov 2020 - 20:53 | |
| Ouf ! Content qu'on avance ! Je suivrai cela de près, car tu as mis le doigt sur un problème majeur de gestion de procédures travaillant simultanément de façon asynchrone, et comme aucune de ces procédures n'est réentrante, il est essentiel, capital, qu'on trouve le moyen de sécuriser tout cela. Il en va de la crédbilité de KGF.dll, bien au-dela de IconListBox, et j'y tiens particulièrement ! | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: [Résolu] Soucis IconListBox de KGF Mar 3 Nov 2020 - 21:20 | |
| Bon eh bien je suis content que tu sois content ! Plus sérieusement, j'ai isolé les lignes qui posaient problèmes. Il s'agit des dernières lignes dans le sous-programme dont une : TRIGGER_CLICKBon il y a encore un tout petit peu de parasitage mais seulement à haute intensité de clics et sans incidence sur le résultat. Puisque c'est seulement la couleur et l'option texte qui dans ce cas ne sont pas synchro, mais cela reste moins grave. Je vais quand même continué mes recherches pour essayer d'isoler complètement ses éléments perturbateurs. Merci Klaus pour tes conseils. Tu trouves toujours une solution... Vraiment bravo pour ta ténacité et merci pour ta disponibilité. | |
| | | Contenu sponsorisé
| Sujet: Re: [Résolu] Soucis IconListBox de KGF | |
| |
| | | | [Résolu] Soucis IconListBox de KGF | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |