Page 1 sur 1
[Résolu] Probléme SetGadgetItemData
Publié : sam. 06/févr./2016 18:43
par JohnJohnsonSHERMAN
Attention, vérifiez que vous n´etes ni drogué, ni alcoolisé avant de lire eci, la logique élémentaire n´y a plus cours...
SetGadgetItemData déconne dans une procédure d´un de mes programmes
exemple :
Code : Tout sélectionner
AddGadgetItem(#liste,-1,"Element de ma liste")
SetGadgetItemData(#liste,-1,CountGadgetItems(#liste))
;le tout répété un certain nombre de fois
devrait affecter la valeur personnalisée 1 au 1er élément de ma liste, 2 au 2é...
Et bien pas du tout!!!
Lorsque je fais GetGadgetItemData(#liste,[n´importe quel élément]) il me renvoie
toujours 0, meme quand je n´avait pas affecté la valeur de CountGadgetItems, mais une constante comme 2 par exemple !
Troublant non?
Je vous met le code complet demain
Imaginez juste le truc : on lui affecte une valeur définie, et quand on la lui redemande, c´est devenu 0!!!
Re: Probléme SetGadgetItemData
Publié : sam. 06/févr./2016 19:02
par Anonyme2
Jamais vu de -1 comme 2ème paramètre pour SetGadgetItemData(#liste,-1,CountGadgetItems(#liste))
Lis la doc
"Le premier élément commence à 0. "
Le code suivant devrait fonctionner en testant bien sur que la liste n'est pas vide.
Code : Tout sélectionner
SetGadgetItemData(#liste,CountGadgetItems(#liste)-1,CountGadgetItems(#liste))
Tu peux aussi utiliser une boucle for comme dans l'exemple de la doc PB
Re: Probléme SetGadgetItemData
Publié : sam. 06/févr./2016 19:42
par falsam
JohnJohnsonSHERMAN a écrit :Attention, vérifiez que vous n´etes ni drogué, ni alcoolisé avant de lire eci, la logique élémentaire n´y a plus cours...
Commences par voir dans quel états tu erres ^^
Denis a raison.

La syntaxe est SetGadgetItemData(#Gadget,
Item, Value) Item doit être un numéro d'item valide. Le premier commence à 0.
Un exemple fonctionnel qui va affecté une valeur à chaque item du tableau à l'intérieur d'une boucle for ... next et lire chaque valeur d'item dans une autre boucle du meme type.
Code : Tout sélectionner
Enumeration Window
#MainForm
EndEnumeration
Enumeration Gadget
#Listicon
EndEnumeration
If OpenWindow(#MainForm, 0, 0, 800, 600, "New Project", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListIconGadget(#Listicon, 10, 10, 780, 580, "Col1", 750)
;Quelques items
For i = 0 To 9
AddGadgetItem(#Listicon, -1, "Row " + i)
;Pour chaque item on associe une valeur (ça peut etre par exemple un numéro d'enregistrement)
SetGadgetItemData(#Listicon, i, 100 + i)
Next
;Lecture de chaque data
For i = 0 To CountGadgetItems(#Listicon) - 1
Debug GetGadgetItemData(#Listicon, i)
Next
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndIf
Re: Probléme SetGadgetItemData
Publié : dim. 07/févr./2016 11:04
par JohnJohnsonSHERMAN
J´avais déja essayé en mettant "CountGadgetItem(#liste)" a la place de ce -1, mais ca ne fonctionnait pas non plus... Je vais réessayer aujourd´hui et je vous tient au courant.
Re: Probléme SetGadgetItemData
Publié : dim. 07/févr./2016 11:21
par Anonyme2
JohnJohnsonSHERMAN a écrit :J´avais déja essayé en mettant "CountGadgetItem(#liste)" a la place de ce -1, mais ca ne fonctionnait pas non plus... Je vais réessayer aujourd´hui et je vous tient au courant.
C'est
CountGadgetItem(#liste) - 1 car pour une liste par exemple de 10 éléments, les indices vont de 0 à 9
Si ta liste contient 5 éléments, les indices vont de 0 à 4 mais si tu utilises CountGadgetItem(#liste) tu auras 5 et non 4 pour accèder au dernier élément, il faut déduire -1
Re: Probléme SetGadgetItemData
Publié : dim. 07/févr./2016 13:05
par Ar-S
JohnJohnsonSHERMAN, je te conseils d'utiliser le debug à outrance, ça te permettra de comprendre et de corriger des erreurs bêtes comme celle ci qui font parfois rager.
Tu as une constante liste : Utilise Debug #Liste
Tu as une boucle For i = 0 to x
ajoute debug " i = " + str(i) dans ta boucle
etc.. Ce n'est pas une perte de temps et vraiment ça aide.
Re: Probléme SetGadgetItemData
Publié : dim. 07/févr./2016 13:52
par JohnJohnsonSHERMAN
Tout est rentré dans l´ordre a présent ! En fait je me suis arrahé les cheveux pour rien, c´était juste que pour tester, j´avais fait un debug, lequel pointait vers une valeur inexsitante (CountGadgetItems(#liste)+1, d´ou ce 0 permanent.
Comme quoi on peut chercher longtemps pour un truc qu´on a sous le nez
Je m´excuse du dérangement...