Scrollbar automático en un form II (Horizontal)
[Mueve los controles que sobrepasa el tamaño horizontal de un form]

Fecha: 30/Abr/2005 (12/04/2005)
Autor: José Bravo [email protected] 

 


Esta es una clase que crea automáticamente un scrollbar en una forma. Se activa y desactiva automáticamente, dependiendo de la visibilidad del último o el control que esta mas hacia la derecha en la forma.

La versión anterior lo hace únicamente para ScrollBar's verticales.

Si quiere la puede ver:

josebravo_scrollbarenunaforma.htm

A continuación sigue código en Visual Basic:

Agregar el siguiente código en una clase llamada: cScrollBar.


Option Explicit



Dim aPos As Integer 'Mantiene el valor global de la posición del scroll
Dim WithEvents ScrollBar As VB.HScrollBar 'Variable para crear el Control y utilizar sus procedimientos/eventos


Dim Cargado As Boolean

Sub DibujarScrollBar()
    If Not Cargado Then
        Set ScrollBar = Screen.ActiveForm.Controls.Add("VB.HScrollBar", _
                        "ScrollBar1", Screen.ActiveForm) 'Ejemplo extraido de la página de la Microsoft
        ScrollBar.Max = Screen.ActiveForm.Height
        Ajustar
        ScrollBar.Visible = True
        ScrollBar.SmallChange = 50
        ScrollBar.LargeChange = 100
        Cargado = True
    End If
    Ajustar
End Sub

Private Sub Ajustar()
Dim ControlHorizontalMaximo As Integer
Dim cControl As Control
Dim AltoStatus As Integer

On Error Resume Next
    For Each cControl In Screen.ActiveForm.Controls
        If cControl.Left > ControlHorizontalMaximo Then
            ControlHorizontalMaximo = cControl.Left + cControl.Width 'Obtengo la posición vertical del control que se encuentre mas abajo
        End If
        
        If TypeName(cControl) = "StatusBar" Then 'Si tengo un control estatus también se evalúa su altura
            AltoStatus = cControl.Height
        End If
    Next
    
    If ScrollBar.Height > ControlHorizontalMaximo Then
        ScrollBar.Max = ScrollBar.Height - ControlHorizontalMaximo + 50
    Else
        ScrollBar.Max = ControlHorizontalMaximo - ScrollBar.Height + 50
    End If
    
    If ControlHorizontalMaximo <= Screen.ActiveForm.ScaleWidth Then
        ScrollBar.Enabled = False
    Else
        ScrollBar.Enabled = True
    End If
    
    ScrollBar.Width = Screen.ActiveForm.ScaleWidth - AltoStatus
    ScrollBar.Top = Screen.ActiveForm.ScaleHeight - ScrollBar.Height
    ScrollBar.Left = Screen.ActiveForm.ScaleWidth - ScrollBar.Width
    aPos = 0
    ScrollBar.Value = 0
End Sub

Private Sub ScrollBar_Change()
    Cambiar
End Sub

Private Sub ScrollBar_Scroll()
    Cambiar
End Sub

Private Sub Cambiar()
Dim a As Control
Dim Pos As Integer

On Error Resume Next
    
    Pos = aPos - ScrollBar.Value
    
    For Each a In Screen.ActiveForm.Controls
        If Not TypeName(a) = "HScrollBar" Then
            If a.Container = "" Then
                a.Left = a.Left + Pos 'Muevo los controles hacia la derecha dependiendo de la posición del scroll
            End If
        End If
    Next
    Debug.Print "Min: " & ScrollBar.Min
    Debug.Print "Max: " & ScrollBar.Max
    
    aPos = ScrollBar.Value
End Sub





El siguiente código agregarlo a una forma y agregarle algunos controles. Para probar debe agregar un control que este muy a la derecha (o sea fuera de la pantalla, del lado derecho) de la forma para poderlo visualizar con el scrollbar.

Option Explicit Dim hS As New cScrollBar Private Sub Form_Resize() hS.DibujarScrollBar End Sub

Cualquier duda me escribe a mi correo. Saludos a todos desde Venezuela.

Lo publico gracias a la interrogante de un colega. Espero sea de utilidad, y voten por mi en panoramabox!!!!


 


ir al índice

Fichero con el código de ejemplo: josebravo_cScrollBar.zip - Tamaño 1,10 KB