Page 1 sur 1

Selection d'une ligne d'un ListeIconGadget ?

Publié : mar. 17/oct./2006 15:30
par brossden
Bonjour

Je n'arrive pas à trouver comment selectionner par le programme une ligne d'une ListeIconGadget

Par exemple Selectionner la 20 ème ligne !

Merci de votre aide je passse complètement à coté là je le sent !

Publié : mar. 17/oct./2006 17:24
par Anonyme2

Code : Tout sélectionner

SetGadgetState(#ListIconGadget, 20)
SetActiveGadget(#ListIconGadget)

Publié : mer. 18/oct./2006 10:20
par brossden
Merci Denis, mais j'ai dû mal m'exprimer je voudrait que la selection soit visible à l'affichage, ligne selectionnée en inverse vidéo et visible dans la listIconGadget !!

Publié : mer. 18/oct./2006 13:09
par Anonyme2
Je me disais aussi te connaissant un peu :D

je ne sais pas si c'est ce que tu recherches

voici un code qui va dérouler la liste et mettre tout au début de la liste la ligne sélectionnée, sachant que l'indice de la 1ere ligne de la list est 0

Pour la ligne 20 c'est l'indice 19

Code : Tout sélectionner

#LVM_GETITEMPOSITION = 4112
#LVM_SCROLL = 4116

Procedure.l SetListPos(Gadget.l, Position.l)
  Protected Pos.POINT
  SendMessage_(GadgetID(Gadget), #LVM_GETITEMPOSITION, Position - 1, Pos)
  SendMessage_(GadgetID(Gadget), #LVM_SCROLL, 0, Pos\y)
EndProcedure

SetListPos(#ListIconGadget, 19)
SetGadgetState(#ListIconGadget, 19)
SetActiveGadget(#ListIconGadget) 

Publié : mer. 18/oct./2006 13:47
par brossden
Denis tu es le meilleur !

(comme tous les Denis d'ailleurs !) :wink:

Merci encore !

Publié : mer. 18/oct./2006 15:11
par Anonyme2
Certes :D


je me suis aperçu que mon code est incomplet, j'avais travaillé la-dessus il y a un moment.

3 cas

La ligne à afficher au début a un indice soit >, soit = soit < à celle qui est affichée

Je force la list à revenir au début car j'ai souvenir que dans certains cas en fonction de l'indice, ça ne fonctionnait pas correctement (je n'ai plus que des souvenirs :roll: )

Fait des tests, voici un code que j'ai repris depuis des codes que j'ai posté ici (lecture des résidents en mars 2005), je n'ai pas fait de tests avec ce code

la procedure à utiliser s'appelle affiche()

Code : Tout sélectionner

Procedure.l GetListPos(Gadget.l)
  ProcedureReturn SendMessage_(GadgetID(Gadget), #LVM_GETTOPINDEX, 0, 0)
EndProcedure

Procedure.l SetListPos(Gadget.l, Position.l)
  Protected Pos.POINT
  SendMessage_(GadgetID(Gadget), #LVM_GETITEMPOSITION, Position - 1, Pos)
  SendMessage_(GadgetID(Gadget), #LVM_SCROLL, 0, Pos\y)
EndProcedure


Procedure  affiche(Gadget.l, Position.l)
Protected TopIdex
   TopIdex =  GetListPos(Gadget)
   If Position < TopIdex
      SetListPos(Gadget, -1)
   EndIf
   SetListPos(Gadget, Position)
   SetGadgetItemState(Gadget, GetListPos(Gadget), #PB_ListIcon_Selected)
   SetActiveGadget(Gadget)
EndProcedure