Scrollbar automático en un form II (Horizontal) Fecha: 30/Abr/2005 (12/04/2005) |
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 SubEl 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 SubCualquier 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!!!!
Fichero con el código de ejemplo: josebravo_cScrollBar.zip - Tamaño 1,10 KB