Listview ohne Fokus - Farbe des selektiertes Elements ändern

  • Hallo zusammen,
    das selektierte Element einer Listview ist ja in blau schön sichtbar. Wenn die Listview keinen Fucus hat wird daraus ein unscheinbares grau.

    Kann man dieses Grau irgendwie ändern - und wenn ja, wie?

    Gruß Schumi.

  • Du kannst die markierten Items bei Fokusverlust auch komplett demarkieren. Da gibt es einen Listview-Style für ... Musst du mal in der Hilfe nach schauen wenn es das ist was dir weiter hilft.

    Ansonsten wüsste ich wie du den Hintergrund eines Items an sich änderst. Ob der aber dann bei Fokusverlust so bleibt kann ich dir gerade nicht sagen. Aber du könntest zur Not auch bei Fokusverlust die Farbe ändern und bei wiederaufnahme des Fokus zurück ändern. Wenn ich in einer halben Stunde daheim bin probiert ich mal was aus.

  • Hallo teamnoobPDB,
    das markierte Item soll ja bei Fokusverlust gut sichtbar bleiben.
    Und eine Fokus-Prüfung/Steuerung hört sich recht umfangreich an. Ich möchte auch nicht mit Kanonen auf Spatzen schießen.

    Vielleicht geht es doch irgendwie einfacher.

    Gruß Schumi

    2 Mal editiert, zuletzt von Schumi (8. Januar 2016 um 14:38)

  • Nur die Selektionsfarbe zu ändern ist so einfach nicht möglich (soweit ich weiß). Ich habe selbst einmal gesucht, ob ich irgendwas finde. Das einzige war, die globalen Windowseinstellungen zu ändern, dadurch änderst du das aber nicht nur in deinem Programm sondern bei allen, die mit den Windowsstandards arbeiten (siehe WinAPI-UDF).
    Mit dem Fokus das scheint eine gute Idee zu sein. Man muss dann zwar alle ControlItems in einem Array (oder ähnlichem) vorhalten, um die Farbe zu ändern. Desweiteren muss man das letzte Element mit Fokus speichern, um ihm, wenn die Listview den Fokus zurückbekommt, wieder den Fokus zu geben. Die "Selektionsfarbe bei Listview nicht im Fokus" wird also durch ändern der Hintergrundfarbe ersetzt.
    Ziemlich umständlich, da du, wenn du sortieren der Listview unterstützt, auch die sortierfunktion selbst schreiben/ändern musst, um gleichzeitig auch dass array der listviewcontrols zu ändern.
    Aber was besseres fällt mir da grad auch nicht ein :/

    MfG Kanashius

  • Hallo Kanashius,
    vielen Dank für die Info.
    In einer Listbox ist das komischerweise nicht so. Da bleibt das Blau erhalten.
    Ich werde mir das auch noch einmal anschauen.

    Vielen Dank.
    Gruß Schumi

  • Hallo BugFix,
    vielen Dank. Das ist ja sehr interessant.
    Einen Haken hat die Funktion aber - der Aufruf.

    Die GUI-Abfrage mache ich mit:
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case ...
    ...usw.

    Wie kann ich denn den Fokus-Wechsel abfragen?
    Das könnte aber mit ControlGetFocus() gehen, oder?

    Gruß Schumi

    • Offizieller Beitrag

    Das könnte aber mit ControlGetFocus() gehen, oder?

    Probiere einfach mal. Evtl. solltest du das _GUICtrlListView_SetItemState($hWnd, $iIndex, $LVIS_FOCUSED, $LVIS_FOCUSED) weglassen, da sonst der Fokus wieder von deinen anderen Elementen angezogen wird. Kann aber sein, dass dies nicht tatsächlich den Fokus zieht, sondern nur den Fokus im Ctrl. Bastele mal ein bischen.

  • Hallo BugFix,
    das hat leider nicht funktioniert. Es hat sich keine Änderung gezeigt.
    Auch ohne diese Zeile _GUICtrlListView_SetItemState($hWnd, $iIndex, $LVIS_FOCUSED, $LVIS_FOCUSED) hat das nicht funktioniert.

    Ich habe das so eingebaut:

    Spoiler anzeigen

    Deine Funktion wird also immer nach dem Focuswechsel aufgerufen. Aber das kann doch nicht schädlich sein, oder doch?

    Gruß Schumi