Checkbox im ListviewItem

  • Hallo,
    ist es möglich eine Checkbox in einem Listvieitem zu machen und die auslesen ?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 357, 366, 192, 124)
    $ListView1 = GUICtrlCreateListView("Hi|Moin|xD|Checkbox", 0, 0, 353, 361)
    For $i = 1 To 17
    GUICtrlCreateListViewItem ($i & "| aaaaaaaaaaaaaa|" & $i,$ListView1)
    Next
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

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

    EndSwitch
    WEnd

    [/autoit]


    Da wo Checkbox steht soll ne Checkbox sein :D

    2 Mal editiert, zuletzt von Freaky (20. März 2010 um 13:06)

  • Hallo Freaky,
    ja, aber die Checkbox geht (zumindest über Style) afaik nur in 1. Spalte

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #Include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 357, 366, 192, 124)
    $ListView = GUICtrlCreateListView(" |Hi|Moin|xD", 0, 0, 353, 335, _
    BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES)) ;$LVS_SHOWSELALWAYS
    ; wichtig ist der Stil $LVS_Report und der eweiterte Stil $LVS_EX_Checkboxes
    $CheckIt = GUICtrlCreateButton("&Check", 120, 340, 113)
    For $i = 1 To 99
    GUICtrlCreateListViewItem("|" & $i & "| aaaaaaaaaaaaaa|" & $i, $ListView)
    Next
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $CheckIt
    For $i = 0 To _GUICtrlListView_GetItemCount($ListView) - 1
    ;Schleifenbeginn da das erste Item den Index 0 hat von 0 bis Anzahl -1

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

    If _GUICtrlListView_GetItemChecked($ListView, $i) Then ; wenn geChecked (angehakt) dann
    $aItemText = _GUICtrlListView_GetItemTextArray($ListView, $i)
    ;Inhalt aller Spalten dieser Zeile dem Array $aItemText zuweisen
    ;$aItemText[0] enthält die Anzahl der Spalten
    ;$aItemText[1] Checked oder Unchecked (wir haben aber nur geChecked also keine Auswertung erforderlich)
    ;$aItemText[2] Hi
    ;$aItemText[3] Moin
    ;$aItemText{4]xD
    ConsoleWrite($aItemText[2] & " " & $aItemText[3] & @CRLF)
    ; Zeile markieren, die gerade bearbeitet wird
    _GUICtrlListView_SetItemSelected($ListView, -1, False, False) ; Alle entfernen (lt. Hilfe, scheint aber zu togglen)
    _GUICtrlListView_SetItemSelected($ListView, $i, True, True) ; Nur den einen setzen (lt. Hilfe, scheint aber zu togglen)

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

    ; Automatisch an die Stelle hinscrollen
    _GUICtrlListView_EnsureVisible($ListView, $i)
    sleep(random(250,750,1)) ;wieder löschen
    EndIf
    Next
    EndSwitch
    WEnd

    [/autoit]

    viel Spass damit,

    Edit: Einträge auf 99 erhöht, damit der Effekt von _GUICtrlListView_EnsureVisible sichtbar wird

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (19. März 2010 um 21:57)

  • Habe neues Problem.
    Unzwar wenn ich auf das Item klicke, soll die Checkbox angehackt werden.
    Das habe ich hinbekommen.
    Jetzt will ich das wen man nochmal draufklickt das der Harcken rausgeht.
    Wie krige ich das hin ?

  • Hallo Freaky,

    Zitat von Freaky

    Habe neues Problem.
    Unzwar wenn ich auf das Item klicke, soll die Checkbox angehackt werden.
    Das habe ich hinbekommen.
    Jetzt will ich das wen man nochmal draufklickt das der Harcken rausgeht.
    Wie krige ich das hin ?

    Poste einmal dein Skript,

    mfg (Auto)Bert

  • Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    #include <File.au3>
    #include <ListViewConstants.au3>
    #include <String.au3>

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

    Global $item[200], $ListViewSel = -1

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("", 588, 377, 304, 233)
    $ListView1 = GUICtrlCreateListView("Interface|Name|Status|Werbung", 0, 0, 586, 318, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))
    $Button1 = GUICtrlCreateButton("Start", 0, 320, 83, 25)
    $Button2 = GUICtrlCreateButton("Delte", 88, 320, 83, 25)
    $Button3 = GUICtrlCreateButton("Make", 176, 320, 83, 25)
    $Button4 = GUICtrlCreateButton("Refresh", 264, 320, 83, 25)
    $Button5 = GUICtrlCreateButton("", 440, 320, 139, 25)
    $Button6 = GUICtrlCreateButton("Interface", 352, 320, 83, 25)
    $Input1 = GUICtrlCreateInput("", 112, 352, 417, 21)
    GUICtrlSetState (-1,$GUI_DISABLE)
    $Combo1 = GUICtrlCreateCombo("First", 8, 352, 97, 25)
    GUICtrlSetData (-1,"Second")
    GUICtrlSetState (-1,$GUI_DISABLE)
    $Button7 = GUICtrlCreateButton("...", 536, 352, 27, 17)
    GUICtrlSetState (-1,$GUI_DISABLE)
    $ListViewHwnd = GUICtrlGetHandle($ListView1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    _aktuelisieren()

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

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

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

    EndSwitch
    If _GUICtrlListView_GetSelectionMark($ListViewHwnd) <> $ListViewSel Then
    _GUICtrlListView_SetItemChecked ($ListView1,_GUICtrlListView_GetSelectionMark($ListViewHwnd),True)
    If _GUICtrlListView_GetItemChecked($ListView1, $ListViewSel) Then
    $ListViewSel = _GUICtrlListView_GetSelectionMark($ListViewHwnd)
    $ruckgabe = _GUICtrlListView_GetItemText($ListViewHwnd, $ListViewSel)
    $aItemText = _GUICtrlListView_GetItemTextArray($ListView1, $ListViewSel)
    ConsoleWrite($aItemText[2] & " " & $aItemText[3] & @CRLF)
    _GUICtrlListView_SetItemSelected($ListView1, -1, False, False)
    _GUICtrlListView_SetItemSelected($ListView1, $ListViewSel, True, True)
    _GUICtrlListView_EnsureVisible($ListView1, $ListViewSel)
    Sleep(Random(250, 750, 1))
    EndIf
    EndIf
    WEnd

    [/autoit]
  • Hallo Freaky,

    hier eine Lösung für Doppelklick:

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    #include <File.au3>
    #include <ListViewConstants.au3>
    #include <String.au3>
    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>

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

    Global $item[200], $ListViewSel = -1

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

    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("", 588, 377, 304, 233)
    $ListView1 = GUICtrlCreateListView("Interface|Name|Status|Werbung", 0, 0, 586, 318, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))
    $Button1 = GUICtrlCreateButton("Start", 0, 320, 83, 25)
    $Button2 = GUICtrlCreateButton("Delte", 88, 320, 83, 25)
    $Button3 = GUICtrlCreateButton("Make", 176, 320, 83, 25)
    $Button4 = GUICtrlCreateButton("Refresh", 264, 320, 83, 25)
    $Button5 = GUICtrlCreateButton("", 440, 320, 139, 25)
    $Button6 = GUICtrlCreateButton("Interface", 352, 320, 83, 25)
    $Input1 = GUICtrlCreateInput("", 112, 352, 417, 21)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Combo1 = GUICtrlCreateCombo("First", 8, 352, 97, 25)
    GUICtrlSetData(-1, "Second")
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Button7 = GUICtrlCreateButton("...", 536, 352, 27, 17)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $ListViewHwnd = GUICtrlGetHandle($ListView1)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###
    For $i = 1 To 99
    GUICtrlCreateListViewItem("|" & $i & "| aaaaaaaaaaaaaa|" & $i, $ListView1)
    Next

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;<=========================================== Bemachrichtigung Doppelklick
    ;_aktuelisieren()

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

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

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

    EndSwitch
    #cs
    If _GUICtrlListView_GetSelectionMark($ListViewHwnd) <> $ListViewSel Then
    _GUICtrlListView_GetSelectionMark($ListViewHwnd), True)
    If _GUICtrlListView_GetItemChecked($ListView1, $ListViewSel) Then
    $ListViewSel = _GUICtrlListView_GetSelectionMark($ListViewHwnd)
    $ruckgabe = _GUICtrlListView_GetItemText($ListViewHwnd, $ListViewSel)
    $aItemText = _GUICtrlListView_GetItemTextArray($ListView1, $ListViewSel)
    ConsoleWrite($aItemText[2] & " " & $aItemText[3] & @CRLF)
    _GUICtrlListView_SetItemSelected($ListView1, -1, False, False)
    _GUICtrlListView_SetItemSelected($ListView1, $ListViewSel, True, True)
    _GUICtrlListView_EnsureVisible($ListView1, $ListViewSel)
    Sleep(Random(250, 750, 1))
    EndIf
    EndIf
    #ce
    WEnd

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

    Func WM_NOTIFY($hWnd, $MsgID, $wParam, $lParam) ;<================== Benachrichtigung Doppelklick (Original from Chaoskeks [in ChaosExecution])
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return 0
    $code = DllStructGetData($tagNMHDR, 3)
    If $wParam = $ListView1 Then
    ;ConsoleWrite($code & @CRLF)
    Switch $code
    Case -3
    $ar = _GUICtrlListView_GetSelectedIndices($ListView1, True)
    If $ar[0] > 0 Then
    $iSelected = $ar[1]
    ConsoleWrite($iSelected & @CRLF)
    If _GUICtrlListView_GetItemChecked($ListView1, $iSelected) Then
    ConsoleWrite("was selected" & @CRLF)
    _GUICtrlListView_SetItemChecked($ListView1,$iSelected, False)
    Else
    ConsoleWrite("was not selected" & @CRLF)
    _GUICtrlListView_SetItemChecked($ListView1,$iSelected, True)
    EndIf
    EndIf
    EndSwitch
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    mfg (Auto)Bert

  • Hallo freaky,

    ich habe es gerade eben noch einmal heruntergeladen und getestet. Es fuunktioniert bei mir einwandfrei. Hast du Änderungen vorgenommen (z.B. in der while Schleife) ?

    mfg (Auto)Bert

  • Ne klapt supper, ich hatte vorhin noch Win7 und da ging das nicht ^^
    Jetzt habe ich wieder XP und da geht es und das mit 1 Klick habe ich auch hinbekommen :)

    /Edit:
    Wie krige ich es hin das eine MSG beim Draufklicken vom Item und / oder Checkbox kommt ?

    Einmal editiert, zuletzt von Freaky (20. März 2010 um 21:13)