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
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
Dann Poste doch mal Script
Naja will man nicht so sein
#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 ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
Case $Text
MsgBox (0,"",_GUICtrlTreeView_GetText($TreeView1,_GUICtrlTreeView_GetSelection($TreeView1)))
EndSwitch
WEnd
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
Na und ist doch egal! Dann muss es eben erst makiert sein?
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
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..
#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 ###
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
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?
Hallo oliverh, in diesem Beitrag TreeView (un)checked Example verwendet Oscar den HitTest in einem TreeView, falls das Problem noch aktuell ist.
mfg (Auto)Bert
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
benutze den oneventmodus, daher kommt diese lösung nicht in frage... script ist leider schon zu groß zum umbauen...
Du kannst da doch auch OnEvent benutzen!
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
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
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 ###
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
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
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:
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 ###
While 1
Sleep(100)
WEnd
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
Func ende()
Exit
EndFunc