Checkbox im GUICtrlTree

  • hoi zäme

    Ich habe mal wieder so ein Problem, welches ich mir partout nicht erklären kann.

    In einem recht umfangreichen GUI habe ich eine TreeViewLIste mit Checkboxen (Es sind zwei aber im funktionierenden Code-Auszug nur einer dargestellt). Der TreeView hat zwei Ebenen (Gruppe, Name). Wenn ich auf die Checkbox der Gruppe klicke, werden die Items darunter gesetzt oder ebend nicht. Das ist vielleicht alles ein bisschen umständlich gelöst, aber es funktioniert.

    Mein Problem ist. Wenn ich auf die Checkbox eines Child-Items (also Name) klicke, dann passiert nichts.

    herzliche Grüsse mit herzlichem Dank
    Torsten

    Spoiler anzeigen
    [autoit]


    AutoItSetOption("MustDeclareVars", 1)
    #include <Array.au3>
    #include <File.au3>
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>

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

    Dim $sPfadNetzLinks

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

    Global $iFensterBreite = 715, $iFensterHoehe = 520
    Global $gGuiFenster, $sGuiName = "HTML erzeugen"
    Local $gMessage

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

    Global $gTreeWebSiteListe[2][1]
    Global $aiAnzSiteGroup[2], $asAnzWebsite[1][2]
    Global $gTrItemSiteGroup[2][1]
    Global $asSiteGroupListe[3], $asWebsiteListe[3]
    Dim $gTrItemSiteGroupLinks[1], $gTrItemSiteGroupRechts[1]

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

    ; 1. Erzeuge GUI
    $gGuiFenster = GUICreate($sGuiName, $iFensterBreite, $iFensterHoehe, 10, 10)
    $gTrItemSiteGroupLinks = ErzeugeTreeView("links")
    GUISetState(@SW_SHOW)

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

    ; 2. Schleife GUI
    While True
    $gMessage = GUIGetMsg()

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

    Switch $gMessage
    Case $gTrItemSiteGroup[0][1] To $gTrItemSiteGroup[0][$gTrItemSiteGroup[0][0]] ; SiteGroup der linken Seite
    SiteGroupCheck("links")
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    ; 3. Event Funktionen
    Func ErzeugeTreeView($sPosition)
    Local $iLiRe
    Local $gTreeSiteGroupListe
    Local $iPosHorz, $iPosVert, $iBreite, $iHoehe
    Local $iZ2, $iZ3

    $iLiRe = 0
    $iPosHorz = 160
    $iPosVert = 40
    $iBreite = 265
    $iHoehe = 290

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

    $asSiteGroupListe[0] = 2
    $asSiteGroupListe[1] = "Gruppe 1"
    $asSiteGroupListe[2] = "Gruppe 2"
    $aiAnzSiteGroup[$iLiRe] = $asSiteGroupListe[0]
    ReDim $gTrItemSiteGroup[2][$aiAnzSiteGroup[$iLiRe] + 1]
    $gTrItemSiteGroup[$iLiRe][0] = $aiAnzSiteGroup[$iLiRe]

    If $aiAnzSiteGroup[$iLiRe] + 1 > UBound($asAnzWebsite, 2) Then
    ReDim $asAnzWebsite[2][$aiAnzSiteGroup[$iLiRe] + 1]
    $asAnzWebsite[$iLiRe][0] = $aiAnzSiteGroup[$iLiRe]
    EndIf

    $gTreeSiteGroupListe = GUICtrlCreateTreeView($iPosHorz + 10, $iPosVert + 20, $iBreite - 20, $iHoehe - 25, BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES))
    $iZ3 = 0
    For $iZ1 = 1 To $aiAnzSiteGroup[$iLiRe]
    $gTrItemSiteGroup[$iLiRe][$iZ1] = GUICtrlCreateTreeViewitem($asSiteGroupListe[$iZ1], $gTreeSiteGroupListe)
    $asWebsiteListe[0] = 2
    $asWebsiteListe[1] = "Name 1"
    $asWebsiteListe[2] = "Name 2"
    For $iZ2 = 1 To $asWebsiteListe[0]
    $iZ3 = $iZ3 + 1
    If $iZ3 + 1 > UBound($gTreeWebSiteListe, 2) Then
    ReDim $gTreeWebSiteListe[2][$iZ3 + 1]
    $gTreeWebSiteListe[$iLiRe][0] = $iZ3
    EndIf
    $gTreeWebSiteListe[$iLiRe][$iZ3] = GUICtrlCreateTreeViewItem($asWebsiteListe[$iZ2], $gTrItemSiteGroup[$iLiRe][$iZ1])
    Next
    $asAnzWebsite[$iLiRe][$iZ1] = $asWebsiteListe[0] ; schreibe Anzahl Website pro Gruppe
    Next
    $asAnzWebsite[$iLiRe][0] = 0 ; muss 0 sein, damit die Sitecheck funktioniert
    $gTreeWebSiteListe[$iLiRe][0] = $iZ3

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

    Return $gTreeSiteGroupListe
    EndFunc ; ==> ErzeugeTreeView

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

    Func SiteGroupCheck($sPosition) ; beim Klicken auf die SiteGroup werden die unterliegenden Websites aktiviert
    ; AnzWebsite = 6, 1, 5
    ; Pos 1: 1 bis 6
    ; Pos 2: 7 bis 7
    ; Pos 3: 8 bis 12
    Local $iLiRe, $iPos
    Local $iZ50, $iZ51, $iZ52

    If $sPosition == "links" Then
    $iLiRe = 0
    Else
    $iLiRe = 1
    EndIf

    For $iZ50 = 1 To $aiAnzSiteGroup[$iLiRe]
    ; prüfe, ob SiteGroup Buttons angesetzt wurde
    $iPos = 1
    If BitAND(GUICtrlRead($gTrItemSiteGroup[$iLiRe][$iZ50]), $GUI_CHECKED) Then
    For $iZ51 = 1 To $iZ50
    $iPos = $iPos + $asAnzWebsite[$iLiRe][$iZ51 - 1]
    Next
    For $iZ52 = $iPos To $iPos + $asAnzWebsite[$iLiRe][$iZ50] - 1
    GUICtrlSetState($gTreeWebSiteListe[$iLiRe][$iZ52], $GUI_CHECKED)
    Next
    EndIf

    ; prüfe, ob SiteGroup Buttons nicht gesetzt wurde
    $iPos = 1
    If BitAND(GUICtrlRead($gTrItemSiteGroup[$iLiRe][$iZ50]), $GUI_UNCHECKED) Then
    For $iZ51 = 1 To $iZ50
    $iPos = $iPos + $asAnzWebsite[$iLiRe][$iZ51 - 1]
    Next
    For $iZ52 = $iPos To $iPos + $asAnzWebsite[$iLiRe][$iZ50] - 1
    GUICtrlSetState($gTreeWebSiteListe[$iLiRe][$iZ52], $GUI_UNCHECKED)
    Next
    EndIf
    Next
    EndFunc ; ==> SiteGroupCheck

    [/autoit]

    Einmal editiert, zuletzt von tollpan (19. Dezember 2012 um 22:16)