[RESOLU]ExplorerListGadget et les flags
[RESOLU]ExplorerListGadget et les flags
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
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
Re: ExplorerListGadget et les flags
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
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
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: ExplorerListGadget et les flags
Bonjour ou bonsoir Omega. Je pense que tu as voulu testé de cette maniere:
alors que si je me réfère à l'aide il fallait tester de cette manière.Cette méthode est aussi utilisé pour tester si une ligne d'un ListIconGadget est cochée ou pas.
Aide : GetGadgetItemState()
Code de démonstration
Code : Tout sélectionner
If GetGadgetItemState(#TonExplorer, GetGadgetState(#TonExplorer)) = #PB_Explorer_Directory
Code : Tout sélectionner
If GetGadgetItemState(#TonExplorer, GetGadgetState(#TonExplorer)) & #PB_Explorer_Directory

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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: ExplorerListGadget et les flags
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
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
Re: ExplorerListGadget et les flags
ç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:
Merci beaucoup
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
Re: ExplorerListGadget et les flags
Merci de ne pas tenir compte de la balise (color)
(Encore une bétise)
Humm...
(Encore une bétise)
Humm...
Win7 (x64) 64 bits Pb 5.72
Re: [RESOLU]ExplorerListGadget et les flags
La même chose mais avec des procédures, pour le côté didactique.
Mesa.
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
Re: [RESOLU]ExplorerListGadget et les flags
Salut Mesa et merci pour ce précieux code!
Merci
Je sais que c'est utile mais... pourquoi doit-on redimensionner l'explorerGadget?Case #PB_Event_SizeWindow
ResizeGadget(#Explorer, #PB_Ignore, #PB_Ignore, WindowWidth(#Mainform)-20, WindowHeight(#Mainform)-20)
Merci
Win7 (x64) 64 bits Pb 5.72
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: [RESOLU]ExplorerListGadget et les flags
Quand tu redimensionnes la fenêtre avec la souris, l'explorergagdet s'adapte à la fenêtre afin de te montrer plus de lignes par exempleomega a écrit :Je sais que c'est utile mais... pourquoi doit-on redimensionner l'explorerGadget?Merci

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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%