ScrollBars!! Desaparecen al volver a cargar Form
Publicado por Roberto (22 intervenciones) el 18/07/2006 21:05:13
Hola!!
Puse un ScrollBar en una forma me funcion muy bien la primera vez que abro el proyecto pero cierro la forma y la vuelo a iniciar y ya no sale la ScrollBar, no se en realidad porque pasa eso cuando mando llamar el procedimiento para activar la ScrollBar lo tengo que hacer en la propiedad de Form_Resize() para que se pueda hacer no lo puedo hacer mediante otra forma.
Aquí explico un poco mejor lo que me pasa:
En un módulo de clase puse las siguientes instrucciones:
Option Explicit
Dim aPos As Integer 'Mantiene el valor global de la posición del scroll
Dim WithEvents ScrollBar As VB.VScrollBar 'Variable para crear el Control y utilizar sus procedimientos/eventos
'Attribute ScrollBar.VB_VarHelpID = -1
Dim Cargado As Boolean
Sub DibujarScrollBar()
If Not Cargado Then
Set ScrollBar = Screen.ActiveForm.Controls.Add("VB.VScrollBar", _
"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 ControlVerticalMaximo As Integer
Dim cControl As Control
Dim AltoStatus As Integer
On Error Resume Next
For Each cControl In Screen.ActiveForm.Controls
If cControl.Top > ControlVerticalMaximo Then
ControlVerticalMaximo = cControl.Top + cControl.Height '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 > ControlVerticalMaximo Then
ScrollBar.Max = ScrollBar.Height - ControlVerticalMaximo + 50
Else
ScrollBar.Max = ControlVerticalMaximo - ScrollBar.Height + 50
End If
If ControlVerticalMaximo <= Screen.ActiveForm.ScaleHeight Then
ScrollBar.Enabled = False
Else
ScrollBar.Enabled = True
End If
ScrollBar.Height = Screen.ActiveForm.ScaleHeight - AltoStatus
ScrollBar.Top = 0
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) = "VScrollBar" Then
If a.Container = "" Then
a.Top = a.Top + Pos 'Muevo los controles 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
y lo mando llamar así:
Private Sub Form_Resize()
hS.DibujarScrollBar
End Sub
Espero me ayuden con mi error gracias de antemano.
Puse un ScrollBar en una forma me funcion muy bien la primera vez que abro el proyecto pero cierro la forma y la vuelo a iniciar y ya no sale la ScrollBar, no se en realidad porque pasa eso cuando mando llamar el procedimiento para activar la ScrollBar lo tengo que hacer en la propiedad de Form_Resize() para que se pueda hacer no lo puedo hacer mediante otra forma.
Aquí explico un poco mejor lo que me pasa:
En un módulo de clase puse las siguientes instrucciones:
Option Explicit
Dim aPos As Integer 'Mantiene el valor global de la posición del scroll
Dim WithEvents ScrollBar As VB.VScrollBar 'Variable para crear el Control y utilizar sus procedimientos/eventos
'Attribute ScrollBar.VB_VarHelpID = -1
Dim Cargado As Boolean
Sub DibujarScrollBar()
If Not Cargado Then
Set ScrollBar = Screen.ActiveForm.Controls.Add("VB.VScrollBar", _
"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 ControlVerticalMaximo As Integer
Dim cControl As Control
Dim AltoStatus As Integer
On Error Resume Next
For Each cControl In Screen.ActiveForm.Controls
If cControl.Top > ControlVerticalMaximo Then
ControlVerticalMaximo = cControl.Top + cControl.Height '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 > ControlVerticalMaximo Then
ScrollBar.Max = ScrollBar.Height - ControlVerticalMaximo + 50
Else
ScrollBar.Max = ControlVerticalMaximo - ScrollBar.Height + 50
End If
If ControlVerticalMaximo <= Screen.ActiveForm.ScaleHeight Then
ScrollBar.Enabled = False
Else
ScrollBar.Enabled = True
End If
ScrollBar.Height = Screen.ActiveForm.ScaleHeight - AltoStatus
ScrollBar.Top = 0
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) = "VScrollBar" Then
If a.Container = "" Then
a.Top = a.Top + Pos 'Muevo los controles 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
y lo mando llamar así:
Private Sub Form_Resize()
hS.DibujarScrollBar
End Sub
Espero me ayuden con mi error gracias de antemano.
Valora esta pregunta


0