Cambiarle el Color a un Menú.

Iniciado por ssccaann43 ©, 27 Noviembre 2008, 17:32 PM

0 Miembros y 1 Visitante están viendo este tema.

ssccaann43 ©

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
Código (vb) [Seleccionar]

  '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
Código (vb) [Seleccionar]

'vbBlue es el color que asigne, pueden colocar otro... Saludos
Private Sub Form_Initialize()
  Call Establecer_Color_Menu(Me.hwnd, vbBlue, True)
End Sub
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

SONIC88

 ;D vale hermano lo necesitaba hace días. Gracias y saludos!!
∞•••∞ MαЯcΘ™ ∞•••∞

Frikimaster

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
La musica de la logica nunca fallara al sonar la melodia de la verdad.

ssccaann43 ©

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.
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

Frikimaster

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.
Saludos ^^

Frikimaster
La musica de la logica nunca fallara al sonar la melodia de la verdad.

aaronduran2

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.
Código (vb) [Seleccionar]

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  ;)

Frikimaster

#6
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
La musica de la logica nunca fallara al sonar la melodia de la verdad.