
18/06/2008, 03:49
|
| | Fecha de Ingreso: enero-2008
Mensajes: 61
Antigüedad: 17 años, 3 meses Puntos: 0 | |
Respuesta: Problema de visualizacion Hola a todos:
Con respecto a los formularios MDI, lo he probado pero sigo teniendo el mismo problema...
El control de ComponentOne parece que esta muy bien pero si es de pago, no me lo puedo permitir...
Al final, se mas dificil o no, he decidido intentar hacerlo mediante codico. He estado buscando por ahi, y mas o menos voy avanzando. Pero tengo un problema. Este es el codigo. Haber que os parece:
Sub SizeAdaptor(y As Form)
Dim Ctl As Control
Dim sCtlType As String
' Invocar la rutina que calcula los factores de correccion de tamaño
Call Factores
' Si el uso y el diseño se realizan con una misma resolución de pantalla,
' no hace falta corrección alguna y se puede salir de la subrutina.
If SizingFactor = 1 Then
Exit Sub
End If
' Si el uso y el diseño se realizan con resoluciones de pantalla distintas
' hay que modificar las medidas y ubicación de cada componente.
' Adaptar el formulario en si.
' Esconder el formulario y su contenido mientras se hace la adaptación.
y.Visible = False
y.Left = 0
y.Top = 0
y.Height = Screen.Height
y.Width = Screen.Width
For Each Ctl In y.Controls
sCtlType = TypeName(Ctl)
If sCtlType = "Line" Then
Call LineResizing(Ctl)
ElseIf sCtlType = "SSTab" Then
Call SSTabResizing(Ctl)
ElseIf sCtlType = "ListView" Then
Call ListViewResizing(Ctl)
ElseIf sCtlType = "ComboBox" Then
Call ComboResizing(Ctl)
ElseIf sCtlType = "ListBox" Then
Call ComboResizing(Ctl)
ElseIf sCtlType = "CommandButton" Then
Call CommButtonResizing(Ctl)
ElseIf sCtlType = "TextBox" Then
Call TextBoxResizing(Ctl)
ElseIf sCtlType = "Label" Then
Call LabelResizing(Ctl)
ElseIf sCtlType = "PictureBox" Then
Call PictResizing(Ctl)
ElseIf sCtlType = "Menu" Then
'No hace nada
ElseIf sCtlType = "StatusBar" Then
'Aqui no se
ElseIf sCtlType = "Toolbar" Then
'Aqui no se
ElseIf sCtlType = "CommonDialog" Then
'No hace nada
ElseIf sCtlType = "ImageList" Then
'No hace nada
Else
Call ControlsResizing(Ctl)
End If
Next
' Una vez completado el proceso de adaptacion volvemos a mostrar el formulario
' con todo su contenido.
y.Visible = True
End Sub
Sub Factores()
' Se hace uso de la función Screen, accesible solamente durante el procesado
' del programa, que da el ancho y alto de la pantalla en twips.
SizingFactor = 0
HorFactor = Screen.Width / 19200
VerFactor = Screen.Height / 15360
' Si la pantalla de uso tiene la misma resolución que la de diseño
' no habrá que hacer nada, lo cual indicamos con la bandera SizingFactor igual a 1.
If HorFactor = 1 And VerFactor = 1 Then
SizingFactor = 1
End If
End Sub
Sub SSTabResizing(x As Control)
x.Left = x.Left * HorFactor
x.Top = x.Top * VerFactor
x.Width = x.Width * HorFactor
x.Height = x.Height * VerFactor
x.Font.Size = x.Font.Size * VerFactor
End Sub
Sub ListViewResizing(x As Control)
x.Left = x.Left * HorFactor
x.Top = x.Top * VerFactor
x.Width = x.Width * HorFactor
x.Height = x.Height * VerFactor
x.Font.Size = x.Font.Size * VerFactor
End Sub
Sub LineResizing(x As Control)
' Redimensiona (incluido grosor) y reubica una linea recta
x.X1 = x.X1 * HorFactor
x.X2 = x.X2 * HorFactor
x.Y1 = x.Y1 * VerFactor
x.Y2 = x.Y2 * VerFactor
x.BorderWidth = x.BorderWidth * VerFactor
End Sub
Sub ComboResizing(x As Control)
'adapta medidas y ubicación de una caja combo
x.Left = x.Left * HorFactor
x.Top = x.Top * VerFactor
x.Width = x.Width * HorFactor
'x.Height = x.Height * VerFactor
End Sub
Sub CommButtonResizing(x As Control)
'Adapta medidas y ubicación de un botón de comando
x.Left = x.Left * HorFactor
x.Top = x.Top * VerFactor
x.Width = x.Width * HorFactor
x.Height = x.Height * VerFactor
x.Font.Size = x.Font.Size * HorFactor
End Sub
Sub TextBoxResizing(x As Control)
x.Left = x.Left * HorFactor
x.Top = x.Top * VerFactor
x.Width = x.Width * HorFactor
x.Height = x.Height * VerFactor
x.FontSize = x.FontSize * VerFactor
End Sub
Sub LabelResizing(x As Control)
' Redimensiona y reubica un label
x.Left = x.Left * HorFactor
x.Top = x.Top * VerFactor
x.Width = x.Width * HorFactor
x.Height = x.Height * VerFactor
x.Font.Size = x.Font.Size * VerFactor
End Sub
Sub PictResizing(x As Control)
'Redimensiona y reubica un objeto de tipo picture
x.Top = Screen.Height / 2 - x.Height / 2
x.Left = Screen.Width / 2 - x.Width / 2
End Sub
Sub ControlsResizing(x As Control)
'Redimensiona y reubica un control genérico
x.Left = x.Left * HorFactor
x.Top = x.Top * VerFactor
x.Width = x.Width * HorFactor
x.Height = x.Height * VerFactor
End Sub
En el form_load del formulario llamo a Call SizeAdaptor(Me) y aunque no va perfecto, en general va bastante bien, excepto un problema:
En el formulario principal tengo un SSTab con varias pestañas. El problema es que la redimension de los controles funciona solamente con los controles de la pestaña activa. Es decir, los controles de la pestaña que se muestra por defecto al cargar el formulario aparecen redimensionados...pero el resto de las pestañas esta vacia!!!Esto pasa sea cual sea la pestaña por defecto.
Alguien sabria decirme como puedo hacer para que se redimensionen los controles de todas las pestañas?? |