Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: ssccaann43 © en 27 Noviembre 2008, 17:32 PM

Título: Cambiarle el Color a un Menú.
Publicado por: ssccaann43 © en 27 Noviembre 2008, 17:32 PM
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
Título: Re: Cambiarle el Color a un Menú.
Publicado por: SONIC88 en 28 Noviembre 2008, 17:01 PM
 ;D vale hermano lo necesitaba hace días. Gracias y saludos!!
Título: Re: Cambiarle el Color a un Menú.
Publicado por: 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
Título: Re: Cambiarle el Color a un Menú.
Publicado por: ssccaann43 © en 2 Diciembre 2008, 20:54 PM
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.
Título: Re: Cambiarle el Color a un Menú.
Publicado por: Frikimaster en 3 Diciembre 2008, 01:36 AM
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
Título: Re: Cambiarle el Color a un Menú.
Publicado por: aaronduran2 en 3 Diciembre 2008, 01:49 AM
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  ;)
Título: Re: Cambiarle el Color a un Menú.
Publicado por: Frikimaster en 3 Diciembre 2008, 03:01 AM
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