Posición Relativa de Objetos.

24/07/2003 - 00:57 por Aníbal | Informe spam
Hola.
Como ago para que cuando un Form cambie de tamaño los controles que contiene
se coloquen en posiciones relativas a las que estaban.
Espero se entienda lo que quiero decir.
Gracias.
 

Leer las respuestas

#1 Leonardo Azpurua
24/07/2003 - 01:55 | Informe spam
"Aníbal" escribió en el mensaje
news:
Hola.
Como ago para que cuando un Form cambie de tamaño los controles que


contiene
se coloquen en posiciones relativas a las que estaban.
Espero se entienda lo que quiero decir.
Gracias.



Hola, Anibal:

Creo que por ahí hay algún OCX freeware que hace lo que pides de maravilla.

Hace un tiempo me hice la rutina que incluyo a continuación. Su función
básica es escalar la forma a la resolución de la pantalla (mi estándar es
800 x 600, pero siempre hay pelmas que se empeñan en usar 640 x 480 y exigen
que les funcione todo), de manera que tuve que hacer esto (con resultados
menos "profesionales" de lo que querría, pero es una chapuza).

Tambien incluye una que otra referencia a OCX míos. No te la paso para que
la uses como viene, sino para que tengas una idea de por donde va la cosa, y
la adaptes a tus necesidades.

Salud!

Leonardo
[MS MVP - VB]


Private nRescale As Integer

Public Sub scaleForm(pForm As Form, Optional nWidth As Long = 800, Optional
nHeight As Long = 600)
Dim lnHeight As Long, lnWidth As Long, dFactorX As Double, dFactorY As
Double
Dim pControl As Control, dFontFactor As Double

If nRescale = 0 Then
nRescale = Val(GetSetting("VSL", "Config", "AjustarResolucion", "3"))
If nRescale < 2 Then Exit Sub
End If

lnHeight = Screen.Height / Screen.TwipsPerPixelY
lnWidth = Screen.Width / Screen.TwipsPerPixelX
dFactorX = CDbl(lnWidth) / nWidth
dFactorY = CDbl(lnHeight) / nHeight

If dFactorX >= 1 And nRescale = 3 Then Exit Sub
If dFactorY < 1 Then
dFontFactor = 1 '0.9
Else
dFontFactor = 1
End If

pForm.Width = pForm.Width * dFactorX
pForm.Height = pForm.Height * dFactorY

For Each pControl In pForm.Controls

On Error Resume Next
pControl.top = pControl.top * dFactorY
If Err.Number Then Err.Clear
On Error Resume Next
pControl.left = pControl.left * dFactorX
If Err.Number Then Err.Clear

On Error Resume Next
pControl.Height = pControl.Height * dFactorY
If Err.Number Then Err.Clear

On Error Resume Next
pControl.Width = pControl.Width * dFactorX
If Err.Number Then Err.Clear

On Error Resume Next
If dFactorY < 1 Then
If pControl.Font.Name = "MS Sans Serif" Then
On Error Resume Next
pControl.Font.Name = "Arial" ' Para que acepte escalado "fino"
If Err.Number Then Err.Clear
End If
End If

On Error Resume Next
pControl.Font.Size = pControl.Font.Size * dFactorY * dFontFactor
If Err.Number Then Err.Clear

If TypeName(pControl) = "Line" Then
pControl.X1 = pControl.X1 * dFactorX
pControl.X2 = pControl.X2 * dFactorX
pControl.Y1 = pControl.Y1 * dFactorY
pControl.Y2 = pControl.Y2 * dFactorY
pControl.BorderWidth = pControl.BorderWidth * dFactorY
If pControl.BorderWidth = 0 Then pControl.BorderWidth = 1
End If

If TypeName(pControl) = "MSFlexGrid" Then
Dim l As Long
pControl.RowHeightMin = pControl.RowHeightMin * dFactorX
For l = 0 To pControl.Cols
pControl.ColWidth(l) = pControl.ColWidth(l) * dFactorX
Next
End If

If TypeName(pControl) = "ucFramedLabel" Then
pControl.OffsetX = pControl.OffsetX * dFactorX
pControl.OffsetY = pControl.OffsetY * dFactorY
End If
Next

End Sub

Preguntas similares