Trucos Formularios con barras de desplazamiento

INTRODUCCION

¿Ha experimentado que el área de un formulario no es suficiente?, ¿Ha desarrollado para 800x600 y sus usuarios se empeñan en 640x480?, ¿Extraña los formularios de Access?. Este articulo explicara un método super-fácil de implementar un área desplazable.

Les confieso que le dedique buen tiempo para lograr esto hasta que llegue a la técnica estándar. Curiosamente existe un articulo Visual Basic del ToolKit de Microsoft (Visual Basic anteriores a la versión 5.0) acerca de una área desplazable, para una imagen,
pero francamente para controles resulta poco atractivo. Las dos técnicas curiosamente coinciden en lo básico, alguien diría que son copia. Mi primer objetivo era poder implementar formularios con misma interfaz y flexibilidad a los que creas con Microsoft
Access ®. El código es para Visual Basic 5.0 y es tan perfecto como cualquier formulario de un software Microsoft.


DESARROLLO

La idea básica es tener un contenedor, que llamaré Area Virtual, dentro de otro contenedor, que llamaré Area Visual. Para que exista Scroll, el Area Virtual debe ser mayor que el Area Visual, la cual varia en tamaño según se arrastren y suelten los bordes del formulario. La implementación se logra siguiendo estos pasos:

   1.Cree un formulario, agregue un Frame que llamará frm_AreaVirtual (Name: frm_AreaVirtual ), y diseñe su formulario sin limitaciones de tamaño (puede ser mayor que su Screen - el diseño de formularios en VB5 lo permite). Coloque controles de acceso a datos, imágenes, comandos, etc, todo dentro de frm_AreaVirtual. Si lo prefiere, puede usar un formulario existente y lleve su contenido al interior del Frame frm_AreaVirtual.

   2.Cree un segundo formulario (Name: frm_Muestra) y agregue un PictureBox (Name: pic_AreaVisual), corte el Frame frm_AreaVirtual del primer formulario y péguelo (paste) dentro de pic_AreaVisual. Añada un Control VScroll (Name: sc_Vertical) y uno HScroll (Name: sc_Horizontal) dentro de pic_AreaVisual (no se preocupe por el tamaño y posición de estos controles)

   3.Opcionalmente, puede adicionar un Control que hará de Pie de Formulario a frm_Muestra, yo use otro PictureBox (para no añadir un OCX al ejemplo, pero usaría un SSPanel) y lo llame pic_PieDeFormulario. Este debe ir en el área del formulario, especifiqué Align: Bottom.

   4.Por ultimo, pegue el código que suministro al final del articulo. No necesita más.

     DETALLE. Observe la esquina inferior derecha de cualquier ventana Windows95 con Scroll y notará un pequeño diseño de barritas inclinadas con apariencia de relieve. Pues bien, mi implementación también incluye las susodichas barritas, es un pequeño BMP que incluyo en Download que acompaña este articulo y hace uso de un nuevo PictureBox (Name: pic_Esquina) dentro de pic_AreaVisual (no dentro frm_AreaVirtual). En realidad es necesario pero no indispensable, ya que la esquina del empate se ve mejor con esta imagen. Si no desea prescindir de la imagen de esquina, elimine todas la líneas de código que hacen referencia pic_Esquina y, en el evento Form_Resize, prolongue alguna de las barras Scroll para suplir el espacio.


CODIGO DE LA IMPLEMENTACION

     DefInt A-Z
     Option Explicit

     Private Sub Form_Load()
         '//Ajusta área virtual
         frm_AreaVirtual.BorderStyle = 0
         frm_AreaVirtual.Top = 0
         frm_AreaVirtual.Left = 0

         '//Opcional: Fija área visual al area de Me
         pic_AreaVisual.Top = 0
         pic_AreaVisual.Left = 0

         '//Configura Scroll
         With sc_Vertical
             .Min = 0
             .SmallChange = 90
             .LargeChange = 300
             .Top = 0
             .ZOrder 0
         End With
         With sc_Horizontal
             .Min = 0
             .SmallChange = 90
             .LargeChange = 300
             .Left = 30
             .ZOrder 0
         End With
         '//Uso de un área pie de formulario
         pic_PieDeFormulario.BorderStyle = 0

         '//Opcinal: Esquina del empate de los Scroll
         ' Picture = "EdgeScroll.bmp" '12X12 Pixeles
         ' BorderStyle = 0
         ' AutoSize = True
         pic_Esquina.ZOrder 0
     End Sub

     Private Sub Form_Resize()
         Dim ScrollMax
         If Not WindowState = vbMinimized Then
            On Error Resume Next

            '//Ajusta area visual al formulario
            pic_AreaVisual.Width = ScaleWidth
            pic_AreaVisual.Height = ScaleHeight - pic_PieDeFormulario.Height

            '//Ajusta barra Scroll al formulario
            With sc_Vertical
                .Height = pic_AreaVisual.ScaleHeight - sc_Horizontal.Height
                .Left = pic_AreaVisual.ScaleWidth - .Width
                '//Ajustar Scroll a nueva area
                ScrollMax = frm_AreaVirtual.Height - pic_AreaVisual.Height + sc_Horizontal.Height
                If ScrollMax > 0 Then
                  .Max = ScrollMax
                  .Enabled = True
                Else
                  .Value = 0
                  .Enabled = False
                End If
            End With
            With sc_Horizontal
                .Top = pic_AreaVisual.ScaleHeight - .Height + 30
                .Width = pic_AreaVisual.ScaleWidth - sc_Vertical.Width
                '//Ajustar Scroll a nueva area
                ScrollMax = frm_AreaVirtual.Width - pic_AreaVisual.Width + sc_Vertical.Width
                If ScrollMax > 0 Then
                  .Max = ScrollMax
                  .Enabled = True
                Else
                  .Value = 0
                  .Enabled = False
                End If
            End With
            pic_Esquina.Move sc_Horizontal.Width, sc_Vertical.Height
            pic_AreaVisual.SetFocus
         End If
     End Sub

     Private Sub sc_Horizontal_Change()
         '//Dezplaza área virtual dentro área visual
         frm_AreaVirtual.Left = -sc_Horizontal.Value
     End Sub

     Private Sub sc_Vertical_Change()
         '//Dezplaza área virtual dentro área visual
         frm_AreaVirtual.Top = -sc_Vertical.Value
     End Sub

Harvey Triana, psoft@latino.net.co

Download vb_scroll.zip  



Trucos Trucos

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com