Si ça peut t'aider, moi j'ai ça sur le sujet, mais avec des ExplorerTreeGadget
J'sais pas si ça a le même comportement ???
Codes de SHARDIK
Code : Tout sélectionner
EnableExplicit
#Button = 0
#ExplorerTree = 1
#Window = 0
Procedure HighlightItem(HighlightFlag)
Protected ItemHandle
Protected TVHitTest.TV_HITTESTINFO
Protected TVItem.TV_ITEM
TVHitTest\Pt\x = WindowMouseX(#Window) - GadgetX(#ExplorerTree)
TVHitTest\Pt\y = WindowMouseY(#Window) - GadgetY(#ExplorerTree)
ItemHandle = SendMessage_(GadgetID(#ExplorerTree), #TVM_HITTEST, 0, @TVHitTest)
If ItemHandle <> 0
If TVHitTest\Flags <> #TVHT_ONITEMBUTTON
TVItem\Mask = #TVIF_STATE
TVItem\hItem = ItemHandle
If HighlightFlag = #True
TVItem\StateMask = #TVIS_DROPHILITED
TVItem\State = #TVIS_DROPHILITED
Else
TVItem\StateMask = #TVIS_DROPHILITED | #TVIS_SELECTED
TVItem\State = 0
EndIf
SendMessage_(GadgetID(#ExplorerTree), #TVM_SETITEM, 0, @TVItem)
RedrawWindow_(GadgetID(#ExplorerTree), 0, 0, #RDW_UPDATENOW)
ProcedureReturn #True
EndIf
EndIf
ProcedureReturn #False
EndProcedure
Define EntryFound
Define i
Define Msg.S
Define WindowEvent
NewList SelectedItems.S()
If OpenWindow(#Window, 0, 0, 321, 330, "MultiSelect-Demo", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
ExplorerTreeGadget(#ExplorerTree, 9, 12, 303, 279, "", #PB_Explorer_NoMyDocuments)
SetWindowLong_(GadgetID(#ExplorerTree), #GWL_STYLE, GetWindowLong_(GadgetID(#ExplorerTree), #GWL_STYLE) | #TVS_DISABLEDRAGDROP)
ButtonGadget(#Button, 80, 300, 150, 20, "Display selected files")
Repeat
WindowEvent = WaitWindowEvent()
If EventType() = #PB_EventType_LeftClick
If WindowEvent = #PB_Event_Gadget And EventGadget() = #Button
Break
EndIf
If GetGadgetState(#ExplorerTree) = #PB_Explorer_File
EntryFound = #False
If ListSize(SelectedItems()) = 0
If HighlightItem(#True) = #True
AddElement(SelectedItems())
SelectedItems() = GetGadgetText(#ExplorerTree)
EndIf
Else
FirstElement(SelectedItems())
Repeat
If SelectedItems() = GetGadgetText(#ExplorerTree)
If HighlightItem(#False) = #True
DeleteElement(SelectedItems())
EntryFound = #True
EndIf
Break
EndIf
Until NextElement(SelectedItems()) = #False
If EntryFound = #False
If HighlightItem(#True) = #True
AddElement(SelectedItems())
SelectedItems() = GetGadgetText(#ExplorerTree)
EndIf
EndIf
EndIf
EndIf
EndIf
Until WindowEvent = #PB_Event_CloseWindow
If ListSize(SelectedItems()) > 0
Msg = "Number of selected files: " + Str(ListSize(SelectedItems())) + #CR$ + #CR$
FirstElement(SelectedItems())
For i = 1 To ListSize(SelectedItems())
Msg = Msg + SelectedItems() + Chr(13)
NextElement(SelectedItems())
Next i
MessageRequester("Info", Msg)
Else
MessageRequester("Info", "No Files were selected!")
EndIf
EndIf
Et aussi
Code : Tout sélectionner
#FileTree = 1
#List = 2
#Button = 3
#TVS_CHECKBOXES = $100
; rekursiver scan durch das explorertreegadget:
Procedure ScanTree(hItem)
hItem = SendMessage_(GadgetID(#FileTree), #TVM_GETNEXTITEM, #TVGN_CHILD, hItem)
While hItem
; daten über das item lesen
item.TV_ITEM\mask = #TVIF_CHILDREN|#TVIF_HANDLE|#TVIF_STATE
item\hItem = hItem
item\statemask = #TVIS_STATEIMAGEMASK
SendMessage_(GadgetID(#FileTree), #TVM_GETITEM, 0, @item)
; ist die checkbox gesetzt??
If ((item\state >> 12) -1)
; item selektieren, um per GetGAdgetText(#FileTree) den pfad zu bekommen
SendMessage_(GadgetID(#FileTree), #TVM_SELECTITEM, #TVGN_CARET, hItem)
; Pfad abspeichern
AddGadgetItem(#List, -1, GetGadgetText(#FileTree))
EndIf
; wenn das item childitems hat, suche dort fortsetzen:
If item\cChildren > 0
ScanTree(hItem)
EndIf
; nextes item
hItem = SendMessage_(GadgetID(#FileTree), #TVM_GETNEXTITEM, #TVGN_NEXT, hItem)
Wend
EndProcedure
If OpenWindow(0, 0, 0, 300, 600, "Path Requester", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ExplorerTreeGadget(#FileTree, 5, 5, 290, 275, "", #PB_Explorer_NoFiles)
; checkboxes aktivieren
styles = GetWindowLong_(GadgetID(#FileTree), #GWL_STYLE)
SetWindowLong_(GadgetID(#FileTree), #GWL_STYLE, styles | #TVS_CHECKBOXES)
ButtonGadget(#Button, 215, 285, 80, 20, "Ok")
ListViewGadget(#List, 5, 310, 290, 285)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget And EventGadget() = #Button
ClearGadgetItemList(#List)
; das selektierte item wird beim scan verändert -> abspeichern
selected = SendMessage_(GadgetID(#FileTree), #TVM_GETNEXTITEM, #TVGN_CARET, 0)
; suche beim root item starten
root = SendMessage_(GadgetID(#FileTree), #TVM_GETNEXTITEM, #TVGN_ROOT, 0)
; rekursiven scan durch alle items und childitems
ScanTree(root)
; selektiertes item zurücksetzen
SendMessage_(GadgetID(#FileTree), #TVM_SELECTITEM, #TVGN_CARET, selected)
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
End
Codes de FREAK
Code : Tout sélectionner
LVM_SETEXTENDEDLISTVIEWSTYLE = #LVM_FIRST + 54
#LVS_EX_CHECKBOXES = 4
#Explorer = 0
#Button = 1
#List = 2
If OpenWindow(0, 0, 0, 600, 600, "", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
If CreateGadgetList(WindowID(0))
ExplorerListGadget(#Explorer, 5, 5, 590, 380, "C:\")
; Enable the checkboxes in the Explorergadget:
SendMessage_(GadgetID(#Explorer), #LVM_SETEXTENDEDLISTVIEWSTYLE, #LVS_EX_CHECKBOXES, #LVS_EX_CHECKBOXES)
; for the test
ButtonGadget(#Button, 5, 390, 80, 20, "Show selected")
ListViewGadget(#List, 5, 415, 590, 180)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget And EventGadget() = #Button
ClearGadgetItemList(#List)
; loop through all displayed items
For i = 0 To CountGadgetItems(#Explorer)-1
; get the checkbox state
state = SendMessage_(GadgetID(#Explorer), #LVM_GETITEMSTATE, i, #LVIS_STATEIMAGEMASK)
If state >> 12 > 1
; checkbox is checked
AddGadgetItem(#List, -1, GetGadgetText(#Explorer)+GetGadgetItemText(#Explorer, i, 0))
EndIf
Next i
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
EndIf
End
Ou bien
Code : Tout sélectionner
#FileTree = 1
#List = 2
#Button = 3
#TVS_CHECKBOXES = $100
; rekursiver scan durch das explorertreegadget:
Procedure ScanTree(hItem)
hItem = SendMessage_(GadgetID(#FileTree), #TVM_GETNEXTITEM, #TVGN_CHILD, hItem)
While hItem
; daten über das item lesen
item.TV_ITEM\mask = #TVIF_CHILDREN|#TVIF_HANDLE|#TVIF_STATE
item\hItem = hItem
item\statemask = #TVIS_STATEIMAGEMASK
SendMessage_(GadgetID(#FileTree), #TVM_GETITEM, 0, @item)
; ist die checkbox gesetzt??
If ((item\state >> 12) -1)
; item selektieren, um per GetGAdgetText(#FileTree) den pfad zu bekommen
SendMessage_(GadgetID(#FileTree), #TVM_SELECTITEM, #TVGN_CARET, hItem)
; Pfad abspeichern
AddGadgetItem(#List, -1, GetGadgetText(#FileTree))
EndIf
; wenn das item childitems hat, suche dort fortsetzen:
If item\cChildren > 0
ScanTree(hItem)
EndIf
; nextes item
hItem = SendMessage_(GadgetID(#FileTree), #TVM_GETNEXTITEM, #TVGN_NEXT, hItem)
Wend
EndProcedure
If OpenWindow(0, 0, 0, 300, 600, "Path Requester", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ExplorerTreeGadget(#FileTree, 5, 5, 290, 275, "", #PB_Explorer_NoFiles)
; checkboxes aktivieren
styles = GetWindowLong_(GadgetID(#FileTree), #GWL_STYLE)
SetWindowLong_(GadgetID(#FileTree), #GWL_STYLE, styles | #TVS_CHECKBOXES)
ButtonGadget(#Button, 215, 285, 80, 20, "Ok")
ListViewGadget(#List, 5, 310, 290, 285)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget And EventGadget() = #Button
ClearGadgetItemList(#List)
; das selektierte item wird beim scan verändert -> abspeichern
selected = SendMessage_(GadgetID(#FileTree), #TVM_GETNEXTITEM, #TVGN_CARET, 0)
; suche beim root item starten
root = SendMessage_(GadgetID(#FileTree), #TVM_GETNEXTITEM, #TVGN_ROOT, 0)
; rekursiven scan durch alle items und childitems
ScanTree(root)
; selektiertes item zurücksetzen
SendMessage_(GadgetID(#FileTree), #TVM_SELECTITEM, #TVGN_CARET, selected)
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
End