ListviewIntem Checkboxes auslesen

  • Hallo Leute.

    Ich brauch wieder mal einen Denkanstoß.
    Zwar will ich in einer EditBox Textzeilen einfügen und und diese danach auch genau so ( Zeile für Zeile ) in einer ListviewIntem Box angezeigt haben. Das hab ich mit etwas Hilfe eines Freundes hinbekommen.

    Jetzt mein Problem. Ich will den Text der ausgewählten Intems kopieren. Nun hab ich aber einfach mal keinen Plan wie ich das anstellen kann. progandy hat mir _GUICtrlListView_GetItemChecked empfohlen. Ich hab jetzt ewig gelesen und versucht zu verstehen --> failed.

    Hoffe ihr könnt mir mal wieder weiter helfen. :)

    [autoit]

    #include <EditConstants.au3>
    #include <ButtonConstants.au3>
    #include <Constants.au3>
    #include <ProgressConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListviewConstants.au3>
    #include <WindowsConstants.au3>
    #Include <GuiEdit.au3>
    #Include <GuiListView.au3>

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

    opt("mustdeclarevars", 1)
    opt("GUIDataSeparatorChar", "?")

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

    Global $msg, $list, $copy, $fixlist, $edit, $listlines, $i, $checklist, $fix

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

    main ()

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

    func main()

    guicreate("Skripter", 1200, 700); GUI

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

    $list = GUICtrlCreateEdit("", 20, 85, 1160, 100, $ES_WANTRETURN + $WS_VSCROLL, $ES_NOHIDESEL + $ES_OEMCONVERT); Mehrzeiliges Inputfenster mit Scroll
    GUICtrlCreateLabel("Log hier", 40, 60, 100)

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

    $copy = GUICtrlCreateButton("process", 50, 25, 80); Kopiert Log in die Listbox

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

    GUISetState(@SW_SHOW)

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

    while 1
    $msg = GUIGetMsg()

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

    Select
    case $msg = $GUI_EVENT_Close; Schließt das Gui
    ExitLoop
    Exit

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

    case $msg = $copy ; kopiert log in listview
    call("fix")

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

    EndSelect

    WEnd
    endfunc

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

    func fix()


    $fix = GUICtrlCreateButton("Erstelle Fix", 150, 25, 80); erstellt den Fixbutton

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

    $listlines=_GUICtrlEdit_GetLineCount($list); Erfasst die Anzahl der Zeilen
    $fixlist = GUICtrlCreateListView("fix ", 20, 200, 1160, 500)
    _GUICtrlListView_SetExtendedListViewStyle($fixlist, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))

    For $i=0 To $listlines Step 1 ; Schleife startet bei 0 und geht in 1er Schritten bis §listlines

    local $checklist = GUICtrlCreateListViewItem(_GUICtrlEdit_GetLine($list,$i),$fixlist) ;Packt die Zeile von $list an Position $i in die Listview als Listviewitem
    next
    while 1
    $msg = GUIGetMsg()
    Select
    case $msg = $gui_event_close
    ExitLoop
    Exit
    case $msg = $fix
    /* Hier sollte dann der markierte Text in eine neue Box kopiert werden */

    EndSelect
    WEnd
    EndFunc

    [/autoit]
  • So klappt es ;)

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <ButtonConstants.au3>
    #include <Constants.au3>
    #include <ProgressConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListviewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>
    #include <GuiListView.au3>

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

    Opt("mustdeclarevars", 1)
    Opt("GUIDataSeparatorChar", "?")

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

    Global $msg, $list, $copy, $fixlist, $edit, $listlines, $i, $checklist, $fix

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

    main()

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

    Func main()

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

    GUICreate("Skripter", 1200, 700); GUI

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

    $list = GUICtrlCreateEdit("", 20, 85, 1160, 100, $ES_WANTRETURN + $WS_VSCROLL, $ES_NOHIDESEL + $ES_OEMCONVERT); Mehrzeiliges Inputfenster mit Scroll
    GUICtrlCreateLabel("Log hier", 40, 60, 100)

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

    $copy = GUICtrlCreateButton("process", 50, 25, 80); Kopiert Log in die Listbox

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $GUI_EVENT_Close; Schließt das Gui
    ExitLoop
    Exit

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

    Case $msg = $copy ; kopiert log in listview
    Call("fix")

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

    EndSelect

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

    WEnd
    EndFunc ;==>main

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

    Func fix()

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

    $fix = GUICtrlCreateButton("Erstelle Fix", 150, 25, 80); erstellt den Fixbutton

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

    $listlines = _GUICtrlEdit_GetLineCount($list); Erfasst die Anzahl der Zeilen
    $fixlist = GUICtrlCreateListView("fix ", 20, 200, 1160, 500)
    _GUICtrlListView_SetExtendedListViewStyle($fixlist, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))

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

    For $i = 0 To $listlines - 1 Step 1 ; Schleife startet bei 0 und geht in 1er Schritten bis §listlines

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

    Local $checklist = GUICtrlCreateListViewItem(_GUICtrlEdit_GetLine($list, $i), $fixlist) ;Packt die Zeile von $list an Position $i in die Listview als Listviewitem
    Next
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_Close
    ExitLoop
    Exit
    Case $msg = $fix
    Local $text, $text_Alles
    For $z = 0 To _GUICtrlListView_GetItemCount($fixlist) - 1
    If _GUICtrlListView_GetItemChecked($fixlist, $z) = True Then
    $text = _GUICtrlListView_GetItemText($fixlist, $z)
    If $text_Alles = "" Then
    $text_Alles = $text
    Else
    $text_Alles &= @CRLF & $text
    EndIf
    EndIf
    Next
    ClipPut($text_Alles)
    ConsoleWrite($text_Alles)
    EndSelect
    WEnd
    EndFunc ;==>fix

    [/autoit]

    Du mußt jedes Item durchgehen und prüfen, ob es checked ist >>> wenn ja dann den Text speichern

  • Hy und danke.
    Dachte ich mir iwie weil ich andauernd nur true or false bekommen habe.
    Sollte ich dazu _GUICtrlListView_GetItemSelected verwenden ? ( bin ja noch neu dabei )

    Wohin kopieren, am besten in eine neue Editbox :)

    Edit

    Danke euch, ich werde mich bemühen es auch zu verstehen. Die Schleifen mag ich schon in Batch nicht :D

  • Jeder hat mal klein angefangen ;)

    _GUICtrlListView_GetItemSelected geht meine ich nicht mit Checkboxen. Dort wird geprüft ob es markiert ist

  • Ich würde das Ganze noch etwas umstellen.

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <ButtonConstants.au3>
    #include <Constants.au3>
    #include <ProgressConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListviewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>
    #include <GuiListView.au3>

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

    Opt("mustdeclarevars", 1)
    Opt("GUIDataSeparatorChar", "?")
    Global $msg, $list, $process, $fixlist, $edit, $listlines, $i, $checklist, $fix

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

    GUICreate("Skripter", 1200, 700); GUI
    $list = GUICtrlCreateEdit("", 20, 85, 1160, 100, $ES_WANTRETURN + $WS_VSCROLL, $ES_NOHIDESEL + $ES_OEMCONVERT); Mehrzeiliges Inputfenster mit Scroll
    GUICtrlCreateLabel("Log hier", 40, 60, 100)
    $process = GUICtrlCreateButton("process", 50, 25, 80); Kopiert Log in die Listbox
    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_Close; Schließt das Gui
    ExitLoop
    Exit
    Case $msg = $process ; kopiert log in listview
    _copy()
    Case $msg = $fix
    _fix()
    EndSelect
    WEnd

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

    Func _copy()
    $listlines = _GUICtrlEdit_GetLineCount($list); Erfasst die Anzahl der Zeilen
    If $listlines >= 1 And _GUICtrlEdit_GetLine($list, 0) <> "" Then
    $fix = GUICtrlCreateButton("Erstelle Fix", 150, 25, 80); erstellt den Fixbutton
    $fixlist = GUICtrlCreateListView("fix ", 20, 200, 1160, 450)
    _GUICtrlListView_SetExtendedListViewStyle($fixlist, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))
    For $i = 0 To $listlines - 1 Step 1 ; Schleife startet bei 0 und geht in 1er Schritten bis §listlines
    GUICtrlCreateListViewItem(_GUICtrlEdit_GetLine($list, $i), $fixlist) ;Packt die Zeile von $list an Position $i in die Listview als Listviewitem
    Next
    EndIf
    EndFunc ;==>_copy

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

    Func _fix()
    Local $text, $text_Alles
    For $i = 0 To _GUICtrlListView_GetItemCount($fixlist) - 1
    If _GUICtrlListView_GetItemChecked($fixlist, $i) = True Then
    $text = _GUICtrlListView_GetItemText($fixlist, $i)
    If $text_Alles = "" Then
    $text_Alles = $text
    Else
    $text_Alles &= @CRLF & $text
    EndIf
    EndIf
    Next
    ClipPut($text_Alles)
    ConsoleWrite($text_Alles)
    EndFunc ;==>_fix

    [/autoit]
  • Danke I2c. Ist ja noch ne Art Beta Version. Da wird bzw wurde noch viel umgebastelt.

    Womit ich aber ein riesen Problem habe ist, dass in der EditBox nur ein Zeichensatz von 32kbyte erlaubt ist.

    Ist es irgendwie möglich dies zu erhöhen bzw ins unendliche zu setzen ?
    ( sonst war die Arbeit eigentlich umsonst für mich :( )

  • Danke Oscar, bist mein Held.

    Irgendwie schon beschämend das nicht gleich gesehen zu haben :o