3 ListBox Fragen

  • Hi,
    ich habe drei Fragen zur Listbox.

    • Kann ich ein Doppelklick auf ein bestimmtes Item abfangen?
    • Kann ich ein bestimmtes Item einfärben? (Hintergrund o. Text)
    • Kann ich bei einmaligem Klick auf ein ausgewähltes Item, dieses deselektieren?

    MfG
    qixx

  • Ist alles möglich. Meinst du wirklich die Listbox oder ein Listview?

    Hier mal der Doppelklick auf ein Listboxitem:

    Spoiler anzeigen
    [autoit]


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

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

    $hGUI = GUICreate("List Box Create", 400, 296)
    $hListBox = _GUICtrlListBox_Create ($hGUI,"", 2, 2, 396, 296)
    GUISetState()

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

    For $i = 1 To 10
    _GUICtrlListBox_AddString($hListBox, 'Eintrag ' & $i)
    Next

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func ListDblClick()
    MsgBox(0, '', _GUICtrlListBox_GetText($hListBox, _GUICtrlListBox_GetCurSel($hListBox)))
    EndFunc

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($hListBox) Then $hWndListBox = GUICtrlGetHandle($hListBox)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $hListBox, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK
    ConsoleWrite( _GUICtrlListBox_GetText($hListBox, _GUICtrlListBox_GetCurSel($hListBox)) & @CRLF)
    case 1
    ConsoleWrite("Click" & @CRLF)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]


    edit \ Einzelklick hinzugefügt.

  • Für ein Listview ist das z.B. im Starplayer v2 umgesetzt (Skripte-Forum). Dort ist auch eine Funktion um den Doppelklick ins Listview abzufangen.
    Für die Listbox geht die Einzelfärbung der Items wohl doch nicht :wacko:

    Macht aber ja nichts, ein Listview ist eh flexibler ;)

    • Offizieller Beitrag

    Du kannst die ListBox nicht mit einem ListView kombinieren. Das sind 2 unterschiedliche Controls. Du mußt dich schon für eins entscheiden.

  • Für ein Listview ist das z.B. im Starplayer v2 umgesetzt (Skripte-Forum).

    Okay, habe jetzt auf Liestview umgestellt. :D
    Aber ich finde irgendwie in dem Player nichts,
    wie ich die Tastendrücke abfangen kann. :/
    Kann mir jemand ein Beispiel geben oder die
    Stelle zeigen, in der das zu finden ist? :P

    Danke!


    MfG
    qixx

  • Gute Entscheidung aufs Listview umzustellen. :thumbup:
    Hier die Auswertung der Clicks:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIListView.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>

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

    $MainGui = GUICreate("Listview Beispiel", 616, 395, 192, 120)

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

    $ListView = GUICtrlCreateListView("Produkt Name", 8, 8, 498, 214)
    $hListView= GUICtrlGetHandle($ListView)
    $TestItem = GUICtrlCreateListViewItem("TEST1", $ListView)
    $TestItem2 = GUICtrlCreateListViewItem("TEST2", $ListView)
    $hbutton = GUICtrlCreateButton("testbutton", 150,300 , 177, 21)
    Global $test
    GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_notify, "_DoubleClickOnListView");Die Funktion bei einer WM_Notify Message

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _DoubleClickOnListView($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $iIDFrom

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hListView
    Switch $iCode ;checkt wie das Event aussieht
    Case $NM_DBLCLK ;bei einem Doppelklick (markiert das Item farbig)
    ConsoleWrite("DoubleClickOnListView" & @CRLF)
    case $NM_CLICK ;bei einem einfachen Linksclick
    ConsoleWrite("ClickOnListView" & @CRLF)
    case $NM_RCLICK ;der Rechtsclick (hebt die Markeirung auf
    ConsoleWrite("RClickOnListView" & @CRLF)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_DoubleClickOnListView

    [/autoit]


    Für die farbige Markierung der Items hab ich leider gerade kein Beispiel. Kann ich morgen nachreichen (gibts auch ne UDF von Bugfix dazu).

  • Wow!
    Vielen Dank!
    Freue mich schon auf das Beispiel mit den
    Farben. :D

    Edit:
    Bin jetzt zuhause und konnte es testen. Ist auch
    soweit super, doch nimmt der die Klicks, wenn
    man auf das ListView klickt und nicht, wenn man
    auf ein Item klickt. :/


    MfG
    qixx