Page 1 sur 1

ListIconGadget et AddGadgetItem bug ou pas ?

Publié : sam. 22/nov./2008 18:41
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 ?

Publié : sam. 22/nov./2008 19:12
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.

Publié : sam. 22/nov./2008 19:29
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.

Publié : sam. 22/nov./2008 19:50
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.

Publié : sam. 22/nov./2008 19:52
par Ollivier
En voyant le code, je m'interroge : Il n'y a plus besoin de CreateGadgetList() ?

Publié : sam. 22/nov./2008 19:53
par comtois
Oui avec la 4.30 c'est fini, c'est automatique.
tu peux toujours utiliser UseGadgetList() si tu en as besoin