Script wirft Probleme mit MessageLoop und mit OnEvent Modus auf

  • Mein Script im MessageLoop Modus

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.2.0
    Author: Karill Endusa

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

    Script Function:
    Kundendatenbank für kleine bis mittelgroße Geschäfte.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    ;[includes]
    #include <GuiStatusBar.au3>
    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <SQLite.au3>

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

    ;----------------------------------------Variables-------------------------Start
    ;=> Globale Deklarationen verschoben in die For Schleifen der entsprechenden Abschnitte (ListView, LVMenu)
    ;----------------------------------------Variables---------------------------End

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

    ;----------------------------------------GUI-------------------------------Start
    $GUI_mainWindow = GUICreate("Kundendatenbank", 1000, 750, -1, -1)

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

    ;------Ini-------Start
    If FileExists(@ScriptDir&"\kudaba\") = 0 Then
    DirCreate(@ScriptDir&"\kudaba\")
    EndIf
    If FileExists(@ScriptDir&"\kudaba\structure.ini") = 0 Then
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnernamen", "Ordner1", "Ordner1")
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnernamen", "Ordner2", "Ordner2")
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnernamen", "Ordner3", "Ordner3")
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnerorder", "Ordner1", "1")
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnerorder", "Ordner2", "2")
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnerorder", "Ordner3", "3")
    EndIf
    ;------Ini---------End

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

    ;------Menu------Start
    $M_datei = GUICtrlCreateMenu("Datei")
    $MI_beenden = GUICtrlCreateMenuItem("Beenden", $M_datei)
    ;------Menu--------End

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

    ;-----ListView---Start
    GUICtrlCreateGroup("Kunden", 5, 0, 160, 330)
    $TreeView = GUICtrlCreateTreeView(10, 20, 150, 300, BitOR($TVS_HASBUTTONS,$TVS_HASLINES,$TVS_LINESATROOT,$TVS_DISABLEDRAGDROP,$TVS_SHOWSELALWAYS,$WS_GROUP,$WS_TABSTOP,$WS_HSCROLL,$WS_VSCROLL,$WS_BORDER))
    Global $IRS_structure_ONamen = IniReadSection(@ScriptDir&"\kudaba\structure.ini", "Ordnernamen")
    Global $TV_O[$IRS_structure_ONamen[0][0]]
    Global $CM_TV_O[$IRS_structure_ONamen[0][0]]
    For $i = 0 To $IRS_structure_ONamen[0][0]-1
    $TV_O[$i] = GUICtrlCreateTreeViewItem($IRS_structure_ONamen[$i+1][1], $TreeView)
    If FileExists(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini") = 0 Then
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "Name", "Mustermann")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "Forename", "Max")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "StreetAndNumber", "Weißwurststraße 1337")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "PLZ", "99999")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "Ort", "Musterhausen")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "Tel", "12345/6788")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "Fax", "12345/6789")
    EndIf
    Global $IRS_KundenO = IniReadSectionNames(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini")
    Global $TV_K[$IRS_structure_ONamen[0][0]][$IRS_KundenO[0]]
    Global $CM_TV_K[$IRS_structure_ONamen[0][0]][$IRS_KundenO[0]]
    Global $CM_TV_K_details[$IRS_structure_ONamen[0][0]][$IRS_KundenO[0]]
    For $x = 0 To $IRS_KundenO[0]-1
    IniReadSection(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde"&$x+1)
    $name = IniRead(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde"&$x+1, "Name", "not found")
    $forename = IniRead(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde"&$x+1, "Forename", "not found")
    $TV_K[$i][$x] = GUICtrlCreateTreeViewItem($name&", "&$forename, $TV_O[$i])
    ;-----LVMenu-----Start
    $CM_TV_K[$i][$x] = GUICtrlCreateContextMenu($TV_K[$i][$x])
    $CM_TV_K_details = GUICtrlCreateMenuItem("Detailansicht", $CM_TV_K[$i][$x])
    ;-----LVMenu-------End
    Next
    Next
    ;-----ListView-----End

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

    ;-----LVMenu-----Start
    Global $CM_TV_O_rename[$IRS_structure_ONamen[0][0]]
    For $i = 0 To $IRS_structure_ONamen[0][0]-1
    $CM_TV_O[$i] = GUICtrlCreateContextMenu($TV_O[$i])
    $CM_TV_O_rename[$i] = GUICtrlCreateMenuItem("Umbenennen", $CM_TV_O[$i])
    Next
    ;-----LVMenu-------End

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

    ;-----StatusBar--Start
    $StatusBar1 = _GUICtrlStatusBar_Create($GUI_mainWindow)
    _GUICtrlStatusBar_SetSimple($StatusBar1)
    _GUICtrlStatusBar_SetText($StatusBar1, "Kundendatenbank Version 1.0.0 (by Martin Bucher)")
    _GUICtrlStatusBar_SetMinHeight($StatusBar1, 20)
    ;-----StatusBar----End

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

    GUISetState(@SW_SHOW, $GUI_mainWindow)

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

    ;//TODO
    $GUI_detailWindow = GUICreate("Detailansicht", 750, 500, -1, -1)
    GUISetState(@SW_HIDE, $GUI_detailWindow)
    ;----------------------------------------GUI---------------------------------End

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

    ;----------------------------------------Script----------------------------Start
    While 1 * Sleep(10)
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    If $nMsg[1] = $GUI_mainWindow Then
    Exit
    ElseIf $nMsg[1] = $GUI_detailWindow Then
    GUISetState(@SW_HIDE, $GUI_detailWindow)
    EndIf
    Case $MI_beenden
    Exit
    Case $CM_TV_O_rename[0] To $CM_TV_O_rename[$IRS_structure_ONamen[0][0]-1]
    MsgBox(0, "", "Case works!");[TODO]
    EndSwitch
    WEnd
    ;----------------------------------------Script------------------------------End

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

    ;----------------------------------------Functions-------------------------Start

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

    ;----------------------------------------Functions---------------------------End

    [/autoit]


    hier ist das Problem dass ich das, was ich für $CM_TV_O_rename gemacht habe nicht für $CM_TV_K_details hinbekomme

    wenn ich das ganze in den OnEvent Mode umschreibe habe ich aber nich die Variablen $i und $x der arrays die müsste ich irgendwie weitergeben können an eine funktion

  • An der Parameterübergabe soll es nicht scheitern:

    [autoit]


    GUICtrlSetOnEvent($wasauchimmer,"meinefunktion")
    Func meinefunktion()
    meinefunktion2($variable1,$variable2)
    EndFunc
    Func meinefunktion2($var1,$var2)
    ;...
    EndFunc

    [/autoit]
    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Hallo Karill Endusa,

    hier mal ein Beispiel zu _GUICtrlTreeView_GetSelection (auf Button klicken):

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GuiConstantsEx.au3>
    #include <GuiTreeView.au3>
    #include <GuiImageList.au3>
    #include <WindowsConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    $Debug_TV = False ; Check ClassName being passed to functions, set to True and use a handle to another control to see it work

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

    Global $hImage, $hStateImage

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

    _Main()
    exit

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

    Func _Main()

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

    Local $hItem[10], $hChildItem[30], $iYItem = 0, $iRand, $hTreeView, $hbtnInfo, $iItemIndex, $msg
    Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)

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

    GUICreate("TreeView Get Text", 400, 350)

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

    $hTreeView = GUICtrlCreateTreeView(2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE)
    $hbtnInfo = GUICtrlCreateButton("&Aktuelles Item?",2,320,100,25)
    ;_GUICtrlTreeView_SetUnicodeFormat($hTreeView, False)
    GUISetState()

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

    _CreateNormalImageList()
    _GUICtrlTreeView_SetNormalImageList($hTreeView, $hImage)

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

    _CreateStateImageList()
    _GUICtrlTreeView_SetStateImageList($hTreeView, $hStateImage)

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

    _GUICtrlTreeView_BeginUpdate($hTreeView)
    For $x = 0 To 9
    $hItem[$x] = _GUICtrlTreeView_Add($hTreeView, 0, StringFormat("[%02d] New Item", $x), 4, 5)
    ;_GUICtrlTreeView_SetStateImageIndex($hTreeView, $hItem[$x], 1)
    For $y = 1 To 3
    $hChildItem[$iYItem] = _GUICtrlTreeView_AddChild($hTreeView, $hItem[$x], StringFormat("[%02d] New Child from {%02d]", $y, $x), 0, 3)
    ;_GUICtrlTreeView_SetStateImageIndex($hTreeView, $hChildItem[$iYItem], 1)
    $iYItem += 1
    Next
    Next
    _GUICtrlTreeView_EndUpdate($hTreeView)

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

    _GUICtrlTreeView_SelectItem($hTreeView, $hItem[0])
    ;_GUICtrlTreeView_SetStateImageIndex($hTreeView, $hItem[0], 2)

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

    $iRand = Random(0, 9, 1)
    MsgBox(4160, "Information", StringFormat("Text for Item %d: %s", $iRand, _GUICtrlTreeView_GetText($hTreeView, $hItem[$iRand])))

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

    ; Loop until user exits
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    GUIDelete()
    Exit
    Case $hbtnInfo
    $iItemIndex = _GUICtrlTreeView_GetSelection($hTreeView)
    MsgBox(0, "Information", _GUICtrlTreeView_GetText($hTreeView, $iItemIndex))
    EndSwitch
    WEnd
    EndFunc ;==>_Main

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

    Func _CreateNormalImageList()
    $hImage = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 110)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 131)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 165)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 168)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 137)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 146)
    EndFunc ;==>_CreateNormalImageList

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

    Func _CreateStateImageList()
    $hStateImage = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hStateImage, "shell32.dll", 3)
    _GUIImageList_AddIcon($hStateImage, "shell32.dll", 4)
    EndFunc ;==>_CreateStateImageList

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

    ,

    mfg (Auto)Bert

  • Hallo nuts,

    ja, da er anscheinend meinen damaligen Link nicht gelesen hat,habe ich ihm das Skriptbeispiel mit _GUICtrlTreeView_GetSelection diesmal direkt gepostet,

    @Karill Endusa, _GUICtrlTreeView_GetSelection funktioniert auch im OnEvent-Modus

    mfg (Auto)Bert

  • Kann mir ma bitte einer sagen warum das so jetz nich klappt? also das is jetz im OnEvent Modus... das $GUI_EVENT_CLOSE klappt soweit auch aber warum klappen die MenuItems nicht? wenn ich das so ausführe kommt dabei keine MsgBox im fRename und fDetails...

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.2.0
    Author: Karill Endusa

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

    Script Function:
    Kundendatenbank für kleine bis mittelgroße Geschäfte.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    ;[includes]
    #include <GuiStatusBar.au3>
    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiTreeView.au3>

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

    Opt("GUIOnEventMode", 1)

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

    ;----------------------------------------Variables-------------------------Start
    ;=> Globale Deklarationen verschoben in die For Schleifen der entsprechenden Abschnitte (ListView, LVMenu)
    ;----------------------------------------Variables---------------------------End

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

    ;----------------------------------------GUI-------------------------------Start
    $GUI_mainWindow = GUICreate("Kundendatenbank", 1000, 750, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "fClose")

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

    ;------Ini-------Start
    If FileExists(@ScriptDir&"\kudaba\") = 0 Then
    DirCreate(@ScriptDir&"\kudaba\")
    EndIf
    If FileExists(@ScriptDir&"\kudaba\structure.ini") = 0 Then
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnernamen", "Ordner1", "Ordner1")
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnernamen", "Ordner2", "Ordner2")
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnernamen", "Ordner3", "Ordner3")
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnerorder", "Ordner1", "1")
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnerorder", "Ordner2", "2")
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnerorder", "Ordner3", "3")
    EndIf
    ;------Ini---------End

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

    ;------Menu------Start
    $M_datei = GUICtrlCreateMenu("Datei")
    $MI_beenden = GUICtrlCreateMenuItem("Beenden", $M_datei)
    ;------Menu--------End

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

    ;-----ListView---Start
    GUICtrlCreateGroup("Kunden", 5, 0, 160, 330)
    $TreeView = GUICtrlCreateTreeView(10, 20, 150, 300, BitOR($TVS_HASBUTTONS,$TVS_HASLINES,$TVS_LINESATROOT,$TVS_DISABLEDRAGDROP,$TVS_SHOWSELALWAYS,$WS_GROUP,$WS_TABSTOP,$WS_HSCROLL,$WS_VSCROLL,$WS_BORDER))
    Global $IRS_structure_ONamen = IniReadSection(@ScriptDir&"\kudaba\structure.ini", "Ordnernamen")
    Global $TV_O[$IRS_structure_ONamen[0][0]]
    Global $CM_TV_O[$IRS_structure_ONamen[0][0]]
    For $i = 0 To $IRS_structure_ONamen[0][0]-1
    $TV_O[$i] = GUICtrlCreateTreeViewItem($IRS_structure_ONamen[$i+1][1], $TreeView)
    If FileExists(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini") = 0 Then
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "Name", "Mustermann")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "Forename", "Max")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "StreetAndNumber", "Weißwurststraße 1337")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "PLZ", "99999")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "Ort", "Musterhausen")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "Tel", "12345/6788")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "Fax", "12345/6789")
    EndIf
    Global $IRS_KundenO = IniReadSectionNames(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini")
    Global $TV_K[$IRS_structure_ONamen[0][0]][$IRS_KundenO[0]]
    Global $CM_TV_K[$IRS_structure_ONamen[0][0]][$IRS_KundenO[0]]
    Global $CM_TV_K_details[$IRS_structure_ONamen[0][0]][$IRS_KundenO[0]]
    For $x = 0 To $IRS_KundenO[0]-1
    IniReadSection(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde"&$x+1)
    $name = IniRead(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde"&$x+1, "Name", "not found")
    $forename = IniRead(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde"&$x+1, "Forename", "not found")
    $TV_K[$i][$x] = GUICtrlCreateTreeViewItem($name&", "&$forename, $TV_O[$i])
    ;-----LVMenu-----Start
    $CM_TV_K[$i][$x] = GUICtrlCreateContextMenu($TV_K[$i][$x])
    $CM_TV_K_details = GUICtrlCreateMenuItem("Detailansicht", $CM_TV_K[$i][$x])
    GUISetOnEvent(-1, "fDetails")
    ;-----LVMenu-------End
    Next
    Next
    ;-----ListView-----End

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

    ;-----LVMenu-----Start
    Global $CM_TV_O_rename[$IRS_structure_ONamen[0][0]]
    For $i = 0 To $IRS_structure_ONamen[0][0]-1
    $CM_TV_O[$i] = GUICtrlCreateContextMenu($TV_O[$i])
    $CM_TV_O_rename = GUICtrlCreateMenuItem("Umbenennen", $CM_TV_O[$i])
    GUISetOnEvent(-1, "fRename")
    Next
    ;-----LVMenu-------End

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

    ;-----StatusBar--Start
    $StatusBar1 = _GUICtrlStatusBar_Create($GUI_mainWindow)
    _GUICtrlStatusBar_SetSimple($StatusBar1)
    _GUICtrlStatusBar_SetText($StatusBar1, "Kundendatenbank Version 1.0.0 (by Martin Bucher)")
    _GUICtrlStatusBar_SetMinHeight($StatusBar1, 20)
    ;-----StatusBar----End

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

    GUISetState(@SW_SHOW, $GUI_mainWindow)

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

    ;//TODO
    $GUI_detailWindow = GUICreate("Detailansicht", 750, 500, -1, -1)
    GUISetState(@SW_HIDE, $GUI_detailWindow)

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

    GUISwitch($GUI_mainWindow)
    ;----------------------------------------GUI---------------------------------End

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

    ;----------------------------------------Script----------------------------Start
    While 1 * Sleep(10)
    Sleep(100)
    WEnd
    ;----------------------------------------Script------------------------------End

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

    ;----------------------------------------Functions-------------------------Start
    Func fClose()
    Exit
    EndFunc

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

    Func fRename()
    ;~ $test = _GUICtrlTreeView_GetSelection($TreeView)
    MsgBox(0, "", "Again it works!")
    EndFunc

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

    Func fDetails()
    ;~ $test = _GUICtrlTreeView_GetSelection($TreeView)
    MsgBox(0, "", "Again it works too!")
    EndFunc
    ;----------------------------------------Functions---------------------------End

    [/autoit]
    [autoit]

    $M_datei = GUICtrlCreateMenu("Datei")
    $MI_beenden = GUICtrlCreateMenuItem("Beenden", $M_datei)
    GUISetOnEvent($MI_beenden, "fClose")

    [/autoit]


    selbst das will einfach nich

  • GUICtrlSetOnEvent 8)
    Ob man damit ein Item belegen kann glaube ich aber nciht.
    Ist eigentlich auch nicht nötig, die Info welches Item angeklickt wurde holst du dir einfach über _GUICtrlTreeView_GetSelection

  • sorry für dopo aber damit das keiner übersieht neues Problem:
    wenn das erste ListView Item markiert ist und man macht rechtsklick auf nen anderes dann gibt er mit _GUICtrlTreeView_GetSelection trotzdem die ID dessen aus, welches markiert war... wie kann ich machen dass bei rechtsklick auch dieses ListVIew Item direkt markiert wird

  • was bringt es mir wenn ich die id auslese wenn ich danach wieder linksklick auf nen anderes Item mache, in diesem fall ja mein MenuItem (Umbenennen)?

    [autoit]

    Func fRightClick()
    $cursor = GUIGetCursorInfo($GUI_mainWindow)
    _GUICtrlTreeView_SelectItem($GUI_mainWindow, $cursor[4])
    EndFunc

    [/autoit]


    klappt leider nicht und
    MsgBox(0, "", $cursor[4])
    liefert oft einfach nur 0 zurück
    es sei denn ich bleibe mit meiner maus auf dem element aber dann gibts immer nur 6 zurück

    Einmal editiert, zuletzt von Karill Endusa (17. Januar 2010 um 17:51)

  • Hallo Karill Endusa,

    du müsstest die CursorInfo noch mit _GUICtrlTreeView_HitTest weiter auswerten und die dadurch gewonnene ID des TREEviewItems zwischenspeichern. Wie man _GUICtrlTreeView_HitTest einsetzen kann siehst du in _GUICtrlTreeView_CreateDirectory ... von Oscar , der Windowsstandard zum bedienen ist allerdins erst das ewünschte selektieren und danach (z.B. Rechtsklick oder Buttonklick) auswerten, Oscar hält sich auch daran der Link ist nur dazu gedacht damit du HitTest anhand eines Beispiels nachvollziehen kannst.
    Ich habe auch mein Beispiel nocheinmal etwas verändert, vielleicht bringt dich das ja auf eine Idee wie du es dir einfacher machen kannst:

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GuiConstantsEx.au3>
    #include <GuiTreeView.au3>
    #include <GuiImageList.au3>
    #include <WindowsConstants.au3>

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

    Opt('MustDeclareVars', 1)
    Opt("GUIOnEventMode", 1)

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

    $Debug_TV = False ; Check ClassName being passed to functions, set to True and use a handle to another control to see it work

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

    Global $hGui, $hImage, $hStateImage, $hTreeView, $hbtnInfo, $iItemIndex = -99, $iItemIndexOld = 0

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

    main()
    Func main()

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

    Local $hItem[10], $hChildItem[30], $iYItem = 0
    Local $iStyle = BitOR($TVS_TRACKSELECT, $TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)

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

    GUICreate("TreeView Get Text", 400, 350)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "_RightClick")

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

    $hTreeView = GUICtrlCreateTreeView(2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE)
    $hbtnInfo = GUICtrlCreateButton("&Aktuelles Item?", 2, 320, 100, 25)
    GUICtrlSetOnEvent(-1, "_Info")
    ;_GUICtrlTreeView_SetUnicodeFormat($hTreeView, False)
    GUISetState()

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

    _CreateNormalImageList()
    _GUICtrlTreeView_SetNormalImageList($hTreeView, $hImage)

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

    _CreateStateImageList()
    _GUICtrlTreeView_SetStateImageList($hTreeView, $hStateImage)

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

    _GUICtrlTreeView_BeginUpdate($hTreeView)
    For $x = 0 To 9
    $hItem[$x] = _GUICtrlTreeView_Add($hTreeView, 0, StringFormat("[%02d] New Item", $x), 4, 5)
    _GUICtrlTreeView_SetStateImageIndex($hTreeView, $hItem[$x], 1)
    For $y = 1 To 3
    $hChildItem[$iYItem] = _GUICtrlTreeView_AddChild($hTreeView, $hItem[$x], StringFormat("[%02d] New Child from {%02d]", $y, $x), 0, 3)
    _GUICtrlTreeView_SetStateImageIndex($hTreeView, $hChildItem[$iYItem], 1)
    $iYItem += 1
    Next
    Next
    _GUICtrlTreeView_EndUpdate($hTreeView)

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

    _GUICtrlTreeView_SelectItem($hTreeView, $hItem[0])
    _GUICtrlTreeView_SetStateImageIndex($hTreeView, $hItem[0], 2)
    $iItemIndex = 0
    ; Idle-Loop
    While 1
    If $iItemIndex <> -99 Then
    $iItemIndex = _GUICtrlTreeView_GetSelection($hTreeView)
    If $iItemIndex <> $iItemIndexOld Then
    $iItemIndexOld = $iItemIndex
    MsgBox(0, "Information IDLE-LOOP", _GUICtrlTreeView_GetText($hTreeView, $iItemIndex),0,$hGui)
    EndIf
    EndIf
    Sleep(1000)
    WEnd
    EndFunc ;==>main

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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

    Func _RightClick()
    ;BuFix http://www.autoit.de/index.php?page…4782#post114782
    Local $cursor = GUIGetCursorInfo($hGui)
    ConsoleWrite('Rechtsklick auf Control' & @LF & 'ID: ' & $cursor[4] & @LF & _
    'Text: ' & ControlGetText($hGui, '', $cursor[4]) & $hTreeView & @CRLF)
    MsgBox(0, "Information Rechtsklick", _GUICtrlTreeView_GetText($hTreeView, $iItemIndex),0,$hGui)
    EndFunc

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

    Func _Info()
    ; Local $iItemIndex
    $iItemIndex = _GUICtrlTreeView_GetSelection($hTreeView)
    ConsoleWrite($iItemIndex & @CRLF)
    MsgBox(0, "Information Button", _GUICtrlTreeView_GetText($hTreeView, $iItemIndex),0,$hGui)
    EndFunc ;==>_Info

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

    Func _CreateNormalImageList()
    $hImage = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 110)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 131)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 165)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 168)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 137)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 146)
    EndFunc ;==>_CreateNormalImageList

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

    Func _CreateStateImageList()
    $hStateImage = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hStateImage, "shell32.dll", 3)
    _GUIImageList_AddIcon($hStateImage, "shell32.dll", 4)
    EndFunc ;==>_CreateStateImageList

    [/autoit]

    PS.: wenn "G's" fehlen nicht wundern, muss meine Tastatur reinigen
    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (17. Januar 2010 um 18:18)

  • ok ehrlich ich glaub ich gebs auf ich verstehe weder den _GUICtrlTreeView_HitTest als auch manch andere sachen
    leider funktioniert die idee von cartan nicht aufgrund dessen dass ich das ja in einer for schleife mache und dann autoit rummeckert von wegen missing Next

    warum kann autoit nich so wie javascript sein? ;(
    onClick= <- so eine schöne funktion fehlt mir einfach noch X(

    gibts da nich noch ne einfachere Möglichkeit wie ich rausbekomme zu welchem treeview item das "Umbennen" oder das "Detailansicht" Menu Item gehört?

    • Offizieller Beitrag

    Wieso? OnClick gibt es doch! ^^

    Das ist im OnEventMode auch einfacher (mal ein Beispiel):

    Spoiler anzeigen
    [autoit]


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

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

    Opt('GUIOnEventMode', 1)

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

    $hGui = GUICreate('Treeview-Select', 640, 480)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    $hTreeview = GUICtrlCreateTreeView(10, 10, 500, 400)
    $context = GUICtrlCreateContextMenu($hTreeview)
    $info = GUICtrlCreateMenuItem('Info', $context)
    GUICtrlSetOnEvent(-1, '_InfoMenu')
    For $i = 0 To 9
    $tmp = GUICtrlCreateTreeViewItem('Item ' & $i, $hTreeview)
    GUICtrlSetOnEvent(-1, '_SelectItem')
    For $j = 0 To 4
    GUICtrlCreateTreeViewItem('Parent ' & $i & ' Child '& $j, $tmp)
    GUICtrlSetOnEvent(-1, '_SelectItem')
    Next
    Next
    $hStatus = GUICtrlCreateLabel('', 0, 464, 640, 16, 0x1000)
    GUISetState()

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

    While True
    Sleep(1000)
    WEnd

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

    Func _End()
    Exit
    EndFunc

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

    Func _SelectItem()
    $sSelected = ControlTreeView($hGui, '', $hTreeview, 'GetSelected')
    GUICtrlSetData($hStatus, 'Item selected = ' & StringReplace($sSelected, '|', ' / '))
    EndFunc

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

    Func _InfoMenu()
    $sSelected = ControlTreeView($hGui, '', $hTreeview, 'GetSelected')
    ToolTip(StringReplace($sSelected, '|', ' / '))
    EndFunc

    [/autoit]