Page 1 sur 1

Clic de souris[RESOLU]

Publié : sam. 30/janv./2021 11:45
par ach
Bonjour
Quelqu'un pourrait il me dire comment sélectionner un élément dans une ListViewGadjet au moyen d'un clic de souris afin de le mettre dans une variable pour l'utiliser dans la suite du programme.
Je ne vois pas comment on gère la souris .Je suis nul..
Merci

Code : Tout sélectionner

If OpenWindow(0,0,0,940,1080,"ListViewGadget",#PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
    SetWindowColor(Window_0, RGB(255,255,128))
   ListViewGadget(0,10,40,150,200,#PB_ListView_ClickSelect)
    SetGadgetColor(0, #PB_Gadget_BackColor, $9CF2A1 )
    ListViewGadget(1,220,40,150,100,#PB_ListView_ClickSelect)
    SetGadgetColor(1, #PB_Gadget_BackColor, $9CF2A1 )
   TextGadget(3, 10, 20, 100, 20," Valeur ")
   TextGadget(4, 220, 20, 100, 20," Coefficient ")
   
     For n=0 To 300 Step 15
        AddGadgetItem (0,-1,Str(n) ) 
    Next n
    For n=0 To 10 Step 2
        AddGadgetItem (1,-1,Str(n) ) 
    Next n
      
 Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow

EndIf
End

Re: Clic de souris

Publié : sam. 30/janv./2021 18:41
par Ar-S
Salut,

Ta boucle (juste pour le gadget 0 pour l'exemple) :

Code : Tout sélectionner

  Repeat
    Event = WaitWindowEvent()
    
    Select Event
        
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0
            Select EventType()
              Case #PB_EventType_LeftClick 
                Num = GetGadgetState(0)
                Debug "position : " + Num
                MonChoix$ = GetGadgetItemText(0,num)
            EndSelect
            
            Debug "J'ai cliqué sur " + MonChoix$
        EndSelect
        
        
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf

Re: Clic de souris

Publié : dim. 31/janv./2021 13:59
par microdevweb
Bonjour ach,

Voici une solution

Code : Tout sélectionner

Procedure evSelect()
  ; recupère l'id du gadget qui envoit l'évenement
  Protected idList = EventGadget(),n,i
  If EventType() = #PB_EventType_LeftClick 
    ; le nb d'article dans la liste
    n = CountGadgetItems(idList)
    ; parcours de tous les articles de la liste
    For i = 0 To n
      If GetGadgetItemState(idList,i)
        Debug GetGadgetItemText(idList,i)
      EndIf
    Next
  EndIf
EndProcedure

If OpenWindow(0,0,0,940,1080,"ListViewGadget",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  SetWindowColor(Window_0, RGB(255,255,128))
  ListViewGadget(0,10,40,150,200,#PB_ListView_ClickSelect)
  SetGadgetColor(0, #PB_Gadget_BackColor, $9CF2A1 )
  ListViewGadget(1,220,40,150,100,#PB_ListView_ClickSelect)
  SetGadgetColor(1, #PB_Gadget_BackColor, $9CF2A1 )
  TextGadget(3, 10, 20, 100, 20," Valeur ")
  TextGadget(4, 220, 20, 100, 20," Coefficient ")
  
  For n=0 To 300 Step 15
    AddGadgetItem (0,-1,Str(n) )
  Next n
  For n=0 To 10 Step 2
    AddGadgetItem (1,-1,Str(n) )
  Next n
  ; bind listView 0
  BindGadgetEvent(0,@evSelect())
  ; bind listView 1
  BindGadgetEvent(1,@evSelect())
  
  Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  
EndIf
End

Re: Clic de souris

Publié : lun. 01/févr./2021 10:28
par Zorro
petit rappel a propos de WaitWindowevent(xx)


WindowEvent() <- indiqué dans la doc de cette fonction ;)
Remarque importante n° 1: Comme cette commande n'est pas bloquante, elle peut consommer beaucoup de temps processeur quand elle est dans une boucle d'attente. Dans ce cas, utilisez la commande Delay(), sauf en présence de la fonction FlipBuffers(), ou mieux, il est préférable d'utiliser la commande WaitWindowEvent() avec une petite valeur de minuteur (timeout), comme par exemple 'WaitWindowEvent(1)'.
parceque WaitwindowEvent() est bloquant , il arrete notre programme en attendant le prochain événement le concernant (meilleurs moyen pour ne rien laisser passer mais...)
alors qu'utiliser l'option minuteur permet de rendre WaitWindowEvent(xx) non bloquant .... permet a notre application de rendre la main au systeme..
et donc de permettre a celui ci de rafraichir l'affichage de notre appli ....

on continue de regarder les evenements de la liste , mais on permet a notre prg de marcher en mode Multitache .....
notre application prends nettement moins de temps machine (visible avec Control+Alt+Del )

perso lorsque j'utilise (ais) WaitwindowEvent(xx), je mettais Toujours un minuteur genre WaitWindowEvent(20) .....


d'ailleurs L'utilisation de WindowEvent() impose l'utilisation de Delay() ou de FlipBuffer() , c'est a dire de rendre la main au system ....

Re: Clic de souris

Publié : lun. 01/févr./2021 11:55
par falsam
Le sujet de ach ne traite pas de la 2D :wink:

Re: Clic de souris

Publié : lun. 01/févr./2021 14:05
par ach
falsam a écrit :Le sujet de ach ne traite pas de la 2D :wink:
Merci à vous trois et bravo pour votre réactivité
Je vais tester tout cela