Je suis sous XP, et j'ai testé sur 2 PC différents
Voici, mon problème, l'explorerListgadget n'affiche pas les icônes des fichiers mais l'icône main (comme pour les dossier partagé etc ... si vous connaissez)
et ça seulement après un SetGadgetState pour changer le dossier de l'ExplorerListGadget
bon, c'est pas très clair.
voici un aperçu :

comme vous les voyez, les icônes déconnent à fond
et voici le code
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 3.9
;
; Explication du programme :
#MaxFichier = 100
#MaxDossier = 50
Dim Dossier.s(#MaxFichier, #MaxDossier)
Dim Temp.s(#MaxFichier)
NewList Explorer.s()
Global Position
Position = -1
Enumeration
#Arbre
#Explorer
EndEnumeration
ProcedureDLL.s GetProgramDirectory2() ; Récupère le dossier d'exécution
Protected Dossier.s
Dossier = Space(255)
GetCurrentDirectory_(255, @Dossier)
If Right(Dossier, 1) <> "\" ; si l'adresse ne finit pas par "\"
Dossier = Dossier + "\" ; on rajoute le "\"
EndIf
ProcedureReturn Dossier
EndProcedure
Procedure ListeDossier(Numero, Dossier.s, PositionDepart)
If n > #MaxDossier
MessageRequester("Erreur", "Dépassement de capacité des dossiers", 0)
End
EndIf
; Debug Dossier + " = " + Str(Numero)
If ExamineDirectory(Numero, Dossier, "*.*")
;- Analyse du contenu du dossier
Cpt_Dossier = -1
Repeat
FileType = NextDirectoryEntry()
Nom.s = DirectoryEntryName()
If FileType = 2 And Nom <> "." And Nom <> ".."
Cpt_Dossier + 1
If Cpt_Dossier > #MaxFichier
MessageRequester("Erreur", "Dépassement de capacité des fichiers", 0)
End
EndIf
Temp(Cpt_Dossier) = Nom
ElseIf FileType = 1
Nom = LCase(Nom)
If Nom = "setup.exe" Or Nom = "setup.lnk" Or Nom = "setup.msi" Or Nom = "autorun.inf"
Installation = 1
EndIf
EndIf
Until FileType = 0
;- Triage des fichiers et dossiers
SortArray(Temp(), 2, 0, Cpt_Dossier)
; Transfert
For n = 0 To Cpt_Dossier
Dossier(n, Numero) = Temp(n)
Next
;- Affichage
For n = 0 To Cpt_Dossier
Position + 1
AddElement(Explorer())
Explorer() = Dossier + "\" + Dossier(n, Numero) + "\"
AddGadgetItem(#Arbre, Position, Dossier(n, Numero))
OpenTreeGadgetNode(#Arbre)
ListeDossier(Numero + 1, Dossier + "\" + Dossier(n, Numero), Position)
CloseTreeGadgetNode(#Arbre)
Next
; On ouvre le noeud
If Numero And Installation = 0
SetGadgetItemState(#Arbre, PositionDepart, #PB_Tree_Expanded)
EndIf
EndIf
EndProcedure
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 600, 400, #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_SystemMenu | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget, "Logithèque") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
TreeGadget(#Arbre, 0, 0, 300, 400)
ListeDossier(0, GetProgramDirectory2(), 0)
ExplorerListGadget(#Explorer, 300, 0, 300, 400, GetProgramDirectory2(), #PB_Explorer_NoFolders | #PB_Explorer_NoParentFolder)
; ChangeListIconGadgetDisplay(#Explorer, 0)
Repeat
Event = WaitWindowEvent()
If Event = #WM_SIZE
ElseIf Event = #PB_Event_Gadget
Select EventGadgetID()
Case #Arbre
Position = GetGadgetState(#Arbre)
If Position >= 0
SelectElement(Explorer() , Position)
Debug Explorer()
SetGadgetText(#Explorer, Explorer())
EndIf
; SetGadgetText(#Explorer, "C:\Program Files\PureBasic\")
EndSelect
EndIf
Until Event = #PB_EventCloseWindow
pour tester, il faut mettre le code à un endroit ou il y a des sous dossiers (éviter "c:\"), dans le dossier de PB par exemple.
Bon, j'ai testé l'ExplorerListGadget avec un code simple et je n'ai eu aucun problème :
Code : Tout sélectionner
NewList Dossier.s()
OpenWindow(0, 0, 0, 500, 500, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Test")
CreateGadgetList(WindowID())
TreeGadget(2, 400, 0, 100, 500)
AddGadgetItem(2, -1, "PureBasic")
ExplorerListGadget(0, 0, 0, 400, 480, "c:\", #PB_Explorer_NoFolders | #PB_Explorer_NoParentFolder)
ButtonGadget(1, 0, 480, 400, 20, "cliquez ici pour voir le bug")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadgetID()
Case 1
SetGadgetText(0, "C:\Program files\PureBasic\")
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow

Si quelqu'un peut m'aider, merci