TreeView nicht klickbar machen - ohne $GUI_DISABLE

  • Guten morgen allerseits,

    ich hab mal ein etwas merkwürdig anmutendes Anliegen: ich möchte gern verhindern, dass der Benutzer TreeView-Items von sich aus selektieren kann. Das allerdings OHNE dass ich $GUI_DISABLE setze.

    Hintergrund der Sache ist folgendes: in einem TreeView hab ichs so eingestellt, dass nur checkboxen angezeigt werden. Darin enthalten ist eine Liste von Dingen die das Script erledigen soll. Ist nun eine Tätigkeit abgeschlossen setz ich die checkbox auf $GUI_CHECKED. Um nun aber schneller sehen zu können wo das Script gerade ist will ich $GUI_FOCUS nutzen um die aktuelle Tätigkeit (also ein TreeViewItem) hervorzuheben.

    Setz ich aber nun den TreeView auf $GUI_DISABLE fokusiert der alle Items womit der Nutzen gleich Null ist. Lass ich das Teil auf enabled funktioniert das ganze zwar wie es soll aber es besteht halt die Gefahr, dass der User einfach wo rein klickt (warum auch immer ... Benutzer sind ja grundsätzlich erstmal als DAU zu vermuten :D ) und damit der Focus falsch gesetzt ist. An sich nich unbedingt der Weltuntergang aber mir wär es doch lieb, wenn sichs verhindern liese.

    mfg, mh166

    //Edit: Was ich auch schon probiert hab: die ganzen einzelnen TreeViewItems auf $GUI_DISABLE zu setzen - ohne Erfolg. Können danach immer noch angewählt werden, genau wie zuvor.

    2 Mal editiert, zuletzt von mh166 (14. Dezember 2007 um 10:33)

  • kannst du vielleicht deinen code posten? da gibt es sicher noch eine andere lösung als irgendwas drüberzusetzen...

  • Hum ... Die Idee is gut, sehr gut sogar. Allerdings gibts da einen Haken: das Label hat ne Hintergrundfarbe ;) Ergo sieht man nix mehr vom TreeView. :( Gibts irgendwo ne transparente Farbe? clNone jedenfalls isses nid :-/

    @oliver: also ich erstell halt ne Gui und dann folgenden TreeView:

    [autoit]


    $tvApps = GUICtrlCreateTreeView(8, 72, 119, 280, BitOR($TVS_SHOWSELALWAYS,$TVS_FULLROWSELECT,$TVS_DISABLEDRAGDROP,$TVS_CHECKBOXES,$TVS_NOSCROLL,$WS_GROUP), $WS_EX_CLIENTEDGE)
    $tviApps[0] = GUICtrlCreateTreeViewItem("Zu tun", $tvApps)
    $tviApps[1] = GUICtrlCreateTreeViewItem("Noch mehr ...", $tvApps)
    $tviApps[2] = GUICtrlCreateTreeViewItem("Abschluss...", $tvApps)

    [/autoit]

    Und dann gehts halt so vorwärts:

    [autoit]


    For $i=0 To Ubound($tviApps)-1 Step 1
    GuiCtrlSetState($tviApps[$currentApp+1], $GUI_FOCUS) ; $currentApp enthält den Index des Items das zuletzt bearbeitet wurde
    ;; Jetzt werden hier alle Sachen ausgeführt, die zur Aktivität gehören und am Ende:
    GUICtrlSetState($tviApps[$currentApp+1], $GUI_CHECKED)
    $currentApp = $currentApp+1
    Next

    [/autoit]

    Ich hoffe man sieht einigermaßen was ich vorhab ^^

    mfg, mh166

    • Offizieller Beitrag

    Hum ... Die Idee is gut, sehr gut sogar. Allerdings gibts da einen Haken: das Label hat ne Hintergrundfarbe ;) Ergo sieht man nix mehr vom TreeView. :( Gibts irgendwo ne transparente Farbe? clNone jedenfalls isses nid :-/

    Wenn man das Label vorher erstellt und dann erst das TreeView geht es (zumindest bei mir) und das TreeView ist trotzdem nicht anklickbar.

    [autoit]


    #include <GUIConstants.au3>
    Dim $tviApps[3]
    GUICreate("My GUI with treeview", 350, 215)
    GUICtrlCreateLabel('', 8,72,119,280)
    $tvApps = GUICtrlCreateTreeView(8, 72, 119, 280, BitOR($TVS_SHOWSELALWAYS,$TVS_FULLROWSELECT,$TVS_DISABLEDRAGDROP,$TVS_CHECKBOXES,$TVS_NOSCROLL,$WS_GROUP), $WS_EX_CLIENTEDGE)
    $tviApps[0] = GUICtrlCreateTreeViewItem("Zu tun", $tvApps)
    $tviApps[1] = GUICtrlCreateTreeViewItem("Noch mehr ...", $tvApps)
    $tviApps[2] = GUICtrlCreateTreeViewItem("Abschluss...", $tvApps)

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

    GUICtrlSetState($tviApps[0], $GUI_CHECKED)
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(20)
    WEnd

    [/autoit]
  • Cooole Sache. Danke Oscar. Ich hatte das Label danach erstellt, da hats nich geklappt. Hätt nich gedacht, dass das soviel ausmacht obs zuvor oder danach erstellt wird.

    Vielen Dank =)

    mfg, mh166