Resulta sencillo que un ratón tenga cabeza,
basta con alargar la mano y dejar que las ideas fluyan a través de ella.

Su visita a esta página es a la vez una invitación y una provocación
A continuación les presento una serie de pequeñas muestras de mis capacidades en el campo del diseño gráfico, la fotografía, la programación y el desarrollo web. Todavía quedan muchas cosas que mostrar y demostrar pero valga para ellas este adelanto.

Invitación a mostrar.
Provocación para demostrar.
fecha de hoy: 05(Sun) - February - 2012
Mover un formulario mediante etiqueta

 

mover un Formulario utilizando una etiqueta

El título correcto de esta sección debería ser: ¡Cómo mover un formulario sin barra de menú, estado, ni nada que se lo parezca utilizando para tal fin una simple etiqueta!. Comprenderás ahora por que no he utilizado este título, aunque sea mas correcto y explicativo.

Tampoco es exacto el término "utilizando una etiqueta" ya que mediante este método podremos mover el formulario utlizando cualquier cosa: una imagen, un botón, el propio formulario.

El método es muy sencillo.

Primero creemos un formulario cualquiera y llamémosle como mejor nos plazca. A continuación deberemos asignar nuevos valores a las propiedades siguientes:

Appaerance = 0-flat
BorderStyle = 0-None
BackColor = &H00FF0000& (por ejemplo)
ScaleMode = 1-twip
width = 4000
height = 4000

De esta manera nuestro formulario tendrá el aspecto de un cuadrado de color azul sin barra de ningún tipo, ni siquiera un mísero botón de minimizar o cerrar.

A continuación creamos una etiqueta que yo nombraré lblBarra (la llamamos como queramos pero deberemos tener presente este nombre posteriormente) y le damos los siguientes valores a las propiedades siguientes:

BackColor = &H00800000& (Un azul mas oscuro que el anterior)
ScaleMode = 1-twip
width = 3800
height = 375
Top = 0
Left = 0
Caption="" (es decir, en blanco)

Finalmente crearemos otra etiqueta a la que le llamaremos lblExit con las siguientes propiedades:

BackColor = &H00000000& (Un negro intenso)
ForeColor = &H00FFFFFF& (Un blanco inmaculado)
ScaleMode = 1-twip
width = 200
height = 375
Top = 0
Left = 3800
Caption="X"

Veamos a continuación el código fuente:

Primero realizamos una serie de declaraciones o llamadas a las funciones API:
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Const WM_NCLBUTTONDOWN = &HA1
Private Const HTCAPTION = 2

Al evento click de la etiqueta lblExit le asignamos el siguiente código:

Unload Me (sin comentarios)

Al evento MouseMove de la etiqueta lblBarra le incluimos el siguiente código (podríamos utilizar un botón, una imagen, el propio formulario etc. con solo cambiar el objeto sobre el que se realiza el evento):

Private Sub lblBarra_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lngReturnValue As Long
Dim I As Integer
Dim cordX As String
Dim cordY As String
If Button = 1 Then
Call ReleaseCapture
lngReturnValue = SendMessage(Me.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End If
End Sub

Si probamos ahora el programa veremos como aparece en nuestra pantalla un formulario de color azul con una barra superior (la etiqueta) de un color mas oscuro. Si queremos mover el formulario por la pantalla simplemente haremos click sobre la etiqueta llamada lblBarra y arrastraremos el formulario. Si hacemos click sobre la etiqueta lblExit (esquina superior-derecha) se cerrará el formulario.

¿Pero qué hemos hecho?

A grandes rasgos, primeramente hemos declarado unas llamadas a funciones API, en este caso SendMessage y ReleaseCapture.

La primera de las funciones envía un mensaje específico a una ventana o ventanas. La función realiza una llamada a un proceso de windows para la ventana especificada, es decir, invocamos a una función de windows sobre una ventana determinada que previamente hemos pasado como argumento. En nuestro ejemplo indicamos a la ventana de nuestro programa que se le enviará un mensaje de captura de la misma cuando se produzca el evento de presionar el botón del ratón (WM_NCLBUTTONDOWN)

La segunda función efectúa una captura de la ventana a través del evento originado por el ratón que es el que nos permite mover la ventana.

De esta forma podemos decir que la primera función envía un mensaje al formulario generado por la segunda función.

Opino, según mi punto de vista particular, que la mejor manera de comprobar el funcionamiento de todo lo explicado anteriormente es a través de ejemplos prácticos. A continuación os ofrezco los archivos del ejemplo para que puedas ver mas claramente todo lo explicado anteriormente. Te recomiendo que lo descargues y le eches un vistazo ya que puede resultarte útil (si no todo, alguna parte) para el desarollo de tus propios programas.

descargar .zip con archivos vb de ejemplo


Si deseas ampliar la información sobre el tema, si tienes alguna duda, o simplemente si tienes otras ideas o sugerencias no dudes en ponerte en contacto conmigo.

Gracias.
Luis Álvarez

 
La cabeza del Ratón


'nuevomilenio' es una idea de Luis Álvarez
'CSI/dilvish666' es propiedad intelectual


CSI/dilvish666 - A Coruña
nuevomilenio@retemail.es