Seite 1 von 1

ExplorerTreeGadget

Verfasst: 11.06.2009 00:36
von Winnetou
Hallo,

ich bin mir nicht sicher ob ich in diesem Thread posten sollte, oder lieber im API-Thread....

Folgenden Code habe ich gefunden, mit dem ich etwas experimentiert habe. Dieser Code erzeugt Chechboxen im ExplorerTreeGadget.
Gibt es wohl auch eine Möglichkeit den Status einzelner Checkboxen per Api zu ändern?
Also das Häkchen setzen oder entfernen ohne das der User dies anklickt. Und wenn möglich bestimmte Checkboxen sogar auf Disabled zu setzen, so das eine Änderung des Status durch den Anwender nicht möglich ist?

Api ist für mich ein Buch mit 7 Siegeln - seit 3 Tagen versuche ich nun mein Problem zu lösen, ohne das ich irgendwie weiter gekommen wäre. Auch kann ich nichts im Internet dazu finden, oder ich stell mich einfach zu blöd an...

Also hier der Code: (PureBasic v4.30)

Code: Alles auswählen

#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)
  If CreateGadgetList(WindowID(0))
 
    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
EndIf
End