rechtsklick in lixtbox

  • hey..wie kann man bei ner listbox das item markieren lassen auf das man einen rechtsklick macht??

    Einmal editiert, zuletzt von Reaker (28. September 2009 um 18:46)

  • Hi,
    schau dir mal in der Hilfe das Beispiel zum _GUICtrlListView_ClickItem() an. Dort ist vor allem der Bereich im WM-NOTIFY interessant, wo es um die Abfrage des $RM-RClick geht....
    Das ist die Nachricht, bei der du einhaken kannst...

  • also ich komm da garnet weiter...
    weiß leider keinen anhaltspunkt, weil ich ja auch nicht listview sondern listbox brauche und bei_GUICtrlListBox_ClickItem ist auch nicht viel drinne

  • ...eigentlkich ging es ja um die WM_NOTIFY...
    hier mal ein Beispiel:

    Spoiler anzeigen
    [autoit]

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

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

    ;Global Const $WM_NOTIFY = 0x004E ; removed to conform to Autoit build 3.2.10.0
    Global $DoubleClicked = False

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

    GUICreate("Double Click/Right Click Demo", 400, 300)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    ;create listboxt
    $ListViewID = GuiCtrlCreateListView("List Column", 10, 20, 380, 250)

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

    ;******************Rightclick Menu*************
    $menu1=GUICtrlCreateContextMenu ($ListViewID)
    $delete=GUICtrlCreateMenuitem("Delete" , $menu1)
    $play=GUICtrlCreateMenuitem("Play" , $menu1)
    $info=GUICtrlCreateMenuitem("Info" ,$menu1)

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

    ;~~~~~~~~~~~~~~~Using Loop Method~~~~~~~~~~~~~~

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

    ;***************End Rightclick Menu************

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

    ;this builds the items in your list box
    For $i = 1 To 10
    GuiCtrlCreateListViewItem("Item " & $i, $ListViewID)
    Next

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

    GUISetState()

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

    While 1
    $hGui = GUIGetMsg()
    Sleep(10)
    Switch $hGui
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    If $DoubleClicked Then
    DoubleClickFunc()
    $DoubleClicked = False
    EndIf
    Select
    Case $hGui = $delete
    delete()
    Case $hGui = $play
    play()
    Case $hGui = $info
    info()
    EndSelect
    WEnd

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

    Func DoubleClickFunc()
    MsgBox(64, "OK ", "You Double Clicked: " & GUICtrlRead(GUICtrlRead($ListViewID)) & " ?")
    EndFunc

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

    Func WM_NOTIFY($hWnd, $MsgID, $wParam, $lParam)
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return 0
    $code = DllStructGetData($tagNMHDR, 3)
    If $wParam = $ListViewID And $code = -3 Then $DoubleClicked = True
    Return $GUI_RUNDEFMSG
    EndFunc

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

    Func play()
    MsgBox(64, "You Right Clicked ", "Play: " & GUICtrlRead(GUICtrlRead($ListViewID)) & " ?")
    EndFunc

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

    Func delete()
    MsgBox(64, "You Right Clicked ", "Delete: " & GUICtrlRead(GUICtrlRead($ListViewID)) & " ?")
    EndFunc

    Func info()
    MsgBox(64, "You Right Clicked ", "Info For: " & GUICtrlRead(GUICtrlRead($ListViewID)) & " ?")
    EndFunc

    [/autoit]
  • ähm ich glaube wir reden anander vorbei, also

    ich habe eine ListBox, in dieser stehen ein paar werte, jetz habe ich noch ein contextmenu in dieser listbox, mit den items umbennen und löschen

    jetz kommt das problem, wenn ich nun zb auf wert 3 einen RECHTS - klick mache kommt zwar das contextmenu, aber der wert wird nicht markiert, genau wenn ich in einen leeren
    bereich rechtsklicke kommt trotzdem das menu...

    vlt meinst du ja das richtige, aber ich kanns leider nicht ableiten

  • Hallo reaker,

    schau dir mal dieses kleine Skript an:

    [autoit]

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

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

    $gui = GUICreate("BSP", 200, 200)

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

    $hlistbox = GUICtrlCreateList("", 0, 0, 200, 200, BitOR($LBS_STANDARD, $LBS_EXTENDEDSEL)) ;Achtung: wenn Koordinatenänderung => dann in _GUICtrlListBox_ItemFromPoint miteinrechnen
    GUISetState()
    ; Fügt Strings hinzu
    _GUICtrlListBox_BeginUpdate($hlistbox)
    For $iI = 1 To 9
    _GUICtrlListBox_AddString($hlistbox, StringFormat("%d : Zufallstring " & $iI, Random(1, 99, 1)))
    Next
    _GUICtrlListBox_EndUpdate($hlistbox)

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

    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_SECONDARYDOWN
    if $msg[3] < 200 and $msg[4] < 200 Then
    $iId = _GUICtrlListBox_ItemFromPoint($hlistbox, $msg[3], $msg[4])
    _GUICtrlListBox_SetSel($hlistbox, $iId)
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    viel Spaß damit,

    (Auto)Bert

  • jaa schonmal ein sehr weiter fortschritt ;)

    geht das auch das nur eins immer markiert wird und nicht mehrere?..weiß ich nerv euch bestimmt, aber ich kanns halt net so

  • Hallo reaker,

    meintest du so:

    Spoiler anzeigen
    [autoit]

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

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

    $gui = GUICreate("BSP", 200, 200)

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

    $hlistbox = GUICtrlCreateList("", 0, 0, 200, 200, BitOR($LBS_STANDARD, $LBS_EXTENDEDSEL)) ;Achtung: wenn Koordinatenänderung => dann in _GUICtrlListBox_ItemFromPoint miteinrechnen
    GUISetState()
    ; Fügt Strings hinzu
    _GUICtrlListBox_BeginUpdate($hlistbox)
    For $iI = 1 To 9
    _GUICtrlListBox_AddString($hlistbox, StringFormat("%d : Zufallstring " & $iI, Random(1, 99, 1)))
    Next
    _GUICtrlListBox_EndUpdate($hlistbox)

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

    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_SECONDARYDOWN
    If $msg[3] < 200 And $msg[4] < 200 Then
    $aItems = _GUICtrlListBox_GetSelItems($hlistbox) ;array alle selektierten
    For $iI = 1 To $aItems[0]
    _GUICtrlListBox_SetSel($hlistbox, $aItems[$iI]) ;macht Selektion rückgängig
    Next
    $iId = _GUICtrlListBox_ItemFromPoint($hlistbox, $msg[3], $msg[4])
    _GUICtrlListBox_SetSel($hlistbox, $iId)
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    mfg (Auto)Bert

  • Hallo reaker,

    Zitat

    jaaa genau..das isses..danke jetz ist nur eine frage noch ungelöst..

    [ offen ] Icon Problem


    Dann setze doch die Themen die gelöst sind bitte auch den Präfix auf gelöst (1. Beitrag bearbeiten nähe Überschrift)

    Bei deinem Icon-Problem kann ich dir leider nicht helfen, kenne kein Programm, mit dem man Icons schrumpfen kann,

    mfg (Auto)Bert