ListView und Selected Item BGC

  • Hallo,
    da ich recht neu in dem Bereich AutoIt bin muss ich gleich mal etwas fragen.

    1. Ich habe eine Listenausgabe (NUMMER | NAME)
    2. Ich wähle ein Eintrag aus
    3. ich klicke auf Copy um den Eintrage zu kopieren

    Alles soweit gut, aber...

    Wie kann ich nun sagen, das der ausgewählte Eintrag (NUMMER | NAME)
    eine andere Hintergrundfarbe bekommt?
    Wenn ich nun einen anderen Eintrag auswähle und auf Copy klicke,
    dann soll natürlich nur der aktuell ausgewählte Eintrag eine andere Hintergrundfarbe bekommen.

    Mich stört es etwas, weill die Hintergrundfarbe ganz hellgrau ist und ich möchte sie gerne in hellblau oder so haben.

    Ich hoffe mir kann hier einer weiterhelfen....
    DANKE!

    Einmal editiert, zuletzt von Ram3000 (29. August 2013 um 16:03)

  • ok hier ist mein test script:

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

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

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

    Example()

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

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

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

    GUICreate("listview items", 250, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
    GUISetBkColor(0x00E0FFFF)

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

    $listview = GUICtrlCreateListView("Nr |Name", 10, 10, 200, 150)
    $button = GUICtrlCreateButton("copy", 75, 170, 70, 20)
    $item1 = GUICtrlCreateListViewItem("1111|Artikelname 1", $listview)
    $item2 = GUICtrlCreateListViewItem("2222|Artikelname 2", $listview)
    $item3 = GUICtrlCreateListViewItem("3333|Artikelname 3", $listview)
    GUISetState()
    GUICtrlSetData($item1, "1111|Artikelname 1")
    GUICtrlSetData($item2, "2222|Artikelname 2")
    GUICtrlSetData($item3, "3333|Artikelname 3")
    GUICtrlDelete($item0)

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

    Do
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $button
    MsgBox(0, "copyed", GUICtrlRead(GUICtrlRead($listview)), 3)
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE
    EndFunc

    [/autoit]

    ich möchte gerne, wenn man auf copy geklickt hat,
    das die hintergrundfarbe der artikelzeile geändert wird
    und wenn man nun einen anderen artikel angeklickt hat,
    dann soll der neue artikel eine andere hintergrundfarbe bekommen.

    Danke!

  • Danke, das sieht doch super aus!
    uff...ich habe es mal versucht bekomme das aber nicht so richtig zum laufen.
    Könntest Du mir da etwas helfen bzw zeigen wie und wo ich was machen muss?
    Wie gesagt ich bin noch recht neu im Bereich AutoIt....
    Danke!

  • Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include "OwnLVSelection[1.2].au3"

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

    Example()

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

    Func Example()
    Local $cID_Listview, $cID_Button, $aItemHandles[6], $MSG

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

    GUICreate("listview items", 250, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
    GUISetBkColor(0x00E0FFFF)

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

    $cID_Listview = GUICtrlCreateListView("Nr |Name", 10, 10, 200, 150)
    $cID_Button = GUICtrlCreateButton("copy", 75, 170, 70, 20)
    $aItemHandles[0] = _GUICtrlListView_AddItem($cID_Listview, "1111")
    $aItemHandles[1] = _GUICtrlListView_AddSubItem($cID_Listview, 0, "Artikel 1", 1)
    $aItemHandles[2] = _GUICtrlListView_AddItem($cID_Listview, "2222")
    $aItemHandles[3] = _GUICtrlListView_AddSubItem($cID_Listview, 1, "Artikel 2", 1)
    $aItemHandles[4] = _GUICtrlListView_AddItem($cID_Listview, "3333")
    $aItemHandles[5] = _GUICtrlListView_AddSubItem($cID_Listview, 2, "Artikel 3", 1)

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

    GUISetState()

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

    Do
    $MSG = GUIGetMsg()

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

    Select
    Case $MSG = $cID_Button
    _GuiCtrlListview_OwnSelectionAdd(GUICtrlGetHandle($cID_Listview))
    If @error Then MsgBox(48, "Fehler", "Fehler bei: _GuiCtrlListview_OwnSelectionAdd(GUICtrlGetHandle($cID_Listview))" & @CR & "Errorcode: " & @error)
    _GuiCtrlListview_OwnSelectionSetColor(GUICtrlGetHandle($cID_Listview), 0x1111FF, 0x00BBBB)
    If @error Then MsgBox(48, "Fehler", "Fehler bei: _GuiCtrlListview_OwnSelectionSetColor(GUICtrlGetHandle($cID_Listview), 0x1111FF, 0x00BBBB)" & @CR & "Errorcode: " & @error)
    EndSelect
    Until $MSG = $GUI_EVENT_CLOSE
    EndFunc

    [/autoit]

    Leider verhält er sich bei mir auch noch manchmal komisch...beim ersten mal klciken des Buttons wird das gesamte Feld schwarz gefärbt, beim erneuten klicken dann nach den angegebenen Farben. Aber manschmal verschwindet die Spalte 0 ... hab grad leider nicht so die Zeit mich genauer hinzusetzen, aber vielleicht kannst du ja damit weiterarbetien Ram3000 :)

    So Far

    Grüße Yaerox

    Grüne Hölle

  • hi, danke schon mal für die Hilfe.
    Ich habe das nun schon mal soweit hinbekommen, das die selektierte Zeile eine andere HG-Farbe bekommt
    und auch behält bis zum nächsten klick auf ein neues Item.

    Aber leider ist der Scrollbar weg?!
    Wie kann ich den wieder einschalen?

    [autoit]


    #include <GuiListView.au3>
    #include "include/OwnLVSelection[1.2].au3"

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

    $gui = GUICreate('selected item', 430, 300)
    $cLV1 = GuiCtrlCreateListView('Number|Article', 10, 10, 400, 235 )
    _GUICtrlListView_SetColumnWidth ($cLV1, 0, 100)
    _GUICtrlListView_SetColumnWidth ($cLV1, 1, 300)
    $hLV1 = GUICtrlGetHandle($cLV1)

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

    For $i = 1 To 30
    $index = _GUICtrlListView_AddItem($hLV1, '1234-' & $i)
    _GUICtrlListView_AddSubItem($hLV1, $index, 'Itemname-' & $i & '-2', 1)
    Next
    _GuiCtrlListview_OwnSelectionAdd($hLV1)
    _GuiCtrlListview_OwnSelectionSetColor($hLV1, 0x112541, 0xBDFAFF)

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

    GUISetState()

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

    Do
    Until GUIGetMsg() = -1

    [/autoit]
  • juhu, ich glaube ich habe es hinbekommen. ;)
    Kann sich das mal einer angucken, ob das soweit ok ist?!

    [autoit]


    #include <GuiListView.au3>
    #include "include/OwnLVSelection[1.2].au3"
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    #include <GuiScrollBars.au3>
    #include <ScrollBarConstants.au3>

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

    Local $cLV1

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

    $gui = GUICreate('selected item', 430, 300, -1, -1 )
    $cLV1 = GuiCtrlCreateListView('Number|Article', 10, 10, 400, 235)
    _GUICtrlListView_SetColumnWidth ($cLV1, 0, 100)
    _GUICtrlListView_SetColumnWidth ($cLV1, 1, 260)
    $hLV1 = GUICtrlGetHandle($cLV1)

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

    For $i = 1 To 30
    $index = _GUICtrlListView_AddItem($hLV1, '1234-' & $i)
    _GUICtrlListView_AddSubItem($hLV1, $index, 'Itemname-' & $i & '-2', 1)
    Next
    _GuiCtrlListview_OwnSelectionAdd($hLV1)
    _GuiCtrlListview_OwnSelectionSetColor($hLV1, 0x112541, 0xBDFAFF)

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

    _GUIScrollBars_Init($hLV1)
    _GUIScrollBars_ShowScrollBar($hLV1, $SB_HORZ, False)

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

    GUISetState()

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

    Do
    Until GUIGetMsg() = -1

    [/autoit]
  • Bei deiner ersten Variante sind Scrollbalken vorhanden, es scheint nur als ob sie ausgeblendet seien. Wenn du an den betroffenen Stellen mal mit der Maus klickst, siehst du diese und kannst sie nutzen.

    Mögliche Ursache könnte die folgende Zeile in der UDF sein:

    [autoit]


    GUICtrlSetStyle(_WinAPI_GetDlgCtrlID($hLV), BitOR($iStyle,$LVS_REPORT,$LVS_OWNERDRAWFIXED))

    [/autoit]

    Aber nunja, soweit hast du dein Problem ja gelöst. Es gibt ja immer mehrere Wege die einem zum Ziel bringen, ob es nu die performateste ist ist ja u.u. total egal wenn es für deine Aufgaben ausreichend ist.

    So Far

    Grüße Yaerox

    Grüne Hölle

  • Jup YaeroxXO, das ist die Zeile ;)
    Die saubere Lösung denke ich wäre mit Begin- und EndUpdate zu arbeiten. Ich frag BugFix mal ob er das nicht in die Udf aufnehmen will.

    Du könntest es anpassen indem du Zeile 91 in der UDF durch den 3Zeiler ersetzt ;)

    [autoit]


    _GUICtrlListView_BeginUpdate($hLV)
    GUICtrlSetStyle(_WinAPI_GetDlgCtrlID($hLV), BitOR($iStyle,$LVS_REPORT,$LVS_OWNERDRAWFIXED))
    _GUICtrlListView_EndUpdate($hLV)

    [/autoit]
  • Ja super!!!
    Ich habe die 2 Zeilen für die Scrollbars wieder entfernt und das Update eingefügt....

    Nun werden die Scrollsbars auch wieder richtig angezeigt,
    bei großen Listen ist der Bar nun auch wieder kleiner ;)

    ALLES LÄUFT SUPER !
    Danke für die tolle Hilfe !

    *BugFix sollte er auf jedenfall machen/einfügen !