El Framework Web de Xojo cuenta con la clase WebLink lista para usar; lo que significa que maneja todo lo relacionado con el aspecto visual y la gestión de abrir el enlace subyacente en el navegador… pero si tienes la necesidad de contar con dicha capacidad también en Desktop entonces… bueno, ¡no resulta tan difícil! Sigue leyendo y te mostraré una de las múltiples implementaciones que se pueden realizar para contar con tu propia clase LinkLabel en Desktop.
Una vez hayas creado un nuevo proyecto Xojo Desktop, añade una nueva clase y utiliza el Panel Inspector para cambiar algunos de sus valores, como el nombre de la clase, o la clase superior en la que se basa, entre otros:
- Name: LinkLabel
- Super: Label
Añadamos algunas propiedades encargadas de almacenar valores como el enlace propiamente dicho así como los colores del enlace y del enlace una vez que ya se haya hecho clic sobre él; así como el URL propiamente dicho, y una propiedad protegida que se encargará de guardar el estado sobre si el usuario ya ha hecho clic sobre él… de modo que se cambie el color del texto por el indicado como color de enlace visitado.
- Property Name: LinkColor
- Type: Color
- Default: &C2062AD
- Scope: Public
- Property Name: VisitedColor
- Type: Color
- Default: &C8D3F93
- Scope: Public
- Property Name: Visited
- Type: Boolean
- Scope: Protected
Sólo resta una propiedad más: URL. En este caso utilizaremos una Propiedad Compartida, de modo que el setter se encargará de comprobar si la cadena asignada cuenta con el prefijo “http://” o “https://”, añadiendo dicho prefijo en el caso de que no sea así.
Así que, tras haber añadido una nueva Propiedad Compartida a nuestra clase LinkLabel, selecciónala y utiliza el Panel Inspector para definir estos valores:
- Name: URL
- Type: String
Selecciona ahora el Setter de la propiedad compartida y escribe el siguiente código en el Editor de Código asociado:
If Not value.BeginsWith("http://") And Not value.BeginsWith("https://") Then value = "https://"+value End If mURL = value
Fijo que podemos definir todo esto desde código, pero es realmente mejor y más sencillo si simplemente podemos hacerlo desde el Panel Inspector, ¿verdad? ¡Es fácil! Selecciona el LinkLabel en el Navegador y, a continuación, selecciona la opción Inspector Behavior en el menú contextual. Esta acción abrirá un nuevo Panel en el que sólo tienes que activar las casillas de verificación correspondientes con las nuevas propiedades, de modo que estas aparezcan en el Panel Inspector cuando selecciones la instancia de la clase en los diseños de tus aplicaciones.
Y como puedes ver, también es posible modificar el orden de dichas propiedades para que aparezcan bajo las secciones que encuentre más acordes.
Añadir la Funcionalidad
Una vez hemos añadido todas las propiedades a la clase, y encargado también de que podamos definir sus valores mediante el Panel Inspector, es hora de implementar el comportamiento propiamente dicho de la clase.
Comencemos añadiendo el Manejador de Evento Open, de modo que ajustemos el color del texto con el correspondiente al de la propiedad LinkColor. Una vez añadido dicho Manejador de Evento, sólo has de escribir las siguientes líneas de código en el Editor de Código asociado:
Me.Underline = True Me.TextColor = LinkColor RaiseEvent Open
Aquí puedes ver la sentencia “RaiseEvent Open”, de modo que permitimos que la instancia de la clase también pueda incluir código de inicialización en el caso de que necesites realizar alguna operación adicional (añadiremos la definición de este y otro manejador de evento un poco más tarde).
Añade ahora a la clase los manejadores de evento MouseEnter, MouseExit y MouseDown. La cantidad de código que has de escribir en cada uno de estos eventos es realmente mínima. Comencemos con MouseEnter:
me.MouseCursor = System.Cursors.FingerPointer
Y el código de MouseExit:
me.MouseCursor = System.Cursors.StandardPointer
Como puedes ver, simplemente nos limitamos a cambiar el cursor del apuntador del ratón por el del habitual dedo cada vez que el apuntador entra en el área del control, cambiándolo de nuevo por el del puntero estándar cuando el ratón sale del área del control.
El código para el Manejador del Evento MouseDown sería:
ShowURL Me.URL me.TextColor = VisitedColor Return RaiseEvent MouseDown(x,y)
Es decir, nos limitamos a llamar la función ShowURL encargada de abrir el URL indicado en el navegador configurado por omisión en el equipo. Después de esto, simplemente nos limitamos a cambiar el color del texto por el uno indicado en la propiedad VisitedColor, indicando así al usuario que ya se ha hecho clic sobre el enlace.
¡Y eso es todo!
Para completar nuestra pequeña subclase, sólo tenemos que añadir un par de definiciones de eventos: Open y MouseDown, de modo que el usuario de la clase pueda incorporar su propio código en estos. Para ello, sólo has de seleccionar el elemento LinkLabel en el Navegador y elegir la opción Add > Event Definition en el menú contextual, replicando las signaturas de los Manejadores de Evento consumidos.