sexta-feira, 10 de dezembro de 2010

Alterar cor ToolBar

With this code you can change a Toolbar backcolor (Windows Common Controls 5 or 6).
You can also use a picture (bitmap) as background, here I'll do both things.
I recommend downloading the example attached, but I'll also show the code here, I used Common Controls 6 toolbars for this example, minor changes are needed if you want to use Common Controls 5 toolbars.

image 

IN THE FORM
- Add 2 Toolbars, change Toolbar1 style to FLAT, Toolbar2 style must remain STANDARD
- Add a Picture box and add a picture to it.
- Paste this code:

VB Code:

 

Option Explicit
Private Sub Form_Load()
    ApplyChanges
End Sub
Private Sub ApplyChanges()
'=========================
    Dim LngNew As Long
    'Use a picture with the FLAT TB (Toolbar1)
    LngNew = CreatePatternBrush(Picture1.Picture.Handle) 'Creates the background from a Picture Handle
    ChangeTBBack Toolbar1, LngNew, enuTB_FLAT   
    'Change Backcolor of the STANDARD TB (Toolbar2)
    LngNew = CreateSolidBrush(RGB(240, 120, 120))        'Creates the background from a Color (Long)
    ChangeTBBack Toolbar2, LngNew, enuTB_STANDARD
    'Refresh Screen to see changes
    InvalidateRect 0&, 0&, False
End Sub

IN A MODULE

VB Code:

 

Option Explicit

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _

    ByVal hWnd1 As Long, ByVal hWnd2 As Long, _

    ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Private Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" ( _

                ByVal hwnd As Long, ByVal nindex As Long, ByVal dwnewlong As Long) As Long

Public Declare Function InvalidateRect Lib "user32" _

                (ByVal hwnd As Long, lpRect As Long, ByVal bErase As Long) As Long

Public Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long

Public Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long

 

Public Enum enuTBType

    enuTB_FLAT = 1

    enuTB_STANDARD = 2

End Enum

 

Private Const GCL_HBRBACKGROUND = (-10)

 

Public Sub ChangeTBBack(TB As Object, PNewBack As Long, pType As enuTBType)

Dim lTBWnd      As Long

    Select Case pType

        Case enuTB_FLAT     'FLAT Button Style Toolbar

            'Apply directly to TB Hwnd

            DeleteObject SetClassLong(TB.hwnd, GCL_HBRBACKGROUND, PNewBack)       

        Case enuTB_STANDARD 'STANDARD Button Style Toolbar

            lTBWnd = FindWindowEx(TB.hwnd, 0, "msvb_lib_toolbar", vbNullString) 'Find Hwnd first

            DeleteObject SetClassLong(lTBWnd, GCL_HBRBACKGROUND, PNewBack)      'Set new Back

    End Select

End Sub

'==========================================================================' If you want to use Win Common Control 5 Toolbars, use "ToolbarWindow32" instead of

' "msvb_lib_toolbar". Win Common Control 5 Toolbars can't be FLAT, they are always STANDARD,

' so use enuTB_STANDARD when you call this

'==========================================================================


More info about this
- This will also work with xp styles (manifest file).
- If the picture is smaller than the toolbar the pattern will be repeated, if its too big, you will see just part of it, so I recomend to make your bmp or jpg picture the same size of the toolbar. You can also let it repeat the pattern as I did in the project attached.
- Changes will remain visible in design mode until you close VB IDE.
- If you apply this to a toolbar in your app with a given style (i.e: Flat) all the flat toolbars and the controls that contain flat toolbars with the same Comon Controls version will also be modified, (but JUST inside your app).
Example: Common Dialog Control uses a vertical toolbar (WCC version 5).

Nenhum comentário :

Postar um comentário

Related Posts Plugin for WordPress, Blogger...