Nov 052012
 

Otras de menú, ClsCustomMenu es un módulo clase que permite personalizar los items del menú, el otro día alguien preguntó en el foro como podía cambiar la fuente del menú y si bien el HookMenu puede personalizar el menú a gusto,  no tiene la opción de personalizar el ítem, así que hice esta pequeña clase para poder cambiarle algunos aspectos. En lo personal no es de mi agrado modificar la fuente del menú, pero hay casos específicos donde se tiene la necesidad. Traté de hacer algo que pueda satisfacer la necesidad de muchos, pero lo personalizado es personalizado, así que seguramente alguien querrá algo más.
Esta clase permite cambiar el Color de fuente, color de fondo, fuente, alineación, icono, tamaño.
Su funcionamiento es algo parecido al ClsMenuImage, junto a la clase hay cuatro formularios de ejemplo de su uso, cualquier duda pueden preguntar.

Desventajas: Al personalizar el menú, éste pierde el estilo de windows, esto se aprecia más que nada en (Windows Vista y Windows Seven), si se cambia el Caption del item hay que volver a llamar a la función que le aplica el estilo.

Custom Menu.

 
Sep 142011
 

Para quienes no estén al tanto de que se trata pueden leer en Wikipedia sobre este sistema para almacenar información en una imagen, el cual es cada ves mas utilizado en diferentes productos y publicidades. hoy en día muchos celulares trae una aplicación para decodificar estas imágenes.

El modulo clase a continuación se encarga de Codificar y Decodificar QR Code,  utilizando dos apis de dos servidores web qrserver.com para codificar y zxing.org para decodificar, si bien esto podría hacerse sin estas dependencias me parece que desarrollar dicha tarea no es nada sensilla (teniendo en cuenta que la imagen no siempre estará presentada en forma vertical),  existen algunas dll para realizar este trabajo pero no encontré ninguna compatible  para VB6.

En el siguiente proyecto  encuenta la clase ClsQrCode.cls en la que encontraremos las siguientes funciones

  • GetPictureQrCode:  esta función retorna un StdPicture, el cual se seria de nuestro QR Code codificado, si no retorna ninguna imagen (Is Nothing)  entonces significa que la función fallo. A continuacion sus parametros.
    1. sText:    Requerido, Es el texto el cual queremos codificar, la clase solo se encarga de texto plano, si quieren pueden agregar los prefijos SMSTO: o TEL: etc. segun el caso, pueden ver un poco mas en goqr.me
    2. Width:   Requerido, Ancho de la imagen (Minimo 10 Px, Maximo 1000 Px)
    3. Height:  Requerido, Alto de la imagen (Minimo 10 Px, Maximo 1000 Px)
    4. Encoding:   Opcional, «UTF-8» o «ISO-8859-1»
    5. ErrCorrectionLevel:   Opcional,  «L», «M», «Q», «H»
    6. ForeColor: Opcional, Color de los cuadritos
    7. BackColor:   Opcional, Color de fondo
    8. Margin:   Opcional, Margen (máximo 50, expresado en módulos)
  • DecodeFromStream: decodifica mediante el array de bits de una imagen. (Dos parámetros el primero el array de bits, y el segundo debe pasarse una variable de tipo string como retorno), si la función tiene éxito devuelve True
  • DecodeFromPicture: decodifica un StdPicture. (Dos parámetros el primero el StdPicture, y el segundo debe pasarse una variable de tipo string como retorno), si la función  tiene éxito devuelve True
  • DecodeFromFile: decodifica desde un archivo de imagen. (Dos parámetros el primero el path de la imagen, y el segundo debe pasarse una variable de tipo string como retorno), si la función tiene éxito devuelve True
  • DecodeFromUrl: decodifica desde la url de una imagen. (Dos parámetros el primero el la URL de la imagen, y el segundo debe pasarse una variable de tipo string como retorno), si la función tiene éxito devuelve True
QR CODE

 
Jul 292011
 

Módulo clase para agregar un botón en las partes no cliente del formulario (bordes), actualmente con la llegada de Windows Seven son varias las aplicaciones que utilizan este sistema. Bien, esta clase sólo intenta crear un efecto parecido, y digo intenta ya que es otro método el que utilizan, lo que hace es crear una ventana en la que aplica el API UpdateLayeredWindow, la cual transforma un mapa de bits en una máscara para la ventana, la cual tiene soporte Alpha. Las aplicaciones por ejemplo Firefox, donde hoy en día se puede ver un botón naranja sobre el área no cliente utilizan otro método (DwmExtendFrameIntoClientArea, DwmEnableBlurBehindWindow) que es el de repintar el marco de la ventana empleando la nueva Guid de Windows Seven, esta clase también se puede utilizar bajo Windows XP, para ser más exacto esta clase hace lo mismo que se vé en el Botón Inicio de Windows 7.

Detalles de sus propiedades y funciones:

  • CreateButton: Inicializa el botón, el primer parámetro debe ser el hwnd de la ventana padre, el segundo parámetro es opcional para el ToolTipText.
  • LoadImageFromFile: Lee una imagen desde archivo.
  • LoadImageFromRes: Lee una imagen desde el archivo de recurso de la aplicación.
  • LoadImageFromStream: Lee una imagen desde un array de bits.
  • Left: Devuelve o establece la ubicación izquierda del botón con respecto a su ventana padre.
  • Top: Devuelve o establece la ubicación superior del botón con respecto a su ventana padre.
  • Right: Devuelve o establece la ubicación derecha del botón con respecto a su ventana padre.
  • Bottom: Devuelve o establece la ubicación inferior del botón con respecto a su ventana padre.
  • MoveMode: Indica a la clase en qué sentido debe mover el botón cuando la ventana padre se mueva o cambie de tamaño.
  • Enabled: Devuelve o establece si el botón está o no habilitado
  • Alpha: Transparencia del botón rango de 0 a 255.
  • ToolTipText: Devuelve o establece el texto mostrado cuando el mouse se sitúa sobre el control.
  • ImageWidth: Devuelve  el ancho de la imagen cargada.
  • ImageHeight: Devuelve el alto de la imagen cargada.
  • hwnd: Devuelve el Handle del botón.
  • ButtonWidth: Devuelve el ancho del botón.
  • ButtonHeight: Devuelve el alto del botón.

Vale aclarar que el botón no tiene Caption ya que es una tira de imágenes (la imagen debe ser siempre una tira vertical) -ver el formato en el zip del ejemplo-, el orden utilizado de los estados es Normal, Hot, Presionado y Deshabilitado. El formato de la imagen es conveniente que sea .PNG para la transparencia.

Nota: La clase subclasifica las ventanas y no utilicé el método modo seguro (SafeMode) sólo para que no sea muy grande el módulo, así que ojo No presionar el Stop del IDE de VB6. Ante cualquier error seguramente se les cerrará todo el proyecto y en el peor de los casos se les reiniciara Windows. Es recomendable comentar la línea de inicialización del botón (CreateButton) hasta que se compile el proyecto.

Boton No Cliente

En el ejemplo hice una validación que si la versión de Windows es Vista o Seven que quite el icono y el Caption de la ventana utilizando el api SetWindowThemeAttribute, ahora si es Windows XP van a ver que no queda muy bien ya que debajo del botón se vé el icono y el caption, quizás estés pensando en poner un icono transparente y remover el Caption pero esto hará que no se vea en la barra de tareas.

Boton No Cliente

 
Jul 212011
 

Este es un ejemplo de como crear una venta similar a las que aparece en Windows  Seven sobre los iconos del SysTray, en el ejemplo van a encontrar dos clases, una ClsPopUpTray.cls es la encargada de crear este tipo de ventanas, la otra ClsSysTray.cls es una clase para agregar iconos al SysTray (esta ultima esta basada en la clase de Cobein, con algunas modificaciones), También encontraran dos User Controls, uno de ellos es ucCommandLink.ctl (creado por Raul338), el cual crea un botón de tipo link (solo en Vista y Seven), y el segundo ucLabelItem.ctl es uno para crear un Label con algunas opciones que acompañan la guid del ejemplo.
Quiero aclarar que este ejemplo se lucirá bien si se ejecuta en Windows Seven con el Aero activado, de lo contrario puede que no se vea correctamente algunos controles.

SysTray PopUp
SysTray PopUp

 
Jul 102011
 

Módulo clase para agregar imágenes en controles OptionButton, CheckBox, CommandButton y Frame cuando se encuentran los Temas de Windows corriendo en la aplicación (Manifest), esta clase la había creado hace un tiempo atrás, la cual está publicada en Recursos Visual Basic donde la clase podía poner varios iconos para cada estado del botón (MousOver, MouseDown y deshabilitado). En esta versión se quitó dicha propiedad ya que no lo considero muy útil, también eliminé otra propiedad la cual si no estaban los Themes habilitados ponía una imagen de todas formas, una de las ventajas de esta versión es que no se necesita una clase para cada control, ya que con una podemos cubrir todos los controles del formulario o la aplicación, otra es que se puede poner cualquier tipo de imagen  (PNG, JPG, BMP e ICO) y la lectura de las imágenes en varias formas.

Detalle de sus funciones:

  • SetImageFromHandle:  Agrega la imágen desde su handle (Bitmap o Icono).
  • SetGdiPlusImagen: Agrega la imágen desde un hBitmap de GDI+.
  • LoadImageFromFile: Carga una imágen desde un archivo.
  • LoadImageFromRes: Carga una imágen desde el archivo de recurso.
  • LoadImageFromStream: Carga una imágen desde un array de bits.
  • SetMargins: Indica los márgenes de la imágen con respecto al control (Left, Top, Right, Bottom).
  • Align: Propiedad para poner u obtener la alineación de la imágen con respecto al control (Icon_Left, Icon_Right, Icon_Top, Icon_Bottom, Icon_Bottom, Icon_Center).
  • RemoveImage: Remueve la imágen del control.

La fórmula principal de dicho módulo es asociar un ImageList (API) con un ícono al control utilizando SendMessage con el mensaje BCM_SETIMAGELIST y la estructuraBUTTON_IMAGELIST el resto del código solo trata de formar las imágenes en objetos Iconos.

Nota: Cuando prueben el proyecto si están en el IDE seguramente no van a ver ningún icono, ya que no funciona si no está compilado (excepto que tengan el VB6 con Manifest) así que sólo van a ver su funcionamiento cuando corran el ejecutable (recalco para los que no están al tanto, la clase sólo funciona si se utilizan los temas de Windows, para más información ver este link).

Iconos en botones

 
Jul 212010
 

Módulo clase que permite visualizar un menú con los archivos alojados en nuestra PC, su función principal es la de explorar y recuperar la ruta de un archivo, tal como lo hacen los cuadros de diálogo (CommonDialog). Tiene opciones tales como poder filtrar el o los tipos de archivos requeridos, mostrar o no archivos ocultos, establecer algunas carpetas especiales por defecto en el menú principal, posee un Tooltips con algunos datos del archivo y reconoce los accesos directos.
Utiliza la ClsMenuImage para poder insertar íconos en el menú.
La primera vez que llamemos al menú si es una carpeta con muchos archivos puede ser un poco lento al cargar los items, pero una vez que su cache se haya creado es más rápido.
He tenido que deshabilitar algunas funciones que recuperaban palabras del sistema, lo cual hacía que si se ejecutaba en una PC que su sistema operativo no era en castellano las mostraba en su idioma correcto, este supresión se debe a que algunos antivirus detectaban una o varias Apis como una amenaza (Avira Antivirus).

Menú explorer con XP

Menú explorer con Windows 7

 
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