Bien, es solo un aporte para aquellos que desean cambiarle el color a un Menú.
Agreguen un módulo .bas y peguen el siguiente Codigo:
Módulo .bas
'Funciones Api
''''''''''''''''''''''''''''''
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Private Declare Function SetMenuInfo Lib "user32" ( _
ByVal hMenu As Long, _
Mi As MENUINFO) As Long
'Constantes
''''''''''''''''''''''''''''''
Private Const MIM_BACKGROUND As Long = &H2
Private Const MIM_APPLYTOSUBMENUS As Long = &H80000000
'Estructura MENUINFO
Private Type MENUINFO
cbSize As Long
fMask As Long
dwStyle As Long
cyMax As Long
RhbrBack As Long
dwContextHelpID As Long
dwMenuData As Long
End Type
Public Function Establecer_Color_Menu( _
ByVal hwndfrm As Long, _
ByVal Color As Long, _
ByVal SubMenu As Boolean) As Boolean
Dim Mi As MENUINFO
Dim flags As Long
flags = MIM_BACKGROUND
If SubMenu Then
'si queremos establecer el color al submenú
'debemos asignarle esta constante al Flag
flags = flags Or MIM_APPLYTOSUBMENUS
End If
'Llenamos la estructura MENUINFO
With Mi
'Tamaño de la estructura
.cbSize = Len(Mi)
'Flag para determinar el submenu
.fMask = flags
'Le enviamos este color a esta variable
.RhbrBack = CreateSolidBrush(Color)
End With
'Establecemos la informacion del menu
'pasandole el hwnd del menu que lo recupeamos
'con getMenu y en el otro parametro la estructura MENUINFO
Call SetMenuInfo(GetMenu(hwndfrm), Mi)
'Dibujamos el color pasandole el hwnd del
'Form que contiene el menu
Call DrawMenuBar(hwndfrm)
End Function
Crean el menú en un Form y pegan este codigo:
Form
'vbBlue es el color que asigne, pueden colocar otro... Saludos
Private Sub Form_Initialize()
Call Establecer_Color_Menu(Me.hwnd, vbBlue, True)
End Sub
;D vale hermano lo necesitaba hace días. Gracias y saludos!!
A ESTO le llamo yo comentar joder! Si no fuera por los comentarios no me entenderia de nada, grácias a cosas asi se aprenden muchas cosas, gracias :3 ^^
Frikimaster
Cita de: Frikimaster en 2 Diciembre 2008, 00:11 AM
A ESTO le llamo yo comentar joder! Si no fuera por los comentarios no me entenderia de nada, grácias a cosas asi se aprenden muchas cosas, gracias :3 ^^
Frikimaster
Pues de nada, espero puedas sacarle provecho al igual que el amigo SONIC88.
Acabo de hacer una pequeña "modificación" al modulo.bas, a ver que os parece, la idea del color me gusta mucho, lo he estado "analizando" un poco, y he modificado la variable para que en vez de ser un color base de VB como vbBlue, vbGreen y demas, se pueda hacer con colores RGB, se que es sencillo de hacer, pero tened en cuenta que soy un novatillo en el tema, a ver que os parece xD
Public Function Establecer_Color_Menu( _
ByVal hwndfrm As Long, _
ByVal Color As Long, _
ByVal SubMenu As Boolean) As Boolean
Dim Mi As MENUINFO
Dim flags As Long
flags = MIM_BACKGROUND
If SubMenu Then
'si queremos establecer el color al submenú
'debemos asignarle esta constante al Flag
flags = flags Or MIM_APPLYTOSUBMENUS
End If
'Llenamos la estructura MENUINFO
With Mi
'Tamaño de la estructura
.cbSize = Len(Mi)
'Flag para determinar el submenu
.fMask = flags
'Le enviamos este color a esta variable
.RhbrBack = CreateSolidBrush(RGB(54, 54, 54))
End With
Me gustan los colores oscuros, asi que he optado por ese negro claro gris raro, utilizando esta pagina me ha sido facil encontrar el color deseado http://www.miliuco.net/docs/rgb.htm (http://www.miliuco.net/docs/rgb.htm).
Saludos ^^
Frikimaster
El problema es que tienes que especificar un argumento en el argumento Color, y al ser RGB, deberás poner tres argumentos (R As Long, G As Long, B As Long) para que puedas personalizarlo.
Public Function Establecer_Color_Menu( _
ByVal hwndfrm As Long, _
ByVal R As Long, ByVal G As Long, ByVal B As Long, _
ByVal SubMenu As Boolean) As Boolean
Dim Mi As MENUINFO
Dim flags As Long
flags = MIM_BACKGROUND
If SubMenu Then
'si queremos establecer el color al submenú
'debemos asignarle esta constante al Flag
flags = flags Or MIM_APPLYTOSUBMENUS
End If
'Llenamos la estructura MENUINFO
With Mi
'Tamaño de la estructura
.cbSize = Len(Mi)
'Flag para determinar el submenu
.fMask = flags
'Le enviamos este color a esta variable
.RhbrBack = CreateSolidBrush(RGB(R, G, B))
End With
End Function
Saludos ;)
Oh, tiene mucha lógica si, 3 variables, una para cada color..Red, Green and Blue.., pero entonces..que diferencia hay en cuanto a resultado se refiere, de lo que he echo yo a lo que has echo tu? Entiendo que el procedimiento es diferente y mas complejo, pero entonces, que diferencia puede haber en el resultado? Son formas diferentes de hacerlo? Cambia alguna cosa?:O
Una ultima cosa, como lo haceis para poner colores diferenciadores en el foro, de cuando es una palabra clave etc? Al ser "codigo" si lo hago con tags de foro, me lo interpreta como parte del codigo, y me gustan esos colores que utilizais xD
Gracias por contestar ^^
Frikimaster