ListView mit Checkboxen

  • Hallo!
    Hat irgendjemand einen Link zu einem Beispielskript, bei der in einer Liste/Tabelle (LIstView) eine Checkbox in jeder Zeile ist?
    Danke

    • Offizieller Beitrag
    [autoit]

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

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

    $gui = GUICreate('test')
    $hListView = GUICtrlCreateListView('Spalte1|Spalte2', 10, 10, 300, 200, -1, BitOR($LVS_EX_TRACKSELECT,$LVS_EX_CHECKBOXES))
    _GUICtrlListView_SetColumnWidth($hListView, 0, 146)
    _GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE_USEHEADER)
    For $i = 1 To 10
    GUICtrlCreateListViewItem('Zeile ' & $i & ' Spalte 1|Zeile ' & $i & ' Spalte 2', $hListView)
    Next
    GUISetState()

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

    Do
    $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]
  • Ahh, gut Vielen Dank!

    Noch 3 Fragen:
    1. Wie kann man die ausgewählten Einträge ansprechen? (In ein Array tun)
    2. Ist es möglich, bei Klick auf eine Zelle ein Informationsfenster mit weiteren Informationen anzuzeigen?
    3. Kann man das verschieben der Spalten ausschallten? (das ist nicht so wichtig)

    Danke
    UPDATE: autoBert, dein Beitrag ist oben noch nicht berücksichtigt, ich aktualisiere gleich nochmal.

    So, Danke für die Klärung der Fragen 1 und 3.
    Wr kann Frage 2 beantworten?

    Einmal editiert, zuletzt von petter2 (13. Dezember 2009 um 15:28)

    • Offizieller Beitrag

    3. Kann man das verschieben der Spalten ausschallten? (das ist nicht so wichtig)


    Dafür hatte ich schon mal ein Bsp. erstellt:

    Spoiler anzeigen
    [autoit]

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

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

    $gui = GUICreate('test')
    $hListView = GUICtrlCreateListView('Spalte1|Spalte2', 10, 10, 300, 200)
    _GUICtrlListView_SetColumnWidth($hListView, 0, 146)
    _GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE_USEHEADER)
    For $i = 1 To 10
    GUICtrlCreateListViewItem('Zeile ' & $i & ' Spalte 1|Zeile ' & $i & ' Spalte 2', $hListView)
    Next

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

    ; hier für Vergleich die Spaltenbreite speichern:
    Global $aColumnWidth[_GUICtrlListView_GetColumnCount($hListView)]
    For $i = 0 To UBound($aColumnWidth) -1
    $aColumnWidth[$i] = _GUICtrlListView_GetColumnWidth($hListView, $i)
    Next

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

    GUISetState()

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    Do
    $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE

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

    Func _Columnwidth()
    For $i = 0 To UBound($aColumnWidth) -1
    If _GUICtrlListView_GetColumnWidth($hListView, $i) <> $aColumnWidth[$i] Then
    _GUICtrlListView_SetColumnWidth($hListView, $i, $aColumnWidth[$i])
    EndIf
    Next
    EndFunc

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case -12 ; Spaltenbreite wurde verändert
    _Columnwidth()
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • Vielen Dank!

    Ist es möglich, bei Klick auf eine Zelle ein Informationsfenster mit weiteren Informationen anzuzeigen?

  • wenn nicht, dann ist es doch bestimmt möglich, dass
    man einen Button an die Seite macht, und bei einem Klick die weiteren Informationen für den gerade angezeigten Button erscheinen, hat jemand ein Beispiel hierfür?

  • Das ist jetzt ein Beispiel für einen Doppelklick auf die Listview

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #Include <GuiListView.au3>
    ;Globals für die Funktion:

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

    $MainGui = GUICreate("DBClick test", 616, 395, 192, 120)
    $ListView = GUICtrlCreateListView("Produkt Name|Produktnummer|Produktlink", 8, 8, 498, 214);Das ListView mit $LVS_LIST...
    $TestItem = GUICtrlCreateListViewItem("Google Zahnbürste|22453|http://www.google.de", $ListView)
    $TestItem = GUICtrlCreateListViewItem("AutoIt Wecker|22684|http://www.autoit.de", $ListView)

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

    GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_notify, "_DoubleClickOnListView");Die Funktion wird bei einem Klick auf die GUI aufgerufen!

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

    $InfoGUI = GUICreate("Infos",300,200,500,600)
    GUICtrlCreateLabel("Produkt Name:",20,50,-1,25)
    $InfoName = GUICtrlCreateLabel("",100,50,200,25)
    GUICtrlCreateLabel("Produktnummer:",20,100,-1,25)
    $InfoNummer = GUICtrlCreateLabel("",100,100,200,25)
    GUICtrlCreateLabel("Produktlink:",20,150,-1,25)
    $InfoLink = GUICtrlCreateLabel("",100,150,200,25)
    ;~ GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    Switch $nMsg[1]
    Case $MainGui
    Exit
    Case $InfoGUI
    GUISetState(@SW_HIDE,$InfoGUI)
    EndSwitch
    EndSwitch
    WEnd

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

    Func _ShowDetails()
    $selection = _GUICtrlListView_GetSelectionMark($ListView)
    GUICtrlSetData($InfoName,_GUICtrlListView_GetItemText($ListView,$selection,0))
    GUICtrlSetData($InfoNummer,_GUICtrlListView_GetItemText($ListView,$selection,1))
    GUICtrlSetData($InfoLink,_GUICtrlListView_GetItemText($ListView,$selection,2))
    GUISetState(@SW_SHOW,$InfoGUI)
    EndFunc
    Func _DoubleClickOnListView($hWndGUI, $MsgID, $wParam, $lParam)
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    If $wParam = $ListView Then
    If $event = $NM_DBLCLK Then
    _ShowDetails() ; <----
    EndIf
    EndIf
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    EndFunc ;==>_DoubleClickOnListView

    [/autoit]