Einzelne ListView Items einfärben.

  • Hallo liebe Community..
    Momentan hab ich ein problem mit einer listview. Ich möchte dass die Einträge abwechselnd eingefärbt werden. Das klappt auch mehr oder weniger mit folgender Funktion, welche während einer Schleife aufgerufen wird:

    Spoiler anzeigen
    [autoit]


    GUISwitch($gui_child2)
    GUICtrlCreateListViewItem(IniRead($DataDir&"KB.ini",$parse_link[$i],"Angreifer_Dorf","")&"|"&IniRead($DataDir&"KB.ini",$parse_link[$i],"Verteidiger_Dorf","")&"|"&IniRead($DataDir&"KB.ini",$parse_link[$i],"Verteidiger_Name","")&"|"&IniRead($DataDir&"KB.ini",$parse_link[$i],"Holz","")&"|"&IniRead($DataDir&"KB.ini",$parse_link[$i],"Lehm","")&"|"&IniRead($DataDir&"KB.ini",$parse_link[$i],"Eisen","")&"|"&IniRead($DataDir&"KB.ini",$parse_link[$i],"Getreide","")&"|"&IniRead($DataDir&"KB.ini",$parse_link[$i],"Gesamt","")&"|"&"Prozent"&"|",$gui_BerichteList)

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


    If $gui_color_bericht_last = 0xDCDCDC Then
    _GUICtrlListView_SetTextBkColor($gui_BerichteList,0xFFFFFF)
    $gui_color_bericht_last = 0xFFFFFF
    Elseif $gui_color_bericht_last = 0xFFFFFF Then
    _GUICtrlListView_SetTextBkColor($gui_BerichteList,0xDCDCDC)
    $gui_color_bericht_last = 0xDCDCDC
    EndIf
    GUISwitch($gui_main)

    [/autoit]


    Allerdings klappt das ganze ja nur, da die ListView "redrawfaul" ist. Sobald ich nun aber was an der Listview bzw. GUI ändere (Maximieren, größe ändern, spalte in Listview markieren usw.), springt die Farbe auf den von _GUICtrlListView_SetTextBkColor() zuletzt gesetzten Wert zurück.

    Nun also meine Frage : Gibt es eine Funktion wie
    "GuiCtrlListView_SetItemBkColor()" oder sowas in der Art? Wenn nicht, welche möglichkeiten habe ich noch die Listviewitems abwechselnd einzufärben?

    (Hoffentlich kommt jetzt nichts mit _WinAPI() ... denn diese Funktion versteh ich ja genauso gut wie StringRegExp... nämlich garnich :x)

  • Soo erstmal sorry für den Doppelpost, aber ich brauch doch nochmal Aufmerksamkeit von dir BugFix ^^

    Also ich glaub ich bin zu blöd dafür - ich hab mir die Beispiele und die Include Datei angeschaut aber irgendwie will das was ich so bastel nicht funktionieren...

    hab jetzt das hier ( du wirst wahrschienlich die hände überm kopf zusammenschlagen :x)

    Spoiler anzeigen
    [autoit]


    GUISwitch($gui_child2)
    Switch($gui_color_bericht)
    Case 0xDCDCDC
    $gui_color_bericht = 0xFFFFFF
    Case 0xFFFFFF
    $gui_color_bericht = 0xDCDCDC
    EndSwitch
    _GUICtrlListView_AddOrIns_Item($han_BerichteList, IniRead($DataDir&"KB.ini",$parse_link[$i],"Angreifer_Dorf","")&"|"&IniRead($DataDir&"KB.ini",$parse_link[$i],"Verteidiger_Dorf","")&"|"&IniRead($DataDir&"KB.ini",$parse_link[$i],"Verteidiger_Name","")&"|"&IniRead($DataDir&"KB.ini",$parse_link[$i],"Holz","")&"|"&IniRead($DataDir&"KB.ini",$parse_link[$i],"Lehm","")&"|"&IniRead($DataDir&"KB.ini",$parse_link[$i],"Eisen","")&"|"&IniRead($DataDir&"KB.ini",$parse_link[$i],"Getreide","")&"|"&IniRead($DataDir&"KB.ini",$parse_link[$i],"Gesamt","")&"|"&"Prozent"&"|",-1)
    _GUICtrlListView_FormattingCell($han_BerichteList,-1,0,$gui_color_bericht)
    _GUICtrlListView_FormattingCell($han_BerichteList,-1,1,$gui_color_bericht)
    _GUICtrlListView_FormattingCell($han_BerichteList,-1,2,$gui_color_bericht)
    _GUICtrlListView_FormattingCell($han_BerichteList,-1,3,$gui_color_bericht)
    _GUICtrlListView_FormattingCell($han_BerichteList,-1,4,$gui_color_bericht)
    _GUICtrlListView_FormattingCell($han_BerichteList,-1,5,$gui_color_bericht)
    _GUICtrlListView_FormattingCell($han_BerichteList,-1,6,$gui_color_bericht)
    _GUICtrlListView_FormattingCell($han_BerichteList,-1,7,$gui_color_bericht)
    _GUICtrlListView_FormattingCell($han_BerichteList,-1,8,$gui_color_bericht)

    GUISwitch($gui_main)

    [/autoit]

    Aber das färbt nur den ersten Eintrag ein. Ich dachte mir aber dass es die zuletzt geschriebene Zeile einfärbt (deswegen auch index -1) .. Ich glaub ich bin zu doof dafür o.o
    Könntest du mir noch mal helfen und mir sagen was ich genau tuen muss um jeweils eine Zeile grau, eine Zeile Weiß zu bekommen? Danke :O


    EDIT grrr da hat der serverdown meinen edit verschluckt...

    • Offizieller Beitrag

    So sieht die Funktionskopfzeile zum Formatieren aus.

    [autoit]

    _GUICtrlListView_FormattingCell($hWnd, $iItem, $iSubItem, $iBkCol=-1, $iCol=-1, $iSize=-1, $iWeight=-1, $sFont=-1)

    [/autoit]


    Und wenn du in die Funktionsbeschreibung schaust: dort steht nirgendwo, dass man auf ein Item mit '-1' Bezug nehmen kann.
    Du mußt schon die Indexwerte für Item(Zeile) und SubItem(Spalte) angeben.
    Wenn du die Werte für alle Spalten einer Zeile mit denselben Werten setzen möchtest, mach es in einer Schleife:

    [autoit]

    For $i = 0 To $Index_letzteSpalte
    _GUICtrlListView_FormattingCell($hWnd, $iItem, $i, ... )
    Next

    [/autoit]


    Wenn du aber nur 2 Farben im Wechsel auf die Zeilen anwenden möchtest, das geht einfacher:

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    GUICreate('Test')

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

    $ListView1 = GUICtrlCreateListView("Col 1|Col 2", 15, 15, 300, 250)
    GUICtrlSetBkColor(-1, 0xFF4400) ; Color odd row
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)
    _GUICtrlListView_SetColumnWidth($ListView1, 0, 148)
    _GUICtrlListView_SetColumnWidth($ListView1, 1, 148)

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

    For $i = 1 To 30
    GUICtrlCreateListViewItem(Random(10000, 1000000, 1) & '|' & Random(10000, 1000000, 1), $ListView1)
    GUICtrlSetBkColor(-1, 0xFFFF23) ; Color even row
    Next

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

    GUISetState()

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

    Do
    Until GUIGetMsg() = -3

    [/autoit]