ListView, Ausgewähltes Element ausgeben

  • Hallo
    Hab hier nen ListView und versuche das Aktive Element auszulesen:

    [autoit]

    $data = _GUICtrlListView_GetItemParam($Lnachrichten, _GUICtrlListView_GetSelectedIndices($Lnachrichten))
    _ArrayDisplay($data)
    msgbox(0, "", _GUICtrlListView_GetItemText($Lnachrichten, _GUICtrlListView_GetSelectedIndices($Lnachrichten)))

    [/autoit]


    hab schon alles mögliche ausprobiert, mit msgbox und ArrayDisplay, in der box kommt nie was, im ArrayDisplay manchmal n paar zahlen die ich nicht zuordnen kann...[MSIE_newline_end ]

  • mit

    [autoit]

    guictrlread

    [/autoit]

    kannst du auslesen was makiert ist und die zahlen geben die position an...

  • ich zitiere mal die hilfe:

    [autoit]

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

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $listview, $button, $item1, $item2, $item3, $input1, $msg

    GUICreate("listview items", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
    GUISetBkColor(0x00E0FFFF) ; will change background color

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

    $listview = GUICtrlCreateListView("col1 |col2|col3 ", 10, 10, 200, 150);,$LVS_SORTDESCENDING)
    $button = GUICtrlCreateButton("Value?", 75, 170, 70, 20)
    $item1 = GUICtrlCreateListViewItem("item2|col22|col23", $listview)
    $item2 = GUICtrlCreateListViewItem("item1|col12|col13", $listview)
    $item3 = GUICtrlCreateListViewItem("item3|col32|col33", $listview)
    $input1 = GUICtrlCreateInput("", 20, 200, 150)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and dropping
    GUISetState()
    GUICtrlSetData($item2, "ITEM1")
    GUICtrlSetData($item3, "||COL33")
    GUICtrlDelete($item1)

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

    Do
    $msg = GUIGetMsg()

    Select
    Case $msg = $button
    MsgBox(0, "listview item", GUICtrlRead(GUICtrlRead($listview)), 2)
    Case $msg = $listview
    MsgBox(0, "listview", "clicked=" & GUICtrlGetState($listview), 2)
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE
    EndFunc ;==>Example

    [/autoit]
  • die möglichkeit, nur den inhalt einer bestimmten spalte auszulesen gibt es nicht zufällig, oder?

    • Offizieller Beitrag

    die möglichkeit, nur den inhalt einer bestimmten spalte auszulesen gibt es nicht zufällig, oder?


    Doch, du brauchst den Index der Zeile (ItemIndex) und den Index der Spalte (SubItemIndex). Damit kannst du direkt drauf zugreifen. Schau mal die Funktionen der Listview-UDF an.

  • [autoit]

    _GUICtrlListView_GetSubItemRect($Lnachrichten,GUICtrlRead($Lnachrichten), 2)

    [/autoit]


    Ich nehme an, die Subitems fangen nicht bei 0 an...
    Wieder keine ausgabe...
    Listview-UDF hab ich mir angeguckt, werd dadraus aber nicht schlau. so viele funktionen die scheinbar irgendwas abrufen sollen...[MSIE_newline_end ]

  • Hallo tklausl,

    am einfachsten hast du es mit

    [autoit]

    _GUICtrlListView_GetItemTextArray

    [/autoit]

    , da es dir ohne Angabe des Indexes ein Array allen Spalten der aktiven Auswahl zurückgibt. Hierzu ein Beispiel-Skript (case $hbtnInfo):

    Spoiler anzeigen
    [autoit]

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

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

    ;#include <array.au3>

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

    Local $tZeit, $s1, $s2

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

    $main = GUICreate("Test Drag & Drop from LV1 to LV2 DblClick in LV1 with ContextMenu in LV1 (copies to ClipBoard", 600, 400)
    $listview = GUICtrlCreateListView("Gruppe1| BlubText", 10, 10, 200, 100, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE) ; legt fest, dass Hintergrundfarbe wechselt
    GUICtrlSetBkColor(-1, 0xE6E6FA) ; Hintergrundfarbe 1

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

    $listview2 = GUICtrlCreateListView("Gruppe2 | BlubText", 230, 10, 200, 100, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))
    GUICtrlSetState($listview2, $GUI_DROPACCEPTED)
    $hbtnInfo = GUICtrlCreateButton("Info", 10, 120, 100, 20)
    $hbtnSave = GUICtrlCreateButton("&Speichern", 230, 120, 100, 20)
    $hbtnLoad = GUICtrlCreateButton("&Laden", 230, 150, 100, 20)

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

    For $i = 1 To 9
    $listitem = GUICtrlCreateListViewItem("test" & $i & " |Blub " & Random(1, 9), $listview)
    GUICtrlSetBkColor(-1, 0xcccccc) ; Hintergrundfarbe 2
    Next
    $idContextmenu = GUICtrlCreateContextMenu($listview)
    $idClipmenu = GUICtrlCreateMenuItem("Selektierte ins ClipBoard", $idContextmenu)
    $idAllClipmenu = GUICtrlCreateMenuItem("Alle aus Splate 2 ins ClipBoard", $idContextmenu)
    $idDragmenu = GUICtrlCreateMenuItem("In LV 2", $idContextmenu)

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;<=========================================== Bemachrichtigung Doppelklick
    GUISetState()
    $first = True
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_DROPPED, $idDragmenu
    $ar = _GUICtrlListView_GetSelectedIndices($listview, True)
    ;_ArrayDisplay($ar)
    For $i = 1 To $ar[0]
    $sItem = _GUICtrlListView_GetItemTextString($listview, $ar[$i])
    GUICtrlCreateListViewItem($sItem, $listview2)
    Next
    Case $hbtnInfo
    $i = _GUICtrlListView_GetSelectedIndices($listview, True)
    If $i[0] > 0 Then
    $Wert = _GUICtrlListView_GetItemTextArray($listview, $i[1])
    If $Wert[0] > 1 Then MsgBox(0, "", "Dein zweiter Eintrag ist: " & $Wert[2])
    Else
    MsgBox(0, "", "Kein Eintrag ausgewählt")
    EndIf
    Case $hbtnSave
    SaveLV(@ScriptDir & "\LV2.DAT")
    Case $hbtnLoad
    LoadLV(@ScriptDir & "\LV2.DAT")
    Case $idClipmenu
    $aItems = _GUICtrlListView_GetSelectedIndices($listview, True)
    $sItemText = ""
    For $i = 1 To $aItems[0]
    ;Schleifenbeginn 1 da $aItem[0] die Anzahl enhält
    $sItemText &= _GUICtrlListView_GetItemTextString($listview, $aItems[$i]) & @CRLF
    ConsoleWrite($sItemText & @CRLF)
    Next ;= > weiter mit For
    ;ClipPut($sItemText & @CRLF)
    Case $idAllClipmenu
    $sToClip = ""
    For $i = 0 To _GUICtrlListView_GetItemCount($listview)
    $aItem = _GUICtrlListView_GetItemTextArray($listview, $i)
    $sToClip &= $aItem[2] & @CRLF
    Next
    ClipPut($sToClip)
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func SaveLV($sFile)
    Local $hFileOut, $aItem
    $hFileOut = FileOpen($sFile, 2)
    For $j = 0 To _GUICtrlListView_GetItemCount($listview2) - 1
    $aItem = _GUICtrlListView_GetItemTextString($listview2, $j)
    FileWriteLine($hFileOut, $aItem)
    Next
    FileClose($hFileOut)
    EndFunc ;==>SaveLV

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

    Func LoadLV($sFile)
    Local $aItems
    If FileExists($sFile) Then
    _FileReadToArray($sFile, $aItems)
    If IsArray($aItems) Then
    _GUICtrlListView_DeleteAllItems($listview2)
    ;_ArrayDisplay($aItems)
    For $j = 1 To $aItems[0]
    GUICtrlCreateListViewItem($aItems[$j], $listview2)
    Next
    EndIf
    EndIf
    EndFunc ;==>LoadLV

    [/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 = $listview Then
    ;ConsoleWrite($code & @CRLF)
    Switch $code
    Case -3
    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, "Doppel-Klick auf ", $aItem[1] & @CRLF & @CRLF & $aItem[2])
    EndIf
    Next
    EndIf
    EndSwitch
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (29. März 2010 um 23:08)

    • Offizieller Beitrag

    Ich nehme an, die Subitems fangen nicht bei 0 an...


    Jein. SubItem 0 wäre die erste Spalte und somit das Item. Alle Indexe sind 0-basiert.

    - _GUICtrlListView_GetSelectedIndices gibt den Index der markierten Zeile zurück
    - _GUICtrlListView_GetItemText gibt dir den Text des Item/SubItem zurück

  • meisnt du sowas?

    [autoit]

    #include <GuiListView.au3>
    $hGui = GUICreate ("ListView Test",600,420)
    $hListView = GUICtrlCreateListView("Test1|Test2|Test3",10,10,580,380)
    $hButton = GUICtrlCreateButton ("Get Selectet Item",10,392)
    GUISetState ()
    _GUICtrlListView_AddItem ($hListView,"Z1")
    _GUICtrlListView_AddSubItem ($hListView,0,"Z1 S1",1)
    _GUICtrlListView_AddSubItem ($hListView,0,"Z1 S2",2)
    _GUICtrlListView_AddItem ($hListView,"Z2")
    _GUICtrlListView_AddSubItem ($hListView,1,"Z2 S1",1)
    _GUICtrlListView_AddSubItem ($hListView,1,"Z2 S2",2)
    _GUICtrlListView_AddItem ($hListView,"Z3")
    _GUICtrlListView_AddSubItem ($hListView,2,"Z3 S1",1)
    _GUICtrlListView_AddSubItem ($hListView,2,"Z3 S2",2)

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $hButton
    $Column = _GUICtrlListView_GetSelectedIndices($hListView)
    MsgBox (0,$Column,_GUICtrlListView_GetItemText($hListView, Abs ($Column)) & @CRLF & _GUICtrlListView_GetItemText($hListView, Abs ($Column),1) & @CRLF & _GUICtrlListView_GetItemText($hListView, Abs ($Column),2))
    EndSwitch
    WEnd

    [/autoit]

    mfg. Jam00