Case Abfrage ob Listvieweintrag markiert ist?!

  • Bei ner Listbox ist das irgendwie einfach und ich frag im Case nur den namen der Box ab und GUICtrlRead gibt mir den wert der makierten Zeile zurück

    [autoit]

    Case $names

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

    $slistname = GUICtrlRead($names)

    [/autoit]

    Nur wie funktioniert sowas bei ner Listview?

    Sobald ein eintrag markiert wird soll etwas passieren

    Thx schonmal

    3 Mal editiert, zuletzt von miks.de (30. Oktober 2012 um 15:18)

  • Wenn sie markiert sind, kannst du sie mit GUICtrlRead(GUICtrlRead($cListview)) auslesen. Wie in dem Beispiel in der Hilfe.

  • das problem besteht eher in dem "Case" wenn ich bei der Listbox "Case $nameListbox" nehme sieht er das als click in die Listbox
    Wenn ich das bei ner Listview mache also "Case $nameListview" nimmt er das als click aus die spalten nicht als click in die listview selber.

  • so ähnlich wie das... natürlich noch registrieren per GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

    Spoiler anzeigen
    [autoit]


    Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam
    ;
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListViewPC

    $hWndListViewPC = $LVPC

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

    If Not IsHWnd($LVPC) Then $hWndListViewPC = GUICtrlGetHandle($LVPC)

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

    $tNMHDR = DllStructCreate("hwnd hWndFrom;uint_ptr IDFrom;INT Code", $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")

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

    If $hWndFrom = $hWndListViewPC Then
    $RDPString = _GUICtrlListView_GetItemText($hWndListViewPC, _GUICtrlListView_GetSelectionMark($hWndListViewPC),0)
    If $iCode = -2 Then ;NM_CLICK
    Testping() ; mach dies und das..
    EndIf
    EndIf

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

    Return 'GUI_RUNDEFMSG'
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • Hier einmal ein komplettes Beispiel:

    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|" & Random(0,10,1), $ListView)
    ;Achtung 1. Splte ht keinen Inhalt (nur CheckBox)
    Next
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;<=========================================== Bemachrichtigung Rechtsklick

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

    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 & $aItemText[4] & @CRLF)
    ; Automatisch an die Stelle hinscrollen
    _GUICtrlListView_EnsureVisible($ListView, $i)
    Sleep(Random(750, 1750, 1))
    EndIf
    Next
    EndSwitch
    WEnd

    [/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 = $ListView Then
    ;ConsoleWrite($code & @CRLF)
    Switch $code
    ;case $NM_RCLICK ,$NM_DBLCLK, ;Rechtsklick, DoppelKlick
    Case $NM_CLICK ;klick
    If _GUICtrlListView_GetSelectedCount($ListView) > 0 Then
    For $i = 0 To _GUICtrlListView_GetItemCount($ListView)
    If _GUICtrlListView_GetItemSelected($ListView, $i) Then
    $aItem = _GUICtrlListView_GetItemTextArray($ListView, $i)
    MsgBox(0, "Klick auf ", $aItem[2] & " " & $aItem[3] & @CRLF & $aItem[4])
    EndIf
    Next
    EndIf
    EndSwitch
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    mfg autoBert

  • Danke das war Super ;)