ListView GruppenFarbwahl

  • Hallo an euch,

    hab ein problem mit einer listView... diese ist anfangs komplett zu sehn, jedoch wenn sich darüber ein fenster öffnet und ich dieses später wieder schließe ist an der stelle des fensters die listview weg und nur der hintergrund der gui zu sehn
    beim heraus- und anschließend wieder herein ziehen der gui außerhalb des arbeitsfensterns oder ein kurzes scrollen in der listview lässt den fehlenden teil wieder sichtbar werden.. warum passiert sowas? bzw wie kann ich das unterbinden?

    hier ein screenshoot:

    • Offizieller Beitrag

    Ich tippe mal auf den Style deines Listviews oder GUI, aber ohne Code ist es ein Ratespiel.

  • beide gui´s sowohl die in dem sich die listView befindet als auch die, die aufgerufen wird und dann über der ersten liegt haben keine style´s
    zudem passiert das auch wenn ein ganz anderes programm darüber ist zB. paint

    die listview hat auch keine extra zugewiesenen styles...
    es ist zu erwähnen das die gui komplett von einem bild als hintergrund ausgefüllt wird und mit dem befehl

    [autoit]

    GuiCtrlSetState(-1,$GUI_DISABLE)

    [/autoit]


    im hintergrund gehalten wird...

  • das ganze script wollte ich euch nicht antun und es zu vereinfachen ist schwer, da ich keine ahnung hatte woran der fehler ist und ich somit hätte ich den fehler evt auch mit rausgeschnitten...

    hab ihn aber jetzt gefunden... lag wirklich an dem hintergrundbild... wenn kein hindergrundbild oder nur eine hintergrundfarbe vorhanden ist, funktioniert alles super... allerdings tritt der fehler so wie es scheint auch nur bei einer list bzw listview auf..

  • ich verwende eine listview die ich mit

    [autoit]

    _GUICtrlListView_Create

    [/autoit]

    erstellt habe...
    dazu gibt es ja sehr sehr viele befehle die mir wohl sehr sinnvoll erscheinen und ich mich gern noch ein wenig mit den ganzen rund um listview beschäftigen möchte..

    hab leider keinen passenden befehl gefunden.. gibt es eine möglichkeit die items in der listview gruppenmäßig zu färben?
    also zB zwei gruppen mit

    [autoit]

    _GUICtrlListView_InsertGroup

    [/autoit]

    erstellt
    in der einen sind alle items grün in der anderen rot

  • sehe ich das richtig, es ist nur möglich die ganze lisview zu färben, jedoch nicht einzellne items bzw gruppen?


  • Gruppen weiß ich jetze nicht aber einzelnde Items kann mann mit GuiCtrlSetBkColor einfärben.

    das gilt aber meines wissens aber auch nur dann, wenn ich die listview mit

    [autoit]

    GUICtrlCreateListView

    [/autoit]

    bzw die items mit

    [autoit]

    GUICtrlCreateListViewItem

    [/autoit]

    erstelle

    nicht aber wenn ich

    [autoit]

    _GUICtrlListView_Create

    [/autoit]

    sowie

    [autoit]

    _GUICtrlListView_AddItem

    [/autoit]

    verwende, oder?

  • das würde heißen ich kann die hintergrund- bzw die schriftfarbe eines

    [autoit]

    _GUICtrlListView_AddItem

    [/autoit]

    gar nicht verändern? 8|

  • danke autobert!
    sieht sehr vielversprechend aus, jedoch komm ich mit dieser udf ganz und gar nicht klar...

    ist schon erstaunlich das solch eine simple sache (listviewitmens einfärben) so derart schwer ist in autoit...
    weil es doch so viele befehle für _GUICtrlListView_... gibt
    hatte das ganze erst mit GUICtrlCreateListView aufgebaut und dachte eigendlich das man mit_GUICtrlListView_Create flexibler ist..
    doch das was ich machen möchte ist wohl mit der variante nicht /oder nur sehr schwer möglich oder? ?(8|

    • Offizieller Beitrag

    das man mit_GUICtrlListView_Create flexibler ist..


    Das Funktionspaket ist schon recht umfangreich - aber die Funktion: _GUICtrlListView_Create verwende ich nie. Ich habe auch bisher noch nie die Notwendigkeit dafür gesehen. Du benötigst, um alle Funcs der UDF nutzen zu können, das ListView-Handle (auch wenn viele, wie du in den Hilfe-Bsp. siehst, mit der ID funktionieren). _GUICtrlListView_Create gibt dir das Handle direkt zurück. Ich erstelle LV immer mit $ID = GUICtrlCreateListView und lasse mir dann das Handle ausgeben ( $hWnd = GUICtrlGetHandle($ID) ). Somit kann ich wahlweise auf die nativen LV-Funcs oder die der UDF zugreifen.
    Wenn ich dich richtig verstanden habe, möchtest du mehrere Gruppen erstellen ( _GUICtrlListView_InsertGroup ) und jede Gruppe andersfarbig darstellen. Ich teste mal, ob es einen 'einfachen' Weg dafür gibt und werde das dann hier posten.

    Edit:
    Hier habe ich eine einfache Lösung dafür erstellt:

    Spoiler anzeigen
    [autoit]


    ; Bsp: ListView Gruppen - je Gruppe einheitlich enfärben by BugFix
    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>

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

    Opt('MustDeclareVars', 1)

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

    _Main()

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

    Func _Main()
    Local $ID_LV, $hLV, $aItem[3], $aGroupColor[2][2], $enumGroup = 0
    ; Group 1
    $aGroupColor[0][0] = '0' ; $a[n][0]=ItemIndex(e) als String mit Leerzeichen übergeben '0 1'
    $aGroupColor[0][1] = 0xFFFF00 ; $a[n][1]=GroupColor
    ; Group 2
    $aGroupColor[1][0] = '1 2'
    $aGroupColor[1][1] = 0xFF00FF

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

    GUICreate("ListView Insert Group", 400, 300)
    $ID_LV = GUICtrlCreateListView("Column 1|Column 2|Column 3", 2, 2, 394, 268)
    $hLV = GUICtrlGetHandle($ID_LV)

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

    ; set Column width
    GUICtrlSendMsg($ID_LV, 0x101E, 0, 100)
    GUICtrlSendMsg($ID_LV, 0x101E, 1, 100)
    GUICtrlSendMsg($ID_LV, 0x101E, 2, 100)

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

    ; Add items
    $aItem[0] = GUICtrlCreateListViewItem("Row 1: Col 1|Row 1: Col 2|Row 1: Col 3", $ID_LV)
    $aItem[1] = GUICtrlCreateListViewItem("Row 2: Col 1|Row 2: Col 2", $ID_LV)
    $aItem[2] = GUICtrlCreateListViewItem("Row 3: Col 1", $ID_LV)

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

    ; set Color
    For $i = 0 To UBound($aItem) -1
    If Not StringInStr($aGroupColor[$enumGroup][0], $i) Then $enumGroup += 1
    GUICtrlSetBkColor($aItem[$i], $aGroupColor[$enumGroup][1])
    Next

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

    ; Build groups
    _GUICtrlListView_EnableGroupView($hLV)
    _GUICtrlListView_InsertGroup($hLV, -1, 1, "Group 1")
    _GUICtrlListView_InsertGroup($hLV, -1, 2, "Group 2")
    _GUICtrlListView_SetItemGroupID($hLV, 0, 1)
    _GUICtrlListView_SetItemGroupID($hLV, 1, 2)
    _GUICtrlListView_SetItemGroupID($hLV, 2, 2)

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

    GUISetState()

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

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

    [/autoit]