TreeView soll auf Case reagieren

  • Hallo liebe Programiere
    Ich hab schon wieder eine Frage ^^
    Undzwar Reagiert ein TreeView ja nich auf Case :(
    Wie bekomme ich es hin das es mit Case geht? Man könnte es natürlich auch so machen, das man immer überprüft was das Makierte Item ist und wenn es sich verändert was ausführen. Aber das kostet denke ich mehr CPU, was ich nciht gut finde!
    Man kann ja auch auf jedes Einzelne Item ein Case setzen alledings ist das in dem Falle nicht gut machbar :(

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 458, 298, 193, 115)
    $TreeView1 = GUICtrlCreateTreeView(8, 9, 445, 283)
    $TreeView1_0 = GUICtrlCreateTreeViewItem("Test", $TreeView1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $TreeView1
    MsgBox (0,"","")
    EndSwitch
    WEnd

    [/autoit]

    mfg. Jam00

  • Hallo Jam00,

    also im OnEventMode mach ich es so:

    Spoiler anzeigen
    [autoit]

    $htreevwMain = GUICtrlCreateTreeView(452,120, 345, 345, $GUI_SS_DEFAULT_TREEVIEW+$TVS_CHECKBOXES,$WS_EX_CLIENTEDGE)
    .
    .
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_CheckForChangesInTreeMain')
    .
    .
    Func _CheckForChangesInTreeMain()
    .
    .
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
    • Offizieller Beitrag

    Beispiel für den MessageLoop-Mode:

    Spoiler anzeigen
    [autoit]


    #include <GuiTreeView.au3>
    #include <GUIConstantsEx.au3>

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

    $Form1 = GUICreate("Form1", 458, 298)
    $TreeView1 = GUICtrlCreateTreeView(8, 9, 445, 283)
    For $i = 0 To 9
    GUICtrlCreateTreeViewItem("Test" & $i, $TreeView1)
    Next
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    $aInfo = GUIGetCursorInfo($Form1)
    If $aInfo[4] = $TreeView1 Then
    $hItem = _GUICtrlTreeView_GetSelection($TreeView1)
    MsgBox(0, "", _GUICtrlTreeView_GetText($TreeView1, $hItem))
    EndIf
    EndSwitch
    WEnd

    [/autoit]
  • Und weils so schön war, noch einmal mit GuiRegisterMsg:

    Spoiler anzeigen
    [autoit]

    #include <GuiTreeView.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Global $bool = False
    Opt("GuiOnEventMode",1)
    $Form1 = GUICreate("Form1", 458, 298)
    GuiSetOnEvent($GUI_EVENT_CLOSE, "Terminate")
    $TreeView1 = GUICtrlCreateTreeView(8, 9, 445, 283)
    For $i = 0 To 9
    GUICtrlCreateTreeViewItem("Test" & $i, $TreeView1)
    Next
    GUISetState(@SW_SHOW)

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    While 1
    If $bool = True Then
    ConsoleWrite("Selection Text: " & _GUICtrlTreeView_GetText($Treeview1, _GUICtrlTreeView_GetSelection($Treeview1))&@CRLF)
    $bool = False
    EndIf
    sleep(100)
    WEnd

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTreeView
    $hWndTreeView = $TreeView1
    If Not IsHWnd($TreeView1) Then $hWndTreeView = GUICtrlGetHandle($TreeView1)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    ;~ $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $TreeView1, $hWndTreeView
    Switch $icode
    Case $NM_CLICK
    $bool = True
    Return 0
    EndSwitch
    EndSwitch
    EndFunc

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

    Func Terminate()
    Exit
    EndFunc

    [/autoit]
  • Die Frage ist, was du mit Case meinst.. so gesehen arbeiten alle 3 ansätze mit case :D
    Aber wenn du dein GuiGetMsg meinst, dann gibt es ja eig nur die eine erklärung, dass einfach beim klicken auf ein treeviewitem keine message zurückgegeben wird..
    Die Frage "warum", kann ich dir nicht beantworten.. vllt wollten die entwickler einfach cpu sparen... der ottanormalverbraucher muss ja auch nicht ständig checken ob ein item geklickt wird. Wer sich eben ein bisschen auskennt und genau diesen Regelfall brechen muss, tut das eben mit guiregistermsg oder den anderen varianten!

    Einmal editiert, zuletzt von ChaosKeks (11. Mai 2009 um 20:30)