Text eines mit rechter Maustaste angeklicktem TreeItem herausfinden

  • hallo an alle!

    wie der titel schon sagt, möchte ich den text eines mit der rechten maustaste geklickten treeitems haben.

    hintergrund -> contextmenü

    danke schonmal

  • Naja will man nicht so sein

    Spoiler anzeigen
    [autoit]

    #Include <GuiTreeView.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Tree View Text", 216, 364, 193, 125)
    $TreeView1 = GUICtrlCreateTreeView(2, 2, 209, 357)
    $Con = GUICtrlCreateContextMenu ($TreeView1)
    $Text = GUICtrlCreateMenuItem("Text",$Con)
    GUICtrlCreateTreeViewItem("Test", $TreeView1)
    GUICtrlCreateTreeViewItem("Test2", $TreeView1)
    GUICtrlCreateTreeViewItem("Test3", $TreeView1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $Text
    MsgBox (0,"",_GUICtrlTreeView_GetText($TreeView1,_GUICtrlTreeView_GetSelection($TreeView1)))
    EndSwitch
    WEnd

    [/autoit]

    mfg. Jam00

  • Jam00,

    dein Skript zeigt das selektierte TreeViewItem, aber nicht das mit der rechten Maustaste angeklickte.

    @oliverh, schau dir mal die Hilfe zu Hittest an, damit müsste sowas lösbar sein,

    mfg (Auto)Bert

  • wenn ich es zuerst markiere ist es nicht schwer, so hab ich es auch schon hinbekommen... hab schon ein paar test mit hittest gemacht, führten aber nicht zu dem gewünschten ergebnis... kannst du mir nen ansatz geben autoBert

  • Unter Umständen geht folgende Alternative:

    1. Wenn mit der rechten Maustaste geklickt wird,
    2. markiertes Item merken
    3. Mausklick Links an gleicher Stelle (damit wird das aktuelle markiert)
    4. markiertes für spätere Weiterverarbeitung merken
    5. wieder das alte (aus 2.) markieren (alten Zustand herstellen)
    6. Item aus 4. im Script weiter verarbeiten

    Gruß
    micha_he

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • das problem hierbei ist, dass in dem moment wo ich dann mein contextmenü anklicke, welche mir die entsprechende funktion anschmeißt, wird das ursprünglich markierte item wieder markiert... eine eigene funktion dafür? arbeite im oneventmodus... gibt es hier was für rechtsklick?

  • also rechtsklick abfangen hab ich geschafft, das problem hierbei ist weiterhinh, dass das contextmenü vor dem recdhtsklick event ausgeführt wird, damit habe ich immer noch das problem, dass ich das markierte item im moment des rechtsklicks nicht herausfinden kann..

  • Spoiler anzeigen
    [autoit]

    #Include <GuiTreeView.au3>
    Global $Text[3][2]
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Tree View Text", 216, 364, 193, 125)
    $TreeView1 = GUICtrlCreateTreeView(2, 2, 209, 357)
    $Text[0][1] = GUICtrlCreateTreeViewItem("Test", $TreeView1)
    $Con = GUICtrlCreateContextMenu ($Text[0][1])
    $Text[0][0] = GUICtrlCreateMenuItem("Text",$Con)
    $Text[1][1] = GUICtrlCreateTreeViewItem("Test2", $TreeView1)
    $Con = GUICtrlCreateContextMenu ($Text[1][1])
    $Text[1][0] = GUICtrlCreateMenuItem("Text",$Con)
    $Text[2][1] = GUICtrlCreateTreeViewItem("Test3", $TreeView1)
    $Con = GUICtrlCreateContextMenu ($Text[2][1])
    $Text[2][0] = GUICtrlCreateMenuItem("Text",$Con)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    For $1 = 0 To UBound ($Text) -1
    Switch $nMsg
    Case -3
    Exit
    Case $Text[$1][0]
    MsgBox (0,"",_GUICtrlTreeView_GetText($TreeView1,$Text[$1][1]))
    EndSwitch
    Next
    WEnd

    [/autoit]

    mfg. Jam00

  • benutze den oneventmodus, daher kommt diese lösung nicht in frage... script ist leider schon zu groß zum umbauen...

    hat jemand vielleicht noch ne idee wie man das mit

    [autoit]

    _GUICtrlTreeView_HitTestItem($hWnd, $iX, $iY)

    [/autoit]

    machen könnte? muss in diesem fall ja koordinaten ansprechen, die relativ zum treeview sind?!?!

    danke euch schonmal für eure lösungen

  • so, ich hätte nun eine lösung, diese hat aber noch einen haken. nochmal zur erinnerung ich habe ein treeview mit mehreren dynamisch erstellten items, zu welchen es jeweils ein context menü gibt.

    ich wollte nun bei einem rechtsklick automatisch einen linksklick ausführen, damit das mit rechts geklickte item auch selektiert wird. das geht allerdings nicht, da beim rechtsklick ja das contextmenü ausgeführt wird. gibt es eine möglichkeit die rechtsklick funktion vorzuschalten?

  • hierbei hab ich das problem, wenn ich das contextmenü klicke, ich mich ja eventuell gar nicht mehr auf dem item befinde... guisetonevent($GUI_EVENT_SECONDARYDOWN, "_rightClicked") und dann dort abfragen geht auch nicht, da wie bereits geschrieben, das contextmenü kommt bevor die funktion aufgerufen wird


    hat denn keiner noch ne idee???? ich verzweifle hier demnächst

  • und wie?

    also ich geb euch jetzt doch mal mein komplettes script, da ich echt nimmer weiter weiß... soll n versionsmanager für die eigenen programme werden :)

    Spoiler anzeigen

    gelöscht, script wird später veröffentlicht

    hier nochmal das ganze als zip, da noch einige dateien zum ausführen benötigt werden... KOPLA_AU3ToolsVersionManager_v001.au3 ist das besagte script

    Einmal editiert, zuletzt von oliverh (5. Mai 2009 um 12:05)

  • Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode", 1)
    #include <GuiTreeView.au3>
    Global $Text[3][2]
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Tree View Text", 216, 364, 193, 125)
    GUISetOnEvent("-3", "Ende")
    $TreeView1 = GUICtrlCreateTreeView(2, 2, 209, 357)
    $Text[0][1] = GUICtrlCreateTreeViewItem("Test", $TreeView1)
    $Con = GUICtrlCreateContextMenu($Text[0][1])
    $Text[0][0] = GUICtrlCreateMenuItem("Text", $Con)
    GUICtrlSetOnEvent(-1, "A")
    $Text[1][1] = GUICtrlCreateTreeViewItem("Test2", $TreeView1)
    $Con = GUICtrlCreateContextMenu($Text[1][1])
    $Text[1][0] = GUICtrlCreateMenuItem("Text", $Con)
    GUICtrlSetOnEvent(-1, "B")
    $Text[2][1] = GUICtrlCreateTreeViewItem("Test3", $TreeView1)
    $Con = GUICtrlCreateContextMenu($Text[2][1])
    $Text[2][0] = GUICtrlCreateMenuItem("Text", $Con)
    GUICtrlSetOnEvent(-1, "C")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(100)
    WEnd
    Func A()
    MsgBox(0, "", _GUICtrlTreeView_GetText($TreeView1, $Text[0][1]))
    EndFunc
    Func B()
    MsgBox(0, "", _GUICtrlTreeView_GetText($TreeView1, $Text[1][1]))
    EndFunc
    Func C()
    MsgBox(0, "", _GUICtrlTreeView_GetText($TreeView1, $Text[2][1]))
    EndFunc
    Func ende()
    Exit
    EndFunc

    [/autoit]

    mfg. Jam00

  • ich kann nicht für jedes item ne eigene funktion anlegen, da diese dynamisch erstellt werden, siehe script

    [autoit]


    Func _readProgrammsAndWrite()
    _GUICtrlTreeView_DeleteAll($hTreeView)
    $fileList=_FileListToArray(@ScriptDir & "\Programme\", "*", 2)
    If @error=4 Then
    MsgBox(0, "Fehler", "Keine Programm im Programmverzeichnis gefunden")
    Else
    Local $item[$fileList[0]]
    Local $contextMenue[$fileList[0]]
    Local $contextMenueItem1[$fileList[0]]
    Local $contextMenueItem2[$fileList[0]]
    For $i=1 To $fileList[0]
    $item[$i-1]=GUICtrlCreateTreeViewItem($fileList[$i], $hTreeView)
    _GUICtrlTreeView_SetIcon($hTreeView, $item[$i-1], "shell32.dll", 165)
    GUICtrlSetOnEvent($item[$i-1], "_getProgrammAndWriteInfos")
    $contextMenue[$i-1]=GUICtrlCreateContextMenu($item[$i-1])
    $contextMenueItem1[$i-1]=_GUICtrlCreateODMenuItem("Neue Version aus neuester Version erzeugen", $contextMenue[$i-1], "shell32.dll", -135)
    GUICtrlSetOnEvent($contextMenueItem1[$i-1], "_createNewVersionFromLast")
    _GUICtrlCreateODMenuItem("", $contextMenue[$i-1])
    $contextMenueItem2[$i-1]=_GUICtrlCreateODMenuItem("Programm löschen", $contextMenue[$i-1], "shell32.dll", -132)
    GUICtrlSetOnEvent($contextMenueItem2[$i-1], "_deleteProgramm")
    Next
    EndIf
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]
  • also, ich gebs auf, kommt scheinbar niemand drauf und ich selber auch nicht..

  • Du sagtest, du kannst nicht für jedes Control eine eigene Funktion nutzen !

    Jam00's Idee erweitert:

    Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode", 1)
    #include <GuiTreeView.au3>
    Global $Text[3][2]
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Tree View Text", 216, 364, 193, 125)
    GUISetOnEvent("-3", "Ende")
    $TreeView1 = GUICtrlCreateTreeView(2, 2, 209, 357)
    $Text[0][1] = GUICtrlCreateTreeViewItem("Test", $TreeView1)
    $Con = GUICtrlCreateContextMenu($Text[0][1])
    $Text[0][0] = GUICtrlCreateMenuItem("Text", $Con)
    GUICtrlSetOnEvent(-1, "A")
    $Text[1][1] = GUICtrlCreateTreeViewItem("Test2", $TreeView1)
    $Con = GUICtrlCreateContextMenu($Text[1][1])
    $Text[1][0] = GUICtrlCreateMenuItem("Text", $Con)
    GUICtrlSetOnEvent(-1, "A")
    $Text[2][1] = GUICtrlCreateTreeViewItem("Test3", $TreeView1)
    $Con = GUICtrlCreateContextMenu($Text[2][1])
    $Text[2][0] = GUICtrlCreateMenuItem("Text", $Con)
    GUICtrlSetOnEvent(-1, "A")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(100)
    WEnd

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

    Func A()
    For $i = 0 To Ubound($Text)-1
    If $Text[$i][0] = @GUI_CTRLID Then
    MsgBox(0, "", _GUICtrlTreeView_GetText($TreeView1, $Text[$i][1]))
    ExitLoop
    EndIf
    Next
    EndFunc

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

    Func ende()
    Exit
    EndFunc

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"