ListIconGadget (Doublon en cliquant sur une ligne) [Résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

ListIconGadget (Doublon en cliquant sur une ligne) [Résolu]

Message par Geo Trouvpatou »

Bonsoir à tous.

Comme écrit dans mon message, lorsque je teste mon code avec le débuggeur activé, j'ai un doublon d'information en cliquant sur une ligne du ListIconGadget.

Le but étant qu'en cliquant sur une ligne cela mette le nom dans le stringGadget.
Cela fonctionne très bien hormis ce petit problème.

Au début j'ai cru que c'était parce que j'avais 2 colonnes, j'en ai donc ajouté une 3ème, mais cela ne vient pas de ça.

Voici le code :

Code : Tout sélectionner

EnableExplicit

;{- Enumerations / DataSections
;{ Windows
Enumeration
    #Window_main
EndEnumeration
;}
;{ Gadgets
Enumeration
    #ListIcon
    #String
EndEnumeration
;}
Define.l Element, Event, EventWindow, EventGadget, EventType, EventMenu
Define Resultat$
;}
Procedure OpenWindow_Window_main()
    If OpenWindow(#Window_main, 100, 100, 362, 162, "Test", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
        ListIconGadget(#ListIcon, 8, 8, 344, 120, "Nom", 100, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect)
        AddGadgetColumn(#ListIcon, 1, "Adresse", 200)
        ;AddGadgetColumn(#ListIcon, 2, "Bidon", 50) ; Test avec une 3ème colonne.
        StringGadget(#String, 8, 136, 344, 20, "")
        
        ; Sans image
        AddGadgetItem(#ListIcon, -1, "Toto" + Chr(10) + "24 rue truc")
        AddGadgetItem(#ListIcon, -1, "Pierre" + Chr(10) + "104 rue du général")
        AddGadgetItem(#ListIcon, -1, "Sylvain" + Chr(10) + "55 avenue bidule")
        AddGadgetItem(#ListIcon, -1, "Marcel" + Chr(10) + "12 chemin de la patte verte")
        
        ; Avec image
        ; If LoadImage(0, "directory32x32.bmp")     ; changez le chemin/fichier contenant votre image 32x32 pixel
        ; 
        ; AddGadgetItem(#ListIcon, -1, "Toto" + Chr(10) + "24 rue truc", ImageID(0))
        ; AddGadgetItem(#ListIcon, -1, "Pierre" + Chr(10) + "104 rue du général", ImageID(0))
        ; AddGadgetItem(#ListIcon, -1, "Sylvain" + Chr(10) + "55 avenue bidule", ImageID(0))
        ; AddGadgetItem(#ListIcon, -1, "Marcel" + Chr(10) + "12 chemin de la patte verte", ImageID(0))    
        ; 
        ; EndIf
        
    EndIf
EndProcedure

OpenWindow_Window_main()

;{- Event loop
Repeat
    Event = WaitWindowEvent()
    Select Event
            ; ///////////////////
        Case #PB_Event_Gadget
            EventGadget = EventGadget()
            EventType = EventType()
            
            If EventGadget = #ListIcon
                
                ; Permet de savoir sur quelle ligne on a cliqué (commence à 0)
                Element = GetGadgetState(#ListIcon)
                Debug Element   ;;;;;;;;;;;;;;;;; Ici il y a le fameux doublon d'information.   
                ;Debug GetGadgetState(#ListIcon)
                
                ; On affiche le texte de la 1ère colonne cliquée, 
                ; sauf si on clique sur une ligne vide.
                If Element <> -1
                    Resultat$ = GetGadgetItemText(#ListIcon, Element)
                    Debug Resultat$
                    
                    ; On envoi le résultat dans le string Gadget.
                    SetGadgetText(#String, Resultat$)
                   
                Else
                    ; Si on clique sur une ligne vide, on vide le champ du string Gadget
                    SetGadgetText(#String, "") 
                EndIf
                
                ;ElseIf EventGadget = #String
            EndIf
            
            ; ////////////////////////
        Case #PB_Event_CloseWindow
            EventWindow = EventWindow()
            If EventWindow = #Window_main
                CloseWindow(#Window_main)
                Break
            EndIf
    EndSelect
ForEver
;
;}
Bye.

PS : est-ce que c'est propre ma façon de faire avec le Define Resultat$ ?
Dernière modification par Geo Trouvpatou le lun. 12/janv./2009 15:38, modifié 1 fois.
kwandjeen
Messages : 204
Inscription : dim. 16/juil./2006 21:44

Message par kwandjeen »

Solution barbare, moi je bidouille :)

Code : Tout sélectionner

Define memo_select = -2

;dans la boucle principale je rajoute une condition

            If EventGadget = #ListIcon And memo_select<>GetGadgetState(#ListIcon) ;ici je verifie que l'on ai changé de sélection
               
                ; Permet de savoir sur quelle ligne on a cliqué (commence à 0)
                Element = GetGadgetState(#ListIcon)
                Debug Element   ;;;;;;;;;;;;;;;;; Ici il y a le fameux doublon d'information.   
                ;Debug GetGadgetState(#ListIcon)
               
                ; On affiche le texte de la 1ère colonne cliquée,
                ; sauf si on clique sur une ligne vide.
                If Element <> -1
                    Resultat$ = GetGadgetItemText(#ListIcon, Element)
                    Debug Resultat$
                   
                    ; On envoi le résultat dans le string Gadget.
                    SetGadgetText(#String, Resultat$)
                   
                Else
                    ; Si on clique sur une ligne vide, on vide le champ du string Gadget
                    SetGadgetText(#String, "")
                EndIf
               memo_select = GetGadgetState(#ListIcon)
                ;ElseIf EventGadget = #String
            EndIf
Ce n'est pas très cathodique ^^ mais le tout est que ça marche. Une grosse tête qui pourrait nous donner un tuyau ? :)
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Message par Geo Trouvpatou »

Salut.

En essayant ton truc kwandjeen, ça me tracassait quand même, parce que voulant faire un petit client FTP, il fallait aussi que les double-clics passent.

Inconvénient de ton système, c'est que si je clique sur Toto et qu'ensuite je veuille faire un double-clic sur Toto pour entrer dans le dossier cela ne pouvait pas fonctionner.

Alors en cherchant (un peu mieux) dans la doc j'ai carrément trouvé MA solution.
A croire que la doc a été écrite spécialement pour mon cas de figure.
Il fallait chercher à "EventType()" il y a un exemple avec un "ListIconGadget"

Au moins cela gèrera les simple/double clics Gauche et Droit.

En tout cas merci de t'être penché sur mon problème.
Mais je ne sais pas ce qu'aurait donné du code de barbare et de petit goret :lol:

Ceci dit il faut quand même que je teste le truc.
Si cela fonctionne je mettrait la solution.

Bye.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

comme ça :)

Code : Tout sélectionner

EnableExplicit 

;{- Enumerations / DataSections 
;{ Windows 
Enumeration 
  #Window_main 
EndEnumeration 
;} 
;{ Gadgets 
Enumeration 
  #ListIcon 
  #String 
EndEnumeration 
;} 
Define.l Element, Event, EventWindow, EventGadget, EventType, EventMenu 
Define Resultat$ 
;} 
Procedure OpenWindow_Window_main() 
  If OpenWindow(#Window_main, 100, 100, 362, 162, "Test", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar) 
    ListIconGadget(#ListIcon, 8, 8, 344, 120, "Nom", 100, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect) 
    AddGadgetColumn(#ListIcon, 1, "Adresse", 200) 
    ;AddGadgetColumn(#ListIcon, 2, "Bidon", 50) ; Test avec une 3ème colonne. 
    StringGadget(#String, 8, 136, 344, 20, "") 
    
    ; Sans image 
    AddGadgetItem(#ListIcon, -1, "Toto" + Chr(10) + "24 rue truc") 
    AddGadgetItem(#ListIcon, -1, "Pierre" + Chr(10) + "104 rue du général") 
    AddGadgetItem(#ListIcon, -1, "Sylvain" + Chr(10) + "55 avenue bidule") 
    AddGadgetItem(#ListIcon, -1, "Marcel" + Chr(10) + "12 chemin de la patte verte") 
    
    ; Avec image 
    ; If LoadImage(0, "directory32x32.bmp")     ; changez le chemin/fichier contenant votre image 32x32 pixel 
    ; 
    ; AddGadgetItem(#ListIcon, -1, "Toto" + Chr(10) + "24 rue truc", ImageID(0)) 
    ; AddGadgetItem(#ListIcon, -1, "Pierre" + Chr(10) + "104 rue du général", ImageID(0)) 
    ; AddGadgetItem(#ListIcon, -1, "Sylvain" + Chr(10) + "55 avenue bidule", ImageID(0)) 
    ; AddGadgetItem(#ListIcon, -1, "Marcel" + Chr(10) + "12 chemin de la patte verte", ImageID(0))    
    ; 
    ; EndIf 
    
  EndIf 
EndProcedure 

OpenWindow_Window_main() 

;{- Event loop 
Repeat 
  Event = WaitWindowEvent() 
  Select Event 
      ; /////////////////// 
    Case #PB_Event_Gadget 
      Select EventGadget()
        Case #ListIcon 
          Select EventType()
            Case #PB_EventType_Change;, #PB_EventType_LeftClick
              ; Permet de savoir sur quelle ligne on a cliqué (commence à 0) 
              Element = GetGadgetState(#ListIcon) 
              Debug Element   ;;;;;;;;;;;;;;;;; Ici il y a le fameux doublon d'information.    
              ;Debug GetGadgetState(#ListIcon) 
              
              ; On affiche le texte de la 1ère colonne cliquée, 
              ; sauf si on clique sur une ligne vide. 
              If Element <> -1 
                Resultat$ = GetGadgetItemText(#ListIcon, Element) 
                Debug Resultat$ 
                
                ; On envoi le résultat dans le string Gadget. 
                SetGadgetText(#String, Resultat$) 
                
              Else 
                ; Si on clique sur une ligne vide, on vide le champ du string Gadget 
                SetGadgetText(#String, "") 
              EndIf 
          EndSelect
          
      EndSelect 
      
      ; //////////////////////// 
    Case #PB_Event_CloseWindow 
      EventWindow = EventWindow() 
      If EventWindow = #Window_main 
        CloseWindow(#Window_main) 
        Break 
      EndIf 
  EndSelect 
ForEver 
; 
;}
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Message par Geo Trouvpatou »

Salut Soldat Inconnu.

Arrrgghhhh!!!! damned nos posts se sont croisés.
Bon je suis content d'avoir trouvé la solution à mon problème dans la doc.

Mais pas trop content de t'avoir fait perdre un peu de ton temps Soldat.

Malgré tout, ton code m'épargnera de me prendre un peu la tête.

Merci à toi.

Bye.
Répondre