Jul 182010
 

Este es un módulo clase que sirve para insertar imágenes en el menú, a diferencia del control de usuario HookMenu, este sólo requiere un simple módulo, quizás no cuente con una interfaz sencilla para insertar las imágenes ya que con este módulo tendremos que hacerlo mediante código.
Lo que intenté preservar es que el ícono no modifique el estilo visual de Windows, es decir, el menú no tendrá el aspecto de Office o Ribbon.
También cuenta con la posibilidad de agregarle imágenes a la barra de menú y a los menúes creados mediante Apis (CreatePopupMenu).
La clase soporta imágenes .png, .ico y todos los formatos estándar de imágenes. Este módulo sólo funcionará en Windows XP y posteriores, ya que las versiones anteriores no cuentan con GDI Plus.
En Windows XP el módulo necesita subclasificar la ventana que contiene o llama al menú, pero en Windows Vista y Windows 7 esto no es necesario ya que corrigieron el error que tenían los menúes con bitmaps.

Menú con imágenes XP

Barra de menú con imágenes XP

Nótese que en Windows Vista y Windows 7 se mantienen los estilos visuales de Windows.

Menú con imágenes Seven
Barra de menú con imágenes Seven

  5 Responses to “ClsMenuImage”

  1. Hola, antes que nada gracias por tu trabajo… llevo mucho tiempo usando otra herramienta para generar este tipo de menúes y no funciona en Windows 11 (al menos de momento, tampoco funcionaba en las primeras versiones de Windows 10 hasta que una actualización del sistema operativo lo corrigió), mientras que la tuya lo hace sin problemas, además de que respeta el aspecto nativo de los menús de la versión de sistema operativo que se esté ejecutando.

    Ahora, tengo el problema de que uso menúes contextuales generados a partir de menúes comunes que están ocultos… y por lo que pude comprobar, si el menú tiene su propiedad visible seteada a False, no muestra íconos al llamarlo como menú contextual.

    ¿La única solución en ese caso es crear los menúes mediante APIs?

  2. Encontré una solución creativa igualmente funcional y más sencilla de implementar en mi proyecto:

    1. Coloqué todos los menús contextuales como submenús de un menú de nivel primario
    2. Le puse a ese menú como Caption un espacio en blanco
    3. Le setee la propiedad Enabled a False
    4. Lo puse como último menú

    De ese modo, el menú no aparece en la interfaz (el resultado es el mismo que setear su propiedad visible a False, pero sin perder los íconos)

    Es importante que sea el último menú, de otro modo al moverse por los menús se nota su presencia, aunque esté inhabilitado.

    Lo dejo aquí por si le sirve a otra persona.

  3. On form 3, how to add submenu with icon?

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)