Page 1 sur 1
[RESOLU]ExplorerListGadget et les flags
Publié : mar. 05/mars/2013 11:18
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
Re: ExplorerListGadget et les flags
Publié : mar. 05/mars/2013 13:31
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
Re: ExplorerListGadget et les flags
Publié : mar. 05/mars/2013 18:57
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.
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
Re: ExplorerListGadget et les flags
Publié : mer. 06/mars/2013 8:01
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
Re: ExplorerListGadget et les flags
Publié : mer. 06/mars/2013 9:50
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
Re: ExplorerListGadget et les flags
Publié : mer. 06/mars/2013 9:52
par omega
Merci de ne pas tenir compte de la balise (color)
(Encore une bétise)
Humm...
Re: [RESOLU]ExplorerListGadget et les flags
Publié : mer. 06/mars/2013 10:26
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.
Re: [RESOLU]ExplorerListGadget et les flags
Publié : mer. 06/mars/2013 12:14
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
Re: [RESOLU]ExplorerListGadget et les flags
Publié : mer. 06/mars/2013 13:23
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

Re: [RESOLU]ExplorerListGadget et les flags
Publié : mer. 06/mars/2013 13:41
par omega
Merci