New ListView Flag: $GUI_BKCOLOR_LV_ALTERNATE

    • Offizieller Beitrag

    In der aktuellen Prod. wurde Für ListView das Flag: $GUI_BKCOLOR_LV_ALTERNATE übernommen. Die Erklärung dazu in der Hilfe ist recht mager:

    Zitat

    The special flag $GUI_BKCOLOR_LV_ALTERNATE can be used with Listview control to give alternate background of the ListviewItems lines.
    The odd lines will get the color set by GUICtrlSetBkColor of the Listview control.
    The even lines will get the color set by GUICtrlSetBkColor of the ListviewItem control.

    Speziell der Hinweis auf die ungeraden (odd) und geraden (even) Zeilen ist schon verwirrend. Denn die Adressierung im Listview ist ja 0-Index-basierend. D.h. der mit der geraden Zahl "0" adressierte Eintrag wird hier (da Eintrag "1") als ungerade betrachtet. :(
    Aber wenn man es weiß, ists OK. :)
    Über die Syntax, wie das Flag gesetzt werden soll, steht gar nix da. Auch das englische Forum hilft dort nicht viel weiter.

    Mit etwas Probieren habe ich eine funktionsfähige Variante gefunden - ob dies auch die angedachte Syntax ist weiß ich nicht ;)

    Zur Funktionsweise:

    - Alle ungeradzahligen Einträge (bzw. die mit geradzahligem Index) UND alle Einträge für die KEINE BkColor einzeln definiert wurde erhalten die BkColor des ListView

    - Alle geradzahligen Einträge (bzw. die mit ungeradzahligem Index) erhalten die BkColor des ListViewItem, sofern dies definiert wurde.

    Hier ein Code-Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GuiListView.au3>
    Dim $aqua = 0x00FFFF, $khaki = 0xF0E68C, $yellow = 0xffff00

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

    $Form1 = GUICreate("AForm1", 370, 270, 193, 115)
    $ListView1 = GUICtrlCreateListView("< 0 >|< 1 >|< 2 >", 10, 10, 350, 250)
    GUICtrlSetBkColor(-1, $aqua); gilt für jeden ungeraden Eintrag (1. , 3. , 5. usw.) UND für alle Einträge OHNE eigene BackColor-Definition
    GUICtrlSetBkColor($ListView1, $GUI_BKCOLOR_LV_ALTERNATE)
    $ListView1_0 = GUICtrlCreateListViewItem("Erster|ListView BackColor|odd line", $ListView1) ; BackColor von Listview
    GUICtrlSetBkColor(-1, $yellow) ; wird durch $GUI_BKCOLOR_LV_ALTERNATE ignoriert
    $ListView1_1 = GUICtrlCreateListViewItem("Zweiter|ListViewItem BackColor|even line", $ListView1)
    GUICtrlSetBkColor(-1, $yellow)
    $ListView1_2 = GUICtrlCreateListViewItem("Dritter|ListView BackColor|odd line", $ListView1) ; BackColor von Listview
    $ListView1_3 = GUICtrlCreateListViewItem("Vierter|ListViewItem BackColor|even line", $ListView1)
    GUICtrlSetBkColor(-1, $khaki)
    $ListView1_4 = GUICtrlCreateListViewItem("Fünfter|ListView BackColor|odd line", $ListView1) ; BackColor von Listview
    $ListView1_5 = GUICtrlCreateListViewItem("Sechster|ListView BackColor (kein eig. BkCol. defin.)|even line", $ListView1) ; BackColor von Listview
    _GUICtrlListViewSetColumnWidth ($listview1, 0, 65)
    _GUICtrlListViewSetColumnWidth ($listview1, 1, 220)
    _GUICtrlListViewSetColumnWidth ($listview1, 2, 61)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    EDIT:
    Der eigentliche Sinn liegt wohl darin, dass für die ungeraden Einträge die BkColor des ListView erzwungen wird. Das ist auch praktisch, so versehe ich einfach jeden Eintrag mit einer alternativen BkColor - aber nur die geraden sind davon betroffen und ich erreiche eine abwechselnde Colorierung.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GuiListView.au3>
    Dim $aqua = 0x00FFFF, $khaki = 0xF0E68C, $yellow = 0xffff00
    Dim $arLvItem[8]
    $Form1 = GUICreate("AForm1", 370, 270, 193, 115)
    $ListView1 = GUICtrlCreateListView("< 0 >|< 1 >|< 2 >", 10, 10, 350, 250)
    GUICtrlSetBkColor(-1, $aqua); gilt für jeden ungeraden Eintrag (1. , 3. , 5. usw.) UND für alle Einträge OHNE eigene BackColor-Definition
    GUICtrlSetBkColor($ListView1, $GUI_BKCOLOR_LV_ALTERNATE)
    For $i = 0 To UBound($arLvItem) -1
    $arLvItem[$i] = GUICtrlCreateListViewItem("Eintrag "& $i &"|"& $i+1 &"|"& $i+2, $ListView1)
    GUICtrlSetBkColor(-1, $yellow)
    Next
    _GUICtrlListViewSetColumnWidth ($Listview1, 0, 65)
    _GUICtrlListViewSetColumnWidth ($Listview1, 1, 220)
    _GUICtrlListViewSetColumnWidth ($Listview1, 2, 61)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]