- 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:
ZitatThe 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
#include <GUIConstants.au3>
#include <GuiListView.au3>
Dim $aqua = 0x00FFFF, $khaki = 0xF0E68C, $yellow = 0xffff00
$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)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
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
#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)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd