En base a lo que explicaste, desarrollé el siguiente algoritmo.
Por supuesto, no es perfecto, en algunas cosas habrá que retocar
manualmente, pero fijate.
Lo probé en el evento Form_Load() y anduvo bien.
Explicación de los parámetros:
1°) frmForm : Formulario que quieras redimensionar
2°) lngOriginalWidth: Ancho (en píxels) de la resolución en la que
diseñaste el formulario en cuestión
3°) lngOriginalHeight: Alto (en píxels) de la resolución en la que
diseñaste el formulario en cuestión
4°) varNewWidth: Ancho (en píxels) de la nueva resolución, si no
especificas nada, se usará el ancho de la resolución actual.
5°) varNewHeight: Alto (en píxels) de la nueva resolución, si no
especificas nada, se usará el alto de la resolución actual.
6°) blnMinimumOrAverageFontSize: Al calcular el tamaño de la tipografía,
lo hace en base al ancho y alto actual comparado con la resolución de
diseño, por lo tanto, esta variable te permite especificar si queres el
mínimo tamaño calculado (True) or el promedio de ambos (False).
Suerte.
Public Sub Form_Redimension( _
ByRef frmForm As Form, _
Optional ByVal lngOriginalWidth As Long = 1024, _
Optional ByVal lngOriginalHeight As Long = 768, _
Optional ByVal varNewWidth As Variant, _
Optional ByVal varNewHeight As Variant, _
Optional ByVal blnMinimumOrAverageFontSize As Boolean = True)
Dim objObject As Object
Dim sngFont1 As Single, sngFont2 As Single
With frmForm
If IsMissing(varNewWidth) Then
varNewWidth = Screen.Width / Screen.TwipsPerPixelX
End If
If IsMissing(varNewHeight) Then
varNewHeight = Screen.Height / Screen.TwipsPerPixelY
End If
If (lngOriginalWidth = varNewWidth) And _
(lngOriginalHeight = varNewHeight) Then
Exit Sub
End If
'Form
On Error Resume Next
sngFont1 = ((varNewWidth * .Font.Size) / lngOriginalWidth)
sngFont2 = ((varNewHeight * .Font.Size) / lngOriginalHeight)
If blnMinimumOrAverageFontSize Then
.Font.Size = (IIf(sngFont1 <= sngFont2, sngFont1, sngFont2) +
(Abs(sngFont1 - sngFont2) / 2))
Else
.Font.Size = IIf(sngFont1 <= sngFont2, sngFont1, sngFont2)
End If
Select Case .WindowState
Case vbMaximized
.WindowState = vbNormal
.Height = varNewHeight
.Left = 0
.Top = 0
.Width = varNewWidth
.WindowState = vbMaximized
Case vbMinimized
.WindowState = vbNormal
.Height = ((varNewHeight * .Height) / lngOriginalHeight)
.Left = ((varNewWidth * .Left) / lngOriginalWidth)
.Top = ((varNewHeight * .Top) / lngOriginalHeight)
.Width = ((varNewWidth * .Width) / lngOriginalWidth)
.WindowState = vbMinimized
Case vbNormal
.Height = ((varNewHeight * .Height) / lngOriginalHeight)
.Left = ((varNewWidth * .Left) / lngOriginalWidth)
.Top = ((varNewHeight * .Top) / lngOriginalHeight)
.Width = ((varNewWidth * .Width) / lngOriginalWidth)
End Select
On Error GoTo 0
For Each objObject In .Controls
With objObject
On Error Resume Next
sngFont1 = ((varNewWidth * .Font.Size) /
lngOriginalWidth)
sngFont2 = ((varNewHeight * .Font.Size) /
lngOriginalHeight)
If blnMinimumOrAverageFontSize Then
.Font.Size = (IIf(sngFont1 <= sngFont2, sngFont1,
sngFont2) + (Abs(sngFont1 - sngFont2) / 2))
Else
.Font.Size = IIf(sngFont1 <= sngFont2, sngFont1,
sngFont2)
End If
sngFont1 = ((varNewWidth * .FontSize) /
lngOriginalWidth)
sngFont2 = ((varNewHeight * .FontSize) /
lngOriginalHeight)
If blnMinimumOrAverageFontSize Then
.FontSize = (IIf(sngFont1 <= sngFont2, sngFont1,
sngFont2) + (Abs(sngFont1 - sngFont2) / 2))
Else
.FontSize = IIf(sngFont1 <= sngFont2, sngFont1,
sngFont2)
End If
.Height = ((varNewHeight * .Height) / lngOriginalHeight)
.Left = ((varNewWidth * .Left) / lngOriginalWidth)
.Top = ((varNewHeight * .Top) / lngOriginalHeight)
.Width = ((varNewWidth * .Width) / lngOriginalWidth)
On Error GoTo 0
End With
Next
End With
End Sub
_____
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Ave Fénix
Sent: Saturday, July 07, 2007 12:13 AM
To: vbusers List Member
Subject: [vbusers] RE: [vbusers] RE: [vbusers] Re: Tamaños del forma
Aunque no recuerdo la funcionalidad que describió Cristian, el MZTools
lo encontrás en: www.mztools.com
Suerte.
_____
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Cristian
C. Bittel
Sent: Friday, July 06, 2007 5:24 PM
To: vbusers List Member
Subject: [vbusers] RE: [vbusers] Re: Tamaños del forma
Beto, hay un Add-In FREE para VB6 q se llama MZTools. No sé dónde lo podrás
conseguir y yo no lo tengo en su configuración original
Bueno, este Add-In tiene una opción de integrar a tu aplicación unos módulos
que hacen eso que vos querés. Sirve sólo con pantallas simples, con
controles complejos se confunde un poco, pero funciona!
Buscalo con Google seguro lo encontrás.
Cristian.
_____
De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Beto
Carranza
Enviado el: Viernes, 06 de Julio de 2007 15:50
Para: vbusers List Member
Asunto: [vbusers] Re: Tamaños del forma
Muchas gracias Cesar,
El problema que tengo es que lo que necesito es que me posicione todos los
botones, texts, etc en una posición similar a la que diseño yo, pero en otra
resolución mas chica.
Yo ya tengo los forms diseñados, y lo que me pasa es esto:
Pantalla 1024x768: Pantalla
800x600:
__________________________________ _______________________
| | |
|
| | |
|
| | |
| | | |
|
| | |
|
| |
|______________________|
| |
| textbox |
textbox
|_________________________________|
Osea lo que necesitaría, que no se si se puede, es que aparte de achicarme
el form, me posicione los componentes insertados.
Saludos, y gracias denuevo,
Beto.
2007/7/5, César Daniel Falchi <[EMAIL PROTECTED]>:
Beto, probá esta rutina, ponela en el form - activate.
César.
'Tamaño del area de trabajo (Ancho x Alto)
'Altura de la pantalla
h = Screen.Height / Screen.TwipsPerPixelY
'Ancho de la pantalla
w = Screen.Width / Screen.TwipsPerPixelX
'REsolucion 800 x 600
If h = 600 And w = 600 Or h = 600 And w = 800 Then
If Me.Width > 12090 Or Me.Width < 12090 Or Me.WindowState = 2 Or
Me.Height > 8670 Or Me.Height < 8670 Then
Me.WindowState = 0
Me.Height = 9000
Me.Width = 12000
Me.Top = 0
Me.Left = 0
End If
End If
'Resolución 1024 x 768
'If h = 768 And w = 1024 Or h = 864 And w = 1152 Then
If h = 768 And w = 768 Or h = 768 And w = 1024 Then
If Me.Width > 12090 Or Me.Width < 12090 Or Me.WindowState = 2 Or
Me.Height > 9930 Or Me.Height < 9930 Then
Me.WindowState = 0
Me.Height = 9000 '9930
Me.Width = 12000
Me.Top = 1200
Me.Left = 1800
End If
End If
'Resolución 1024 x 1280
'If h = 1280 And w =1024 Or h = 864 And w = 1152 Then
If h = 1024 And w = 1024 Or h = 1024 And w = 1024 Then
If Me.Width > 12090 Or Me.Width < 12090 Or Me.WindowState = 2 Or
Me.Height > 9930 Or Me.Height < 9930 Then
Me.WindowState = 0
Me.Height = 9000 '9930
Me.Width = 12000
Me.Top = 2800
Me.Left = 3600
End If
End If
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.476 / Virus Database: 269.10.1/888 - Release Date: 06/07/2007
06:36
__________ NOD32 2383 (20070706) Information __________
This message was checked by NOD32 antivirus system.
http://www.eset.com
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.5.476 / Virus Database: 269.10.1/888 - Release Date: 06/07/2007
06:36
_____________ NOD32 EMON 2383 (20070706) information _____________
This message was checked by NOD32 antivirus system
http://www.eset.com
_____________ NOD32 EMON 2383 (20070706) information _____________
This message was checked by NOD32 antivirus system
http://www.eset.com
__________ NOD32 2383 (20070706) Information __________
This message was checked by NOD32 antivirus system.
http://www.eset.com
_____________ NOD32 EMON 2383 (20070706) information _____________
This message was checked by NOD32 antivirus system
http://www.eset.com
_____________ NOD32 EMON 2387 (20070710) information _____________
This message was checked by NOD32 antivirus system
http://www.eset.com