Farbiger header der Listview verschwindet

  • Hi,

    ich bin dabei eine Listview farbig einfärben, was auch so weit mit diesem Code klappt:

    Damit der Weiße Bereich oben rechts verschwindet habe ich eine Weiter Spalte eingefügt, Welche man von hand nicht größer oder kleiner machen kann, dafür aber sich dafür aber automatisch bis zum Rechten rand ausdehnt, sobald man eine Spalte in der größe verändert.

    Das klappt auch und sieht so weit gut aus, bis die Vorletzte Spalte so groß ist, das eine scroll bar angezeigt wird, dann verschwinden die ganzen farbigen Header Elemente.

    Wenn man das erste oder die beiden unteren ";~" entfernt, dann funktioniert es, bis man es Compaliert, da dann scheinbar ConsolWrite nicht mehr ausgeführt wird oder es seine Magische Eigenschaft verliert.

    Kann mir da jemand helfen?

    Noch alles gut:

    Wärend Column 2 Größer gemacht wird und Colum 3 rechts zu groß ist:


    Mit freundlichen Grüßen

    Florian Etzel

    Mit freundlichen Grüßen

    Flo

  • Moin,

    ich habe es nicht geschafft, die weißen Flächen und die Flackerei zu verhindern, ohne eine letzte leere Spalte mit der Breite des kompletten ListVIew-Controls anzuhängen. Damit hast Du ständig einen horizontalen Scrollbalken, wenn Du das nicht per Hand abschaltest. Wenn Dich das nicht stört, kannst Du es ja mal ausprobieren:

  • Sers Velted,

    danke für deine Antwort.

    Der horizontale Scrollbalken stört mich schon. deswegen bearbeite ich auch die Nachricht "$HDN_ITEMCHANGEDW" und "$HDN_BEGINTRACKW" welche aber diesen Komischen Probleme mit dem Consolwirte haben.

    Weiß noch jemand weiter? Werden vielleicht irgendwelche Bilioteken oder Funktionen in Consolwrite aufgerufen oder eben nicht aufgerufen? ich habe den Code der hinter der Funktion steht leider nicht gefunden, da es wie s aussieht nicht um eine Bibliotek handelt, in welcher die Funktion ist.

    Mit freundlichen Grüßen

    Flo

    Mit freundlichen Grüßen

    Flo

  • Moin,

    Probleme mit bzw. ohne ConsoleWrite konnte ich hier nicht nachvollziehen.

    Ich habe das nicht bis zum bitteren Ende untersucht, aber ich glaube, dass die Probleme damit zusammenhängen:

    AutoIt
                        If $aPosControl[2] < $aPosLastSubitem[0] And ($aPosLastSubitem[2] - $aPosLastSubitem[0]) <> 50 Then
                            ; ConsoleWrite("1" & @CRLF)
                            _GUICtrlListView_SetColumnWidth($gListviewPoints, _GUICtrlListView_GetColumnCount($gListviewPoints)-1, 1)

    Wenn die letzte Spalte aus dem sichtbaren Bereich gewandert ist, prüfst Du, ob die Spaltenbreite ungleich 50 ist und setzt sie dann auf 1. Und weil 1 nunmal ungleich 50 ist, wird das ständig wiederholt. Dabei wird das ListView-Control offenbar zum Zeichnen angeregt, ohne dass das einen Sinn machen würde.

  • Velted

    Vielen Dank, das war die Lösung. warum das ConsoleWrite das ganze auch behoben hat ist immer noch ein Wunder.

    Ich hab einfach noch eine abfrage für ungleich 1 eingefügt und es klappt:

    Code
    If $aPosControl[2] < $aPosLastSubitem[0] And ($aPosLastSubitem[2] - $aPosLastSubitem[0]) <> 50 Then
        If ($aPosLastSubitem[2] - $aPosLastSubitem[0]) <> 1
            _GUICtrlListView_SetColumnWidth($gListviewPoints, _GUICtrlListView_GetColumnCount($gListviewPoints)-1, 1)
        EndIf
    ElseIf $aPosControl[2] <> $aPosLastSubitem[2] Then
        _GUICtrlListView_SetColumnWidth($gListviewPoints, _GUICtrlListView_GetColumnCount($gListviewPoints)-1, $aPosControl[2] - $aPosLastSubitem[0])
    EndIf

    Mit freundlichen Grüßen

    Flo