[RESOLU]ExplorerListGadget et les flags

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

[RESOLU]ExplorerListGadget et les flags

Message par omega »

Bonjour

Je n'arrive pas à comprendre comment utiliser GetGadgetItemState (ExplorerListGadget).
Selon l'aide du Pb, voici l'explication:

GetGadgetItemState(Gadget, item) où item indique le n° de la ligne

#PB_Explorer_File : The item is a file. (il s'agit donc un fichier)
#PB_Explorer_Directory : The item is a Directory (or drive) (il s'agit donc d'un dossier ou lecteur)
#PB_Explorer_Selected : The item is currently selected. (l'item est sélectionné ET C'EST LA OU JE ME PERDS LE PLUS)

Comment tester par exemple si l'item est un fichier ou pas?
La même chose pour le dossier et pareil pour sélectionné ou pas???

Supposons que la ligne N° 3 a été sélectionnée et que le contenu est un fichier (file.txt),
Que dois-je faire pour savoir qu'il s'agit effectivement d'un fichier et qu'il est sélectionné ou pas?

Merci
Dernière modification par omega le mer. 06/mars/2013 9:53, modifié 1 fois.
Win7 (x64) 64 bits Pb 5.72
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: ExplorerListGadget et les flags

Message par Anonyme2 »

Salut Omega,

tu aurais pu mettre un peu de code pour nous faciliter la vie.
Tu n'as pas la doc en français ?

pour savoir si c'est un fichier ou un dossier, il n'y a pas d'autre choix que la commande FileSize()
Voici un exemple complet je pense

Code : Tout sélectionner

#ExplorerListGadget = 1

If OpenWindow(0, 0, 0, 400, 200, "ExplorerListGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
      ExplorerListGadget(#ExplorerListGadget, 10, 10, 380, 180, "*.*", #PB_Explorer_MultiSelect)
      
      Repeat
            Select WaitWindowEvent()
                        
                  Case #PB_Event_Gadget
                        Select EventGadget()
                              Case #ExplorerListGadget
                                    ;// l'événement correspond à l'ExplorerListGadget
                                    Select EventType()
                                          Case #PB_EventType_RightClick
                                                ;// un click droit a eu lieu sur l'ExplorerListGadget
                                                ;// on teste qu'un élément est sélectionné --> résultat <> -1
                                                element = GetGadgetState(#ExplorerListGadget)
                                                If element <> -1
                                                      chemin$ = GetGadgetText(#ExplorerListGadget)
                                                      If chemin$ = ""
                                                            ;// on est sur un élément racine comme C:\
                                                            ;// et chemin$ est vide, on retrouve cet élément avec  GetGadgetItemText
                                                            chemin$ = GetGadgetItemText(#ExplorerListGadget, element, 0)
                                                            ;// on controle que c'est bien un dossier
                                                            If FileSize(chemin$) = -2
                                                               MessageRequester("Info", chemin$ + "   " + "est un dossier")   
                                                            EndIf
                                                            
                                                      Else
                                                            ;// on est sur le dossier parent ou l'élément sélectionné se trouve
                                                            ;// même si l'élément sélectionné est un dossier
                                                            ;// si l'élément sélectionné est un dossier, chemin$ ne contient pas l'élément sélectionné
                                                            Fichier$ = GetGadgetItemText(#ExplorerListGadget, element, 0)
                                                            ;// Fichier$ peut être un dossier ou un fichier
                                                            ;// on teste si l'ensemble est un fichier ou un dossier
                                                            If  FileSize(chemin$+Fichier$) = -2
                                                                  MessageRequester("Info", chemin$+Fichier$ + "   " + "est un dossier")
                                                            ElseIf FileSize(chemin$+Fichier$) >=0
                                                                  MessageRequester("Info", chemin$+Fichier$ + "   " + "est un fichier")
                                                            Else
                                                                  MessageRequester("Info", chemin$+Fichier$ + "   " + "n'est pas un fichier")
                                                            EndIf
                                                      EndIf
                                                      
                                                EndIf
                                    EndSelect
                        EndSelect
                        
                        
                  Case #PB_Event_CloseWindow
                        Break
            EndSelect
            
      ForEver
EndIf
End
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: ExplorerListGadget et les flags

Message par falsam »

Bonjour ou bonsoir Omega. Je pense que tu as voulu testé de cette maniere:

Code : Tout sélectionner

If GetGadgetItemState(#TonExplorer, GetGadgetState(#TonExplorer)) = #PB_Explorer_Directory
alors que si je me réfère à l'aide il fallait tester de cette manière.

Code : Tout sélectionner

If GetGadgetItemState(#TonExplorer, GetGadgetState(#TonExplorer)) & #PB_Explorer_Directory
Cette méthode est aussi utilisé pour tester si une ligne d'un ListIconGadget est cochée ou pas.

:idea: Aide : GetGadgetItemState()

Code de démonstration

Code : Tout sélectionner

Enumeration
  #Mainform
  #Explorer
EndEnumeration

Define.l Event, GEvent, TEvent

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget

Procedure Open_MainForm()
  OpenWindow(#Mainform, 0, 0, 500, 400, "ExplorerListGadget", WindowStyle)
  ExplorerListGadget(#Explorer, 10, 10, 0, 0, "*.*", #PB_Explorer_FullRowSelect)
EndProcedure

Open_MainForm()

Repeat
  Event  = WaitWindowEvent(10)
  GEvent = EventGadget()
  TEvent = EventType()
  
  Select Event
    Case #PB_Event_Gadget
      Select GEvent
          
        Case #Explorer
          Select TEvent
            Case #PB_EventType_LeftClick       
              If GetGadgetItemState(#Explorer, GetGadgetState(#Explorer)) & #PB_Explorer_Directory
                Debug GetGadgetItemText(#Explorer, GetGadgetState(#Explorer)) + " est une unité ou un dossier"
              EndIf
              
              If GetGadgetItemState(#Explorer, GetGadgetState(#Explorer)) & #PB_Explorer_File
                Debug GetGadgetItemText(#Explorer, GetGadgetState(#Explorer)) + " est un fichier"
              EndIf
              
          EndSelect
          
      EndSelect
      
    Case #PB_Event_SizeWindow
      ResizeGadget(#Explorer, #PB_Ignore, #PB_Ignore, WindowWidth(#Mainform)-20, WindowHeight(#Mainform)-20)
      
    Case #PB_Event_CloseWindow
      End
      
  EndSelect
ForEver
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: ExplorerListGadget et les flags

Message par omega »

Bonjour falsam

Oui, ton exemple de code répond à mon attente, seulement tu n'as pas testé le cas où l'item est sélectionné (#Pb_Explorer_Selected), mon vrai problème c'est justement la combinaison des constantes (sélection + type d'item), de toute façon, ce que tu viens de proposer est quand même intéressant, je vais le tester.

Merci beaucoup
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: ExplorerListGadget et les flags

Message par omega »

ça y est ! j'ai trouvé !

C'est moi qui déconne, j'aurais dû y penser: il fallait juste tester ligne par ligne tous les items sélectionnés. Ton code marche bien j'ai ajouté seulement cette partie de sélection.
Je reprends ton code avec une petite modification:

Code : Tout sélectionner

Enumeration
  #Mainform
  #Explorer
EndEnumeration

Define.l Event, GEvent, TEvent

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget

Procedure Open_MainForm()
  OpenWindow(#Mainform, 0, 0, 500, 400, "ExplorerListGadget", WindowStyle)
  If CreateGadgetList(WindowID(#Mainform))
      ExplorerListGadget(#Explorer, 10, 10, 0, 0, "*.*", [color=#BF0080]#PB_Explorer_MultiSelect[/color])
  EndIf    
EndProcedure

Open_MainForm()

Repeat
  Event  = WaitWindowEvent(10)
  GEvent = EventGadget()
  TEvent = EventType()
  
  Select Event
    Case #PB_Event_Gadget
      Select GEvent
          
        Case #Explorer
          Select TEvent
            Case #PB_EventType_LeftClick       
              If GetGadgetItemState(#Explorer, GetGadgetState(#Explorer)) & #PB_Explorer_Directory
                Debug GetGadgetItemText(#Explorer, GetGadgetState(#Explorer)) + " est une unité ou un dossier"
              EndIf
              
              If GetGadgetItemState(#Explorer, GetGadgetState(#Explorer)) & #PB_Explorer_File
                Debug GetGadgetItemText(#Explorer, GetGadgetState(#Explorer)) + " est un fichier"
              EndIf

          EndSelect
          
          [color=#BF0040]For item=0 To CountGadgetItems(#Explorer)
              If GetGadgetItemState(#Explorer, item) & #PB_Explorer_Selected
                Debug GetGadgetItemText(#Explorer, item) + " est sélectionné"
              EndIf
          Next item              [/color]   

      EndSelect
      
    Case #PB_Event_SizeWindow
      ResizeGadget(#Explorer, #PB_Ignore, #PB_Ignore, WindowWidth(#Mainform)-20, WindowHeight(#Mainform)-20)
      
    Case #PB_Event_CloseWindow
      End
      
  EndSelect
ForEver


Merci beaucoup
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: ExplorerListGadget et les flags

Message par omega »

Merci de ne pas tenir compte de la balise (color)

(Encore une bétise)

Humm...
Win7 (x64) 64 bits Pb 5.72
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: [RESOLU]ExplorerListGadget et les flags

Message par Mesa »

La même chose mais avec des procédures, pour le côté didactique.

Code : Tout sélectionner

; Debug #PB_Explorer_File;     : L'élément est un fichier.
; Debug #PB_Explorer_Directory;: L'élément est un répertoire (ou un disque).
; Debug #PB_Explorer_Selected; 

Enumeration
  #Mainform
  #Explorer
EndEnumeration

Define.l Event, GEvent, TEvent

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget

Procedure.s isDisk(id)
  retour$=""
  etat= GetGadgetItemState(id, GetGadgetState(id))
  If etat & #PB_Explorer_Directory <> 0 ; c'est un dossier ou un disque
    If Mid(GetGadgetItemText(id, GetGadgetState(id)),2,2)=":\" ; c'est un disque, Windows seulement...
      retour$="Lecteur "
    EndIf
  EndIf
  
  ProcedureReturn retour$
EndProcedure

Procedure.s isFolder(id)
  retour$=""
  etat= GetGadgetItemState(id, GetGadgetState(id))
  If etat & #PB_Explorer_Directory <> 0 ; c'est un dossier ou un disque
    retour$="Dossier "
  EndIf
  
  ProcedureReturn retour$
EndProcedure

Procedure.s IsFilex(id)
  retour$=""
  etat= GetGadgetItemState(id, GetGadgetState(id))
  If etat & #PB_Explorer_File <> 0 ; c'est un fichier
    retour$="Fichier "
  EndIf
  
  ProcedureReturn retour$
EndProcedure

Procedure.s isSelected(id)
  retour$="Non sélectionné"
  etat= GetGadgetItemState(id, GetGadgetState(id))
  If etat & #PB_Explorer_Selected <> 0 ; c'est sélectionné
    retour$="Sélectionné "
  EndIf
  
  ProcedureReturn retour$
EndProcedure

Procedure.s isDiskOrfolder(id)
  
  etat= GetGadgetItemState(id, GetGadgetState(id))
  If etat & #PB_Explorer_Directory <> 0 ; c'est un dossier ou un lecteur
    retour$="Dossier"
    If Mid(GetGadgetItemText(id, GetGadgetState(id)),2,2)=":\" ; c'est un lecteur, Windows seulement...
      Debug GetGadgetItemText(id, GetGadgetState(id)) 
      retour$="Lecteur "
    EndIf
  EndIf
  
  ProcedureReturn retour$
EndProcedure

Procedure.s isAll(id)
  
  ProcedureReturn isDiskOrFolder(id)+IsFilex(id)+isSelected(id)
EndProcedure


Procedure Open_MainForm()
  OpenWindow(#Mainform, 0, 0, 500, 400, "ExplorerListGadget", WindowStyle)
  ExplorerListGadget(#Explorer, 10, 10, 0, 0, "*.*", #PB_Explorer_FullRowSelect)
EndProcedure

Open_MainForm()

Repeat
  Event  = WaitWindowEvent(10)
  GEvent = EventGadget()
  TEvent = EventType()
  
  Select Event
    Case #PB_Event_Gadget
      Select GEvent
          
        Case #Explorer
          Select TEvent
            Case #PB_EventType_LeftClick       
              
              ;               Debug isDisk(#Explorer)
              ;               Debug isFolder(#Explorer)
              ;               Debug IsFilex(#Explorer)
              ;               Debug isSelected(#Explorer)
              Debug isAll(#Explorer)
          EndSelect
          
      EndSelect
      
    Case #PB_Event_SizeWindow
      ResizeGadget(#Explorer, #PB_Ignore, #PB_Ignore, WindowWidth(#Mainform)-20, WindowHeight(#Mainform)-20)
      
    Case #PB_Event_CloseWindow
      End
      
  EndSelect
ForEver
Mesa.
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: [RESOLU]ExplorerListGadget et les flags

Message par omega »

Salut Mesa et merci pour ce précieux code!
Case #PB_Event_SizeWindow
ResizeGadget(#Explorer, #PB_Ignore, #PB_Ignore, WindowWidth(#Mainform)-20, WindowHeight(#Mainform)-20)
Je sais que c'est utile mais... pourquoi doit-on redimensionner l'explorerGadget?

Merci
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [RESOLU]ExplorerListGadget et les flags

Message par falsam »

omega a écrit :Je sais que c'est utile mais... pourquoi doit-on redimensionner l'explorerGadget?Merci
Quand tu redimensionnes la fenêtre avec la souris, l'explorergagdet s'adapte à la fenêtre afin de te montrer plus de lignes par exemple :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: [RESOLU]ExplorerListGadget et les flags

Message par omega »

Merci
Win7 (x64) 64 bits Pb 5.72
Répondre