ListIconGadget et AddGadgetItem bug ou pas ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

ListIconGadget et AddGadgetItem bug ou pas ?

Message par comtois »

je découvre la bibliothèque gadget :)

une chose me surprend, tout d'abord le code :

Code : Tout sélectionner

If OpenWindow(0, 100, 200, 650, 500, "Ma bibliothèque", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)=0
  MessageRequester("Erreur","C'est balot !",0)
  End
EndIf

ListIconGadget(0, 0, 0, 400,300,"Nom",197, #PB_ListIcon_FullRowSelect | #PB_ListIcon_GridLines)
  AddGadgetColumn(0,1,"Prénom",197)

Declare AfficheAuteurs()

AfficheAuteurs()

;-Boucle principale
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow

Procedure AfficheAuteurs()
  ClearGadgetItems(0)
  For i=1 To 5
    AddGadgetItem(0, i, "nom" + Str(i)+Chr(10)+ "prenom"+Str(i))
  Next i
EndProcedure
Rien ne s'affiche dans la deuxième colonne !

Si je change la boucle dans la procédure AfficheAuteurs(), en commençant par zéro , là c'est bon , j'ai bien le nom et le prénom.

Code : Tout sélectionner

  For i=0 To 5
    AddGadgetItem(0, i, "nom" + Str(i)+Chr(10)+ "prenom"+Str(i))
  Next i
ok je veux bien que position commence à 0, mais alors pourquoi afficher quelque chose dans le premier cas ? et à la position 0 alors que je demande la position 1 ? sans doute qu'aucun emplacement ne doit rester vide ,dans ce cas c'est une erreur si je demande une position alors que la précédente n'existe pas , et devrait être signalé ou pas ? Bref , rien de grave, j'ai compris mon erreur, mais je me demandais s'il ne s'agissait pas d'un bug ?
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Si on reprend le code qui ne va pas

Code : Tout sélectionner

 For i=1 To 5
le premier index est i qui vaut 1. Le premier sous- élément ne peut pas être ajouté à la position 1.

Je me souviens avoir lu dans la doc Microsoft (je le sais pour avoir utilisé les API correspondantes) que l'on ne peut ajouter un sous-élément à une position n que si l'élément à la position n-1 existe;
Ce n'est pas le cas à chaque tour de boucle.

Pour la 1er colonne, le message utilisé pour insérer un élément est LVM_INSERTITEM et pour les colonnes suivantes, le message est LVM_SETITEM, ces 2 messages ont un comportement différents.

Cela devient vrai et fonctionne dans le cas ou la boucle commence à 0.

Donc pas de bug mais des précisions à mettre dans la doc.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

oui je viens de comparer l'aide anglaise et française,il manque un petit truc dans l'aide française.

Je suis peut-être exigeant , mais je me demandais si le compilo ne pouvait pas avertir que je tentais d'ajouter un élément à un emplacement alors que l'emplacement précédent est vide.

Bon je vais corriger la doc selon la doc anglaise
The position specifies the item index where the new item should be inserted. To add the item at the start, use an index of 0. To add this item to the end of the current item list, use a value of -1. Remember that when you add an item that all current items which come after the new one will have their positions increased by 1.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

je suis balot , en fait j'ai juste à tester CountGadgetItems(0) !

Faut vraiment que je m'y mette aux gadgets, et que je laisse tomber la 3D pendant un moment.

Merci Denis pour l'explication.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

En voyant le code, je m'interroge : Il n'y a plus besoin de CreateGadgetList() ?
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Oui avec la 4.30 c'est fini, c'est automatique.
tu peux toujours utiliser UseGadgetList() si tu en as besoin
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Répondre