Listview

  • Hallo,

    ich habe folgendes Problem:

    Es gibt $Var mit mehreren Einträgen(Spalte nach unten)
    Diese kann ich alle nacheinander mit Arraydisplay darstellen.

    Ich rufe z.Zt. alle Arraydisplays nacheinander auf und verliere den Überblick

    Diese hätte ich aber gerne zur Übersicht alle in meiner Listview.
    Also: z.B. $Spalte1 soll in der Listview in die erste Spalte eingetragen werden
    $Spalte2 soll in der Listvieview die zweite Spalte...

    Spoiler anzeigen
    [autoit]


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

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

    $Spalte1 = "Einträge 1"
    ;Arraydisplay....
    $Spalte2 = "Einträge 2"
    ;Arraydisplay....
    $Spalte3 = "Einträge 3"
    ;Arraydisplay....

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

    Example()

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

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

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

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

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

    $listview = GUICtrlCreateListView("col1 |col2|col3|col4 ", 10, 10, 400, 400);,$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)
    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()

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

    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]


    Liebe Grüße
    ;) Ilse

  • Hallo Ilse,

    dein Beispiel ost als AUgangsgrundlage unbrauchbar da $Spalte1, $Spalte2 und $Spalte3 keine Arrays sind. Ich ha mal ein Beispiel gebastelt, das deinen Wünschen entsprechen sollte:

    Spoiler anzeigen
    [autoit]

    ; *** Start added by AutoIt3Wrapper ***
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    ; *** End added by AutoIt3Wrapper ***
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <array.au3>

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

    $i1 = Random(5, 19, 1)

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

    Local $aSpalte1[$i1]
    For $i = 0 To $i1 - 1
    $aSpalte1[$i] = "Zeile " & $i & " Spalte 1"
    Next
    _ArrayDisplay($aSpalte1)

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

    $i2 = Random(7, 12, 1)

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

    Local $aSpalte2[$i2]
    For $i = 0 To $i2 - 1
    $aSpalte2[$i] = "Zeile " & $i & " Spalte 2"
    Next
    _ArrayDisplay($aSpalte2)

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

    $i3 = Random(8, 15, 1)

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

    Local $aSpalte3[$i3]
    For $i = 0 To $i3 - 1
    $aSpalte3[$i] = "Zeile " & $i & " Spalte 3"
    Next
    _ArrayDisplay($aSpalte3)

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

    ;in meine Beispiel eigentlich unnötig aber du wirst es bei dir evtlbenötigen
    ;#cs
    $i1 = UBound($aSpalte1)
    $i2 = UBound($aSpalte2)
    $i3 = UBound($aSpalte3)
    ;#ce

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

    $iLV = $i1
    If $i2 > $iLV Then $iLV = $i2
    If $i3 > $iLV Then $iLV = $i3

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

    ConsoleWrite($i1 & @TAB & $i2 & @TAB & $i3 & @CRLF)

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

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

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

    $listview = GUICtrlCreateListView("Spalte 1 |Spalte 2|Spalte 3 ", 10, 10, 400, 400);,$LVS_SORTDESCENDING)
    $button = GUICtrlCreateButton("Value?", 75, 170, 70, 20)
    For $i = 0 To $iLV
    $sCol = ""
    If $i < $i1 Then $sCol = $aSpalte1[$i]
    $sCol &= "|"
    If $i < $i2 Then $sCol &= $aSpalte2[$i]
    $sCol &= "|"
    If $i < $i3 Then $sCol &= $aSpalte3[$i]
    ConsoleWrite($sCol & @CRLF)
    GUICtrlCreateListViewItem($sCol, $listview)
    Next
    GUICtrlCreateInput("", 20, 200, 150)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and dropping
    GUISetState()

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

    Do
    $msg = GUIGetMsg()

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

    Switch $msg
    Case $button
    MsgBox(0, "listview item", GUICtrlRead(GUICtrlRead($listview)), 2)
    Case $listview
    MsgBox(0, "listview", "clicked=" & GUICtrlGetState($listview), 2)
    EndSwitch
    Until $msg = $GUI_EVENT_CLOSE

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

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (1. Juni 2012 um 12:57)

  • so in etwa?

    Spoiler anzeigen
    [autoit]

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

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

    Global $aSpalte1[6] = ["Dies", "kommt", "in", "die", "erste", "Spalte"]
    Global $aSpalte2[9] = ["Dies", "kommt", "in", "die", "zweite", "Spalte", "aber", "diesmal", "mehr"]
    Global $aSpalte3[4] = ["Und", "hier", "ganz", "wenig"]

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

    Global $aItems[UBound($aSpalte1)][3]
    For $i = 0 To UBound($aSpalte1) - 1
    $aItems[$i][0] = $aSpalte1[$i]
    Next

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

    If UBound($aSpalte2) > UBound($aSpalte1) Then ReDim $aItems[UBound($aSpalte2)][3]
    For $i = 0 To UBound($aSpalte2) - 1
    $aItems[$i][1] = $aSpalte2[$i]
    Next

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

    If UBound($aSpalte3) > UBound($aSpalte2) And UBound($aSpalte3) > UBound($aSpalte1) Then ReDim $aItems[UBound($aSpalte3)][3]
    For $i = 0 To UBound($aSpalte3) - 1
    $aItems[$i][2] = $aSpalte3[$i]
    Next

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

    Example()

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

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

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

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

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

    $listview = GUICtrlCreateListView("col1 |col2|col3", 10, 10, 400, 400);,$LVS_SORTDESCENDING)
    $button = GUICtrlCreateButton("Value?", 75, 170, 70, 20)
    _GUICtrlListView_AddArray($listview, $aItems)
    GUICtrlCreateInput("", 20, 200, 150)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and dropping
    GUISetState()

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

    Do
    $msg = GUIGetMsg()

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

    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]

    Edit: Ich sollte vielleicht mal aktualisieren, bevor ich was poste ^^

    Einmal editiert, zuletzt von m-obi (1. Juni 2012 um 13:17)

  • Hallo,

    und merci für die Hilfe.

    autoBert
    Habe versucht mein Script nach deinem anzupassen,
    ging leider nicht.

    1. Meine regex _ArrayDisplays zeigen alle Werte nacheinander an.
    2. Aber die Tabelle füllt nicht alle Spalten.

    Es kann natürlich sein, dass regex nur Spalte 2 und 3 und 5 liefert.
    Dann sollten diese Spalten ausgefüllt werden.

    Spoiler anzeigen
    [autoit]


    ; *** Start added by AutoIt3Wrapper ***
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <array.au3>

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

    $sSource = ClipGet()
    $sSource = (StringReplace(StringStripCR($sSource), @LF, " "))

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

    ClipPut($sSource)

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

    $Spalte1 = StringRegExp($sSource, 'Hunde.*?\s(\d+)', 3)
    _ArrayDisplay($Spalte1, "Hunde")
    $Spalte2 = StringRegExp($sSource, '(?:Welpen|Geburten).*?\s(\d+)', 3)
    _ArrayDisplay($Spalte2, "Welpen")
    $Spalte3 = StringRegExp($sSource, 'Katzen*?\s(\d+)', 3)
    _ArrayDisplay($Spalte3, "Katzen")
    $Spalte4 = StringRegExp($sSource, 'Sittiche.*?\s(\d+)', 3)
    _ArrayDisplay($Spalte4, "Sittiche")
    $Spalte5 = StringRegExp($sSource, 'Klein.*?\s(\d+)', 3)
    _ArrayDisplay($Spalte5, "Kleintiere")

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

    ; bis hierhin wird alles korrekt ausgegeben!
    ;#cs

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

    ; Hier sollte die Listview beginnen...

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

    $i1 = UBound($Spalte1)
    $i2 = UBound($Spalte2)
    $i3 = UBound($Spalte3)
    $i4 = UBound($Spalte4)
    $i5 = UBound($Spalte5)
    ;#ce

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

    $iLV = $i1
    If $i2 > $iLV Then $iLV = $i2
    If $i3 > $iLV Then $iLV = $i3

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

    ConsoleWrite($i1 & @TAB & $i2 & @TAB & $i3 & @CRLF)

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

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

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

    $listview = GUICtrlCreateListView("Hunde|Welpen|Katzen|Sittiche|Kleintiere", 10, 10, 400, 400);,$LVS_SORTDESCENDING)
    $button = GUICtrlCreateButton("Value?", 75, 170, 70, 20)
    For $i = 0 To $iLV
    $sCol = ""
    If $i < $i1 Then $sCol = $Spalte1[$i]
    $sCol &= "|"
    If $i < $i2 Then $sCol &= $Spalte2[$i]
    $sCol &= "|"
    If $i < $i3 Then $sCol &= $Spalte3[$i]
    $sCol &= "|"
    If $i < $i3 Then $sCol &= $Spalte4[$i]
    $sCol &= "|"
    If $i < $i3 Then $sCol &= $Spalte5[$i]
    ConsoleWrite($sCol & @CRLF)

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

    GUICtrlCreateListViewItem($sCol, $listview)
    Next
    GUICtrlCreateInput("", 20, 200, 150)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and dropping
    GUISetState()

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

    Do
    $msg = GUIGetMsg()

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

    Switch $msg
    Case $button
    MsgBox(0, "listview item", GUICtrlRead(GUICtrlRead($listview)), 2)
    Case $listview
    MsgBox(0, "listview", "clicked=" & GUICtrlGetState($listview), 2)
    EndSwitch
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    @m-obi,

    im Prinzip so...
    nur die Werte sind immer unterschiedlich groß,
    da ich sie mit regex ermittle.


    Hier nochmal das Grundgerüst v. Regex (funktioniert prima)
    und das sollte in die Listview, am besten mit den
    Headern von Arraydisplay...(Hunde, Welpen...

    Spoiler anzeigen
    [autoit]


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

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

    $sSource = ClipGet()
    $sSource = (StringReplace(StringStripCR($sSource), @LF, " "))

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

    ClipPut($sSource)

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

    $Spalte1 = StringRegExp($sSource, 'Hunde.*?\s(\d+)', 3)
    _ArrayDisplay($Spalte1, "Hunde")
    $Spalte2 = StringRegExp($sSource, '(?:Welpen|Geburten).*?\s(\d+)', 3)
    _ArrayDisplay($Spalte2, "Welpen")
    $Spalte3 = StringRegExp($sSource, 'Katzen*?\s(\d+)', 3)
    _ArrayDisplay($Spalte3, "Katzen")
    $Spalte4 = StringRegExp($sSource, 'Sittiche.*?\s(\d+)', 3)
    _ArrayDisplay($Spalte4, "Sittiche")
    $Spalte5 = StringRegExp($sSource, 'Klein.*?\s(\d+)', 3)
    _ArrayDisplay($Spalte5, "Kleintiere")

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

    ; bis hierhin wird alles korrekt ausgegeben!

    [/autoit]


    ...schade, muß schon wieder los...

    bis später

    Liebe Grüße
    ;) Ilse

  • Ja und du kannst es doch einfach einfügen, ist doch egal wie groß die sind.

  • Hallo,

    hab das jetzt hinbekommen.
    Brauch aber nochmal Hilfe:

    Wenn die Listview gefüllt ist
    und das Script aktiv ist...

    Wie kann ich das Listview leeren?

    Ich dachte z-B. so:
    Ich drücke F5 (Hotkey) die Zwischenablage wird gelesen
    (regex) ....Listview wird gestartet OK...
    Ich kopiere was anderes in die Zwischenablage

    Ich drücke F5 erneut
    Alte Listview wird erneuert...

    geht das? Ich meine daß das Script immer geöffnet bleibt
    nur wenn ich F5 drücke wird die Listview gefüllt

    :( Grüße Ilse

  • In der selben UDF wie AddArray, heißt DeleteAllItems. Aber wieso guckst du nicht einfach in die Hilfe?

  • ...hab's soweit hinbekommen.

    Was noch nicht klappt ist folgendes.

    Wie kann ich eine Zelle des Listviews lesen?

    Ich klicke z.B. in Spalte 3 auf die 2. Zelle...

    [autoit]


    Case $listview
    MsgBox(0, "listview item", GUICtrlRead(GUICtrlRead($listview)), 2)

    [/autoit]

    da komm ich noch nicht weiter...


    Liebe Grüße
    ;) Ilse