ListiconGadget

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

ListiconGadget

Message par Torp »

Salut,

Ne serait-il pas possible d'ajouter un paramètre permettant que lorsque l'on active #PB_ListIcon_CheckBoxes|#PB_ListIcon_MultiSelect, le fait de cocher une checkbox, ca coche toute la sélection ?

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

Message par Le Soldat Inconnu »

moi, j'aimerais bien avoir un évènement qui indique si on a coché ou décoché une ligne :D

car actuellement, impossible de savoir si on a coché ou décocher une ligne et en plus, on ne sait pas quel sur quel ligne on a agit.
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)]
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

ouai c vrai çà - g eu le pb aussi - bon j'ai fais comme çà du coup mais bon ( sans appel aux API windows ) :

Code : Tout sélectionner

OpenWindow(0,0,0,400,300,#PB_Window_SystemMenu,"Test")
CreateGadgetList(WindowID())
ListIconGadget(0,10,10,380,280,"id",100,#PB_ListIcon_CheckBoxes|#PB_ListIcon_FullRowSelect)
AddGadgetColumn(0,1,"nom",100)
AddGadgetColumn(0,2,"propriété",100)

For i=0 To 100
  AddGadgetItem(0,-1,"ex"+Str(i)+Chr(10)+"test"+Str(i))
Next
AdvancedGadgetEvents(#True)

Repeat
  
  ev = WaitWindowEvent()
  
  Select ev
    
    Case #PB_Event_Gadget
      
      If EventGadgetID() = 0
        
        If EventType() = 0
          
          pos = GetGadgetState(0)
          
          If pos <> -1
            If GetGadgetItemState(0,pos) & #PB_ListIcon_Checked
              SetGadgetItemState(0,pos,#Null)
            Else
              SetGadgetItemState(0,pos,#PB_ListIcon_Checked|#PB_ListIcon_Selected)
            EndIf
          EndIf
          
        EndIf
        
      EndIf
      
  EndSelect
Until ev = #PB_Event_CloseWindow

End
Image
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Le Soldat Inconnu a écrit :moi, j'aimerais bien avoir un évènement qui indique si on a coché ou décoché une ligne :D

car actuellement, impossible de savoir si on a coché ou décocher une ligne et en plus, on ne sait pas quel sur quel ligne on a agit.
Régis, tu ne regarde pas mes codes :mrgreen:

J'ai mis sur mon site (car la taille est trop grande pour le forum) un code pour supprimer les adresses de la liste des URL de IE

La structure *lpnmia.NMLISTVIEW = lParam permet de récupérer les infos sur l'élément.

Faute d'une commande directe, le code fonctionne bien. En utilisant ma librairie, commande SelectListiconCheckBox(), on peut cocher/décocher toutes les cases facilement

message ici
http://purebasic.hmt-forum.com/viewtopic.php?t=1530

il y a le lien correspondant à mon code dans le message

Dans la callback, j'intercepte les événement de cochage/décochage

Code : Tout sélectionner

    Case #WM_NOTIFY ; pour intercepter les événements des ListiconGadget
      ; détecte le click simple sur la boite à cocher
      ; deux cas  la valeur retournée vaut :
      *lpnmia.NMLISTVIEW = lParam
      Select *lpnmia\hdr\code
        Case #LVN_ITEMCHANGED
          If * lpnmia\uNewState = 4096 ; l'élément vient d'être décoché
            If ListIconAfficher = #Listicon
              ; on affiche la ligne en noir, police systeme
              SetRowColor(#Listicon, *lpnmia\iItem, #black, RGB(255, 255, 223), 0)
            Else
              SetItemColor(#Listicon_import, *lpnmia\iItem, 0, #black, RGB($DB, $ED, $DC), 0)
            EndIf
            UpdateMyStatusBar()
          ElseIf * lpnmia\uNewState = 8192 ; l'élément vient d'être coché
            If ListIconAfficher = #Listicon
              ; on affiche la ligne correspondante en noir, police grasse, le fond des lignes plus foncé
              SetRowColor(#Listicon, *lpnmia\iItem, #black, RGB(208, 208, 176), font)
            Else
              SetItemColor(#Listicon_import, *lpnmia\iItem, 0, #black, RGB($DB - $2F, $ED - $2F, $DC - $2F), font)
            EndIf
            UpdateMyStatusBar()
          EndIf
      EndSelect
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

oui denis ta lib est une incontournable, qui fait partie de mon pack perso depuis qu'elle existe. ceci dit regis a raison il faudrait que ce soit integré a PB ne serait ce que pour rendre cà accessible aux utilisateurs linux ou autre.
Image
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

je ne m'en rappelais pas, merci ;)
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)]
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Flype a écrit :oui denis ta lib est une incontournable, qui fait partie de mon pack perso depuis qu'elle existe. ceci dit regis a raison il faudrait que ce soit integré a PB ne serait ce que pour rendre cà accessible aux utilisateurs linux ou autre.
Bien d'accord avec toi Flype, ça simplifirait les choses

J'ai amélioré le code depuis, le voici

Code : Tout sélectionner

*lpnmia.NMLISTVIEW = lParam
   Select *lpnmia\hdr\code
      Case #LVN_ITEMCHANGED
         If *lpnmia\uNewState = 4096 And * lpnmia\uOldState = 8192 ; l'élément vient d'être décoché
            Select *lpnmia\hdr\hwndFrom
               Case GadgetID(#ListIconConstantes)


         ElseIf *lpnmia\uNewState = 8192 And * lpnmia\uOldState = 4096 ; l'élément vient d'être coché
            Select *lpnmia\hdr\hwndFrom
               Case GadgetID(#ListIconConstantes)
Répondre