Treeview mit Checkboxes?

  • Hi Leutz,

    erstmal Tach. AutoIT ist echt toll.
    Wollte mein Wissen mal wieder ein bisschen vertiefen und finde mit AutoIT kann man eine Menge machen.

    Mein Problem beim ersten Eintauchen in die GUI Gestaltung:

    Ich moechte eine TreeView haben, die folgendes kann.


    Hauptmenu1
    |
    - - - - - - -X SubA1
    |
    - - - - - - X SubA2

    Hauptmenu2
    |
    ------------* SubB 1
    |
    ------------o SubB 2
    |
    ------------o SubB 3


    Die X beim ersten Sub sollen Checkboxes sein.
    Das * und die o sollen Radio Buttons sein.

    Was habe ich schon gemacht?
    Ich habe aufmerksam die Hilfe studiert und alle moeglichen Stylefunktionen getestet.
    KodaForm Designer habe ich mir auch zu Gemuete gefuehrt.
    Vieleicht habe ich auch nicht aufmerksam genug gelesen...?

    Hat jemand eine Idee dazu oder ist das noch nicht implementiert in AutoIT?

    MFG

    CAT

  • Hi peethebee,

    Checkboxes gehen. Ja aber leider nur im ganzen Tree und nicht nur bei den TreeViewItems oder?

    $TVS_CHECKBOXES


    Mit den Radio Buttons haste natuerlich recht, is mir auch nach dem Post aufegfallen.
    Koennte man auch mit einem DropDown Menu machen. Laesst sich das denn in der TreeView ein DropDown Menu einbauen?

    Ich frag mal anders: Sind in der Hilfe alle Moeglichkeiten beschrieben oder gibt es da noch mehr...?

    Das ganze soll in einen Tree, weil die laenge der Struktur nach unten wachsen koennen soll. Wird ja dann von allein scrollbar.

    Gedacht ist eine Install GUI, in der man die Programme aussucht, die installiert werden sollen.

    Zum Beispiel Adobe Reader, OpenOffice etc.
    Mit Radio Buttons, weil Nero 6 oder Nero7 installiert werden koennen soll.
    Beide duerfen nicht auf einen Rechner...
    Wie gesagt, geht auch mit Dropdown Menu.

    Danke.

    • Offizieller Beitrag

    Checkbox geht auch für jedes Item.
    Da ich den Link nicht mehr habe, poste ich mal die Lösung von Holger inkl. der verwendeten Dateien.

    Edit:
    Hatte mal ein Installprogramm angefangen, sah dann so aus:
    [Blockierte Grafik: http://home.arcor.de/bugfix/InstallTreeView.PNG]


    Spoiler anzeigen
    [autoit]

    ; ----------------------------------------------------------------------------
    ;
    ; Script: Tristate TreeView
    ; Version: 0.2
    ; AutoIt Version: 3.1.1.128 Beta min.needed!
    ; Author: Holger Kotsch
    ;
    ; Script Function:
    ; Demonstrates a tristate treeview control -> just more like a fifthstate treeview ;)
    ;
    ; 5 item checkbox! states are usable:
    ; (can only used with TreeView with TVS_CHECKBOXES-style)
    ; - $GUI_CHECKED
    ; - $GUI_UNCHECKED
    ; - $GUI_INDETERMINATE
    ; - $GUI_DISABLE + $GUI_CHECKED
    ; - $GUI_DISABLE + $GUI_UNCHECKED
    ;
    ; ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstants.au3>
    #include "TristateTreeViewLib.au3"

    [/autoit] [autoit][/autoit] [autoit]

    ; You could also use a integrated bmw (with ResourceHacker)
    ; Please see TristateTreeViewLib.au3 in line 257 (LoadStateImage)
    ; !!! You must not compiled it full with UPX, just use after compiling: upx.exe --best --compress-resources=0 xyz.exe !!!
    ; If you choose another reource number then 170 you have to change the LoadStateImage() function
    ;
    ; Userfunction My-WM_Notify() is registered in TristateTreeViewLib.au3 !
    ;
    ; You can get other check bitmaps also together with freeware install programs like i.e. NSIS
    ; it must have 5 image states in it:
    ; 1.empty, 2.unchecked, 3.checked, 4.disabled and unchecked, 5.disabled and checked

    [/autoit] [autoit][/autoit] [autoit]

    ;Global $sStateIconFile = @ScriptDir & "\simple.bmp"
    Global $sStateIconFile = @ScriptDir & "\modern.bmp"

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Tristate Treeview", 400, 300)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Select installation type:", 10, 15, 120, 20)
    $nCombo = GUICtrlCreateCombo("", 150, 10, 200, 100, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "Full|Standard|Lite", "Full")

    [/autoit] [autoit][/autoit] [autoit]

    $nTV = GUICtrlCreateTreeView(150, 50, 200, 200, BitOr($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
    LoadStateImage($nTV, $sStateIconFile)

    [/autoit] [autoit][/autoit] [autoit]

    $nItem1 = GUICtrlCreateTreeViewItem("Main Program (required)", $nTV)
    MyCtrlSetItemState($nTV, $nItem1, $GUI_CHECKED + $GUI_DISABLE)
    $nItem2 = GUICtrlCreateTreeViewItem("Interfaces", $nTV ) ; 7
    $nItem3 = GUICtrlCreateTreeViewItem("ABC", $nItem2) ; 8
    $nItem4 = GUICtrlCreateTreeViewItem("LED", $nItem2) ; 9
    $nItem5 = GUICtrlCreateTreeViewItem("Book", $nItem3) ; 10
    $nItem6 = GUICtrlCreateTreeViewItem("Letter", $nItem3) ; 11
    $nItem7 = GUICtrlCreateTreeViewItem("Red", $nItem4) ; 12
    $nItem8 = GUICtrlCreateTreeViewItem("Extra", $nTV) ; 13
    $nItem9 = GUICtrlCreateTreeViewItem("Controlboard", $nItem8) ; 14

    [/autoit] [autoit][/autoit] [autoit]

    $nBtn = GUICtrlCreateButton("Test", 10, 200, 70, 20)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    SelectFull()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop

    Case $nCombo
    $nVal = GUICtrlRead($nCombo)
    Switch $nVal
    Case "Full"
    SelectFull()
    Case "Standard"
    SelectStandard()
    Case "Lite"
    SelectLite()
    EndSwitch

    Case $nBtn
    Msgbox(0, "Info ABC-item", "State:" & MyCtrlGetItemState($nTV, $nItem3))
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    GUIDelete()

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;**********************************************************
    ; Check all items
    ;**********************************************************
    Func SelectFull()
    For $i = $nItem2 To $nItem9
    MyCtrlSetItemState($nTV, $i, $GUI_CHECKED)
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;**********************************************************
    ; Checks/Unchecks some items
    ;**********************************************************
    Func SelectStandard()
    For $i = $nItem2 To $nItem6
    MyCtrlSetItemState($nTV, $i, $GUI_CHECKED)
    Next

    MyCtrlSetItemState($nTV, $nItem8, $GUI_UNCHECKED)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;**********************************************************
    ; Checks/Unchecks some items
    ;**********************************************************
    Func SelectLite()
    For $i = $nItem2 To $nItem6
    MyCtrlSetItemState($nTV, $i, $GUI_CHECKED)
    Next

    MyCtrlSetItemState($nTV, $nItem5, $GUI_CHECKED)
    MyCtrlSetItemState($nTV, $nItem7, $GUI_CHECKED)
    MyCtrlSetItemState($nTV, $nItem6, $GUI_UNCHECKED)
    MyCtrlSetItemState($nTV, $nItem9, $GUI_UNCHECKED)
    EndFunc

    [/autoit]
  • Ja soo habe ich das auch schon,

    mag aber die Checkboxes an den Oberkategorien nicht.
    Die Linien im Root kann man auch entfernen, das weiss ich alles.

    Mehr Moeglichkeiten sind Euch also auch noch nicht bekannt?

    Fuer zum Beispiel Nero6 oder Nero7 muesste man dann eine Logik einbauen innerhalb der Checkboxes was?


    CAT