Schieberegler Farben ändern

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Peter329.

    Schieberegler Farben ändern

    Hi,

    Ich habe eine Anwendung (HexEditor), die einen Schieberegler (VSCROLLBAR) zur Navigation verwendet. (s. Anhang)

    Das funktioniert auch alles ganz hervorragend. Aber ...

    .... wie man sieht hat der Schieberegler einen hellgrauen Hintergrund ... und der Vordergrund ist nur ein bissl dunkler. Das ist schwer zu erkennen. Und deshalb würde ich die Farben gern ändern, etwa dunkelgrünen Hintergrund und schwarzen Regler.

    Allein das Control hat keine Möglichkeit, die Farben zu ändern.

    Kann man denn eine Klasse von VSCROLLBAR ableiten, die alles erbt, die aber andere Farbeinstellungen hat ?

    Ich habe keine Ahnung wie ich das hinbekommen könnte. Hat jemand eine Idee wie ich das mit vertretbarem Aufwand lösen könnte ?

    LG
    Peter

    Anmerkung: Der Regler ist nicht Teil der DataGridView ... sondern es handelt sich um ein eigenständiges Control (das ist notwendig, weil die Navigation "seitenweise" erfolgt.
    Bilder
    • s 2022-08-24 13-04-111.jpg

      80,47 kB, 934×293, 78 mal angesehen
    Jau, das zeigt wohl genau in die richtige Richtung.

    Wenn ich das richtig verstehe, muss man die WindowsMessage WM_CTLCOLORSCROLLBAR abfangen und kann so die Hintergrundfarbe der Scollbar setzen. Das wäre für meine Zwecke völlig ausreichend.

    Hier habe ich eine längere Beschreibung und Beispielcode gefunden:

    Zitat:

    vbforums.com/showthread.php?85…ound-color-of-a-Scrollbar

    The msg of interest here is WM_CTLCOLORSCROLLBAR

    The code below paints the scrollbar correctly with no code in the WinProc


    VB.NET-Quellcode

    1. Option Explicit
    2. 'reference: SSubTimer6.dll
    3. Implements ISubclass
    4. Private Const WM_CTLCOLORSCROLLBAR = &H137
    5. Private Sub Form_Load()
    6. AttachMessage Me, hwnd, WM_CTLCOLORSCROLLBAR
    7. End Sub
    8. Private Sub Form_Unload(Cancel As Integer)
    9. DetachMessage Me, hwnd, WM_CTLCOLORSCROLLBAR
    10. End Sub
    11. Private Property Let ISubclass_MsgResponse(ByVal RHS As SSubTimer6.EMsgResponse)
    12. '
    13. End Property
    14. Private Property Get ISubclass_MsgResponse() As SSubTimer6.EMsgResponse
    15. '
    16. End Property
    17. Private Function ISubclass_WindowProc(ByVal hwnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    18. '
    19. End Function



    Und so habe ich das begonnen umzusetzen:

    VB.NET-Quellcode

    1. Option Explicit On
    2. Public Class Form1
    3. Implements Isubclass
    4. Private Const WM_CTLCOLORSCROLLBAR = &H137
    5. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. AttachMessage Me, hwnd, WM_CTLCOLORSCROLLBAR
    7. End Sub
    8. End Class


    "Isubclass" wird nicht gefunden (vielleicht braucht man dazu die SSubTimer6.dll - die finde ich aber auf meinem System nicht) .... und die Syntax von "AttachMessage" verstehe ich nicht.

    Kann mir jemand nachsichtig weiterhelfen.

    LG
    Peter
    @Peter329

    Hmm, ich kenne die SSubTimer6.dll eher von VB6 Projekten.

    Ansonsten: Ist schon etwas älter der Tipp: activevb.de/tipps/vbnettipps/tipp0135.html
    Lade nicht das Projekt runter. Das lässt sich kaum noch auf eine neue VS-Version upgraden. Kopiere einfach den Code in Deine Form wo sich deine Scrollbars befinden und passe das ganze Deinen Bedürfnissen an.
    Mfg -Franky-
    Hi Franky,

    herzlichen Dank für diesen Link !

    Die dort gezeigte Lösung kann man tatsächlich ohne wesentliche Änderung ins eigene Projekt übernehmen und sie funktioniert.

    Ich sehe deshalb davon ab, meine Lösung (wie sonst üblich) hier einzustellen, da der Link den passenden Code bereits enthällt. Das Ganze ist gut kommentiert, da gibt es aus meiner Sicht nichts mehr zu ergänzen.

    Zur Erbauung habe ich ein Bildchen angehängt. Das ist doch jetzt sehr viel besser lesbar !

    Nochmals vielen Dank, Daumen hoch und Problem gelöst !

    LG
    Peter
    Bilder
    • s 2022-08-25 08-08-508.jpg

      5,05 kB, 211×474, 53 mal angesehen