Jun 212021
 

Como su nombre en inglés lo indica clase para sombras, un módulo que nos servirá para implementar sombras a nuestro formulario y controles, esta clase fue realizada con fines para otro control que compartiré más adelante, pero decidí publicarlos por separado para que sea más fácil de entender el uso de cada uno. Como verán en la imagen, además de la sombra da una forma redondeada a los controles y formularios, esto coincide justamente con la nueva interfaz de Windows 11, pero en realidad la idea es copiar a los diseños que vemos en HTML y CSS con Bootstrap, si bien a primera vista parece lo que se hizo con el LabelPlus, esto es algo diferente y mucho más rápido para este propósito.

Técnicamente su funcionamiento se divide en dos: para ventanas hijas y ventanas padres. En el caso de las ventanas hijas crea otra ventana que copia el color de fondo de la ventana contenedora, dibuja la sombra, borde y la misma se sitúa debajo del control que queremos aplicar dicho estilo. Si tuviéramos un fondo degradado o con una imagen el efecto quedaría mal ya que esta ventana no es transparente, sólo simula serlo (si bien es posible hacerla transparente, es más costoso en memoria, por lo cual decidí dejarlo así). En el caso de las ventas padres también se crea una ventana con el estilo WS_EX_LAYERED y contiene un DIB con la imagen de la sombra, bordes y se sitúa por detrás de la ventana en cuestión. En este último caso la ventana tiene transparencia.

La función principal que inicia todo es «ShowBorders», su primer parámetro es el hwnd de la ventana a aplicar los bordes y sombras, el segundo parámetro boolean es si esta ventana es hija (control) o Padre(Formulario) .

Traté de subclasificar lo menos posible, sólo WM_PAINT en ventanas hijas y WM_MOVE en ventanas padres por lo que si se ocultara el control queda en mano del programador llamar a la función «HideBorders» para ocultar la sombra, lo mismo cuando se cambie el tamaño del control u otras, es necesario llamar a «Refresh». Mirando los ejemplos se podrá entender mejor su funcionamiento, por el momento funcionará así, más adelante de ser necesario haré algunos cambios.

ClsShadow1.png ClsShadow2.png

Actualizado: 05/08/2021 (corrección en algunas fallas de la sombra en ventanas padres)

May 082009
 

Ejemplo:

A continuación se encuentra un ejemplo sencillo que les enseñará cómo aplicar dichos Skins a un formulario, además se mostrarán las propiedades y funciones con las que cuenta.
Nota: Es aconsejable implementarlo cuando estemos por compilar y no cuando estemos construyendo algún proyecto ya que de haber algún error este podría provocar el cierre de Visual Basic y no nos permitirá guardar los cambios de nuestro proyecto.

Option Explicit

' Declaramos cSkin como la clase ClsSkinner.
 Dim cSkin As ClsSkinner

Private Sub Form_Load()

' Creamos e inicializamos a cSkin
 Set cSkin = New ClsSkinner

' Esto es si queremos que el área del cliente se pinte con el tema del skin.
 ' Ojo!! esto hará que los controles Labels, Image, Shapes y Line que estén directamente sobre el formuario no se muestren.
 ' En el caso que no querramos que esto pase lo dejamos = False.
 cSkin.PaintClientArea = True

' Indicamos el path donde debe leer el archivo.Skin
 cSkin.LoadSkinFromFile App.Path & "\Comander.Skin"

' Si quisiéramos leer el Skin desde un archivo de recursos llamamos a la función. LoadSkinFromResource
 ' Donde 101 es el index y "SKIN" es la sección.
 cSkin.LoadSkinFromResource 101, "SKIN"

' Aplicamos el Skin a nuestro Formulario.
 cSkin.HookForm Me.hwnd

End Sub

Private Sub Form_Unload(Cancel As Integer)

' Detenemos la Sublcasificación.
 cSkin.UnHookForm Me.hwnd

' Descargamos la clase de la memoria
 Set cSkin = Nothing

End Sub

 Posted by at 15:57  Tagged with:
May 082009
 

Editor de Skins para Formularios:

Este es el editor anteriormente mencionado, bien no voy a dar muchos detalles por el momento, después voy a crear una pagina donde voy a dar una explicación más detallada.
En el link de descarga van a encontrar un archivo .zip con el ejecutable, este no tiene dependencias por lo tanto no requiere instalación.

Skins para Formularios (Editor)

May 082009
 

Módulo ClsSkinner:

Este es un módulo clase llamado ClsSkinner, el cual sirve para cambiar el aspecto de nuestros formularios, no necesita ningún OCX o DLL y su implementación es muy sencilla, los skin los carga desde unos archivos de extensión «.Skin» los cuales también se puede guardar en archivos de recursos para luego ser implementados.
En esta versión sólo cambia el aspecto de los formularios y barra de menús, para los PopUpMenú solamente le he implementado la opción de cambiarle el color de fondo, también se les puede aplicar a formularios MDI y a todas las ventanas dentro de la instancia de nuestra aplicación que posean bordes.
Para la próxima versión (si Dios quiere), tengo pensado implementárselo a los controles, pero bien es una idea  muy a futuro.Estas son algunas capturas de muestra, en el ejemplo que voy a poner a continuación existen estos dieciséis Skins en los cuales he utilizado partes de otros programas similares (pagos y de código cerrado), estos skin los pueden crear ustedes mismos con un editor que es exclusivo para este módulo clase.

Skins para Formularios

 Posted by at 12:29  Tagged with: