Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0135: Hintergrundfarbe für Scollbar-Steuerelemente ändern

 von 

Beschreibung

Dieses Beispiel zeigt auf einfache Weise, wie man die Hintergrundfarbe von Scrollbar-Steuerelementen ändern kann.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Framework-Version(en):

.NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5, .NET Compact Framework 1.0, .NET Compact Framework 2.0, .NET Framework 4

.NET-Version(en):

Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008, Visual Basic 2010

Download:

Download des Beispielprojektes [11,11 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2005
'
' Referenzen: 
'  - System
'  - System.Data
'  - System.Deployment
'  - System.Drawing
'  - System.Windows.Forms
'  - System.Xml
'
' Imports: 
'  - Microsoft.VisualBasic
'  - System
'  - System.Collections
'  - System.Collections.Generic
'  - System.Data
'  - System.Drawing
'  - System.Diagnostics
'  - System.Windows.Forms
'

' ##############################################################################
' ################################# Form1.vb ###################################
' ##############################################################################
Option Strict On
Option Explicit On

Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Runtime.InteropServices

Public Class Form1

    ' ---=== Windows Message ===---
    Private Const WM_CTLCOLORSCROLLBAR As Integer = &H137

    ' ---=== GDI32 Deklarationen ===---

    <DllImport("gdi32.dll", EntryPoint:="CreatePatternBrush")> _
    Private Shared Function CreatePatternBrush( _
        ByVal hBitmap As IntPtr) As IntPtr
    End Function

    <DllImport("gdi32.dll", EntryPoint:="CreateSolidBrush")> _
    Private Shared Function CreateSolidBrush(ByVal crColor As Integer) As IntPtr
    End Function

    <DllImport("gdi32.dll", EntryPoint:="DeleteObject")> _
    Private Shared Function DeleteObject(ByVal hObject As IntPtr) As Integer
    End Function

    Private hBmp As IntPtr = IntPtr.Zero
    Private hBrush As IntPtr = IntPtr.Zero
    Private hBmpBrush As IntPtr = IntPtr.Zero
    Private Bmp As Bitmap = Nothing

    Protected Overrides Sub WndProc(ByRef m As Message)
        ' nur wenn die Nachricht WM_CTLCOLORSCROLLBAR eintrifft
        If m.Msg = WM_CTLCOLORSCROLLBAR Then

            ' in LParam steht dann das Handle von der Scrollbar
            ' für die die Nachricht eingetroffen ist
            Select Case m.LParam

                Case VScrollBar1.Handle
                    ' ist ein GDI Brush vorhanden
                    If Not Equals(hBrush, IntPtr.Zero) Then
                        ' dann GDI Brush zurück geben
                        m.Result = hBrush
                    End If

                Case VScrollBar2.Handle
                    ' ist ein GDI Brush vorhanden
                    If Not Equals(hBmpBrush, IntPtr.Zero) Then
                        ' dann GDI Brush zurück geben
                        m.Result = hBmpBrush
                    End If
            End Select
        Else
            MyBase.WndProc(m)
        End If
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, _
            ByVal e As System.Windows.Forms.FormClosingEventArgs) _
            Handles Me.FormClosing

        ' ist ein GDI Brush vorhanden
        If Not Equals(hBrush, IntPtr.Zero) Then
            ' GDI Brush löschen
            DeleteObject(hBrush)
        End If

        ' ist ein GDI Brush vorhanden
        If Not Equals(hBmpBrush, IntPtr.Zero) Then
            ' GDI Brush löschen
            DeleteObject(hBmpBrush)
        End If

        ' ist ein GDI Bitmap vorhanden
        If Not Equals(hBmp, IntPtr.Zero) Then
            ' GDI Bitmap löschen
            DeleteObject(hBmp)
        End If

        'Bitmap löschen
        Bmp.Dispose()

    End Sub

    Private Sub Form1_Load(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Me.Load

        ' GDI Brush von einer Farbe erstellen
        hBrush = CreateSolidBrush(&HFF00FF&)

        ' anstelle von CreateSolidBrush kann auch jede andere
        ' GDI32 Brush-API verwendet werden. zB. CreatePatternBrush

        ' Bitmap erstellen
        Bmp = New Bitmap(4, 4, PixelFormat.Format24bppRgb)

        ' etwas in die Bitmap reinzeichnen
        Using G As Graphics = Graphics.FromImage(Bmp)
            G.FillRectangle(Brushes.Yellow, 0, 0, 2, 2)
            G.FillRectangle(Brushes.Red, 2, 2, 2, 2)
        End Using

        ' GDI Handle der Bitmap ermitteln
        hBmp = Bmp.GetHbitmap

        ' GDI Brush vom Handle der Bitmap erstellen
        hBmpBrush = CreatePatternBrush(hBmp)

    End Sub

End Class

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.