Manuel,
Haz un copiar pegar del c贸digo de la siguiente funci贸n, la compilas y la aplicas a una ventana. Juega con ella. Hay mucho comentario, elim铆nalo para facilitar la lectura.
En ese foro si buscas encontrar谩s incluso la manera de cambiar el tama帽o de oFont usado (yo no lo necesit茅).
/ ******** /
Include "FiveWin.ch"
/*
Los par谩metros recibidos son:
lAutoresize: permite prescindir de la funcionalidad de esta funci贸n; permitiendo
de esta manera que la aplicaci贸n pueda tener un flag que
permita/deniegue el autoredimensionado de las pantallas. 03/03/2006.
nWhatSize: permite forzar el redimensionamiento a unos valores concretos;
permitiendo de esta manera que la aplicaci贸n pueda tener un valor
al cual redimensionar las pantallas. 03/03/2006.
oWnd: Objeto/ventana/di谩logo/control a ser redimensionado.
nResolution: N煤mero que identifica que resoluci贸n ten铆a la pantalla en la cual
se dise帽贸 el objeto.
Este valor puede ser negativo, hecho que se interpretar谩 como que
la ventana ya ha estado redimensionada previamente y se pretende
redimensionarla a su valor original. Esta caracter铆stica es 煤til
para provocar que un control (o ventana/dialogo) concreto se le
devuelva su tama帽o original seg煤n su valor de dise帽o. 03/03/2006
lRepaint: Indicador de si debe repintarse el objeto una vez redimensionado.
Esta funci贸n permitir谩 que una aplicaci贸n desarrolada en un PC con una resoluci贸n
de pantalla de por ejemplo 1024 x 768 (nResolution valdr铆a en este caso 3), se vea
redimensionada proporcionalmente en un PC con una resoluci贸n diferente, ya sea mayor
o menor.
A falta de perfeccionar el c贸digo, se comprueba solamente la variaci贸n de la anchura
de la resoluci贸n de la pantalla para aplicar la variaci贸n del tama帽o, aunque cuando
ello se realiza se hace tanto en la anchura como en la altura.
Ahora se comprueba la altura. 09/12/2005.
Esta funci贸n est谩 orientada a ser utilizada en el evento ON INIT del ACTIVATE
de las WINDOW y DIALOG con un valor fijo de lRepaint a .T. o sin 茅l.
Adem谩s tambi茅n puede utilizarse directamente sobre un control definido posteriormente
a la ACTIVACI脫N de su contenedor ya sea 茅ste WINDOW o DIALOG, con la salvedad que
lRepaint debe valer .T. para forzar su repintado.
Ejemplos de uso:
-* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -*
Se redimensiona toda la ventana oWnd y sus controles.
ACTIVATE oWnd ON INIT AutoResiz( .T., 0, oWnd, 3 )
-* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -*
Se redimensiona todo el dialogo oDlg y sus controles. Adem谩s se fuerza que el control
oMyMulGet se redimensione como si la resoluci贸n de pantalla fuera del tipo 2.
ACTIVATE oDlg ON INIT AutoResiz( .T., 0, oWnd, 3 )
AutResiz( .T., 2, oMyMulGet, 0)
-* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -*
Se redimensiona el control oTabs.
@ 185.50,8.00 TABS oTabs OF oWnd ITEMS "Tab1","Tab2","Venga a ordenarrrrr!!" ;
PIXEL COLORS CLR_BLUE,CLR_HCYAN SIZE 288.00,9.00 MESSAGE "Mensaje del Tabs"
AutoResiz( .T., 0, oTabs, 3, .T. )
-* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -*
*/
FUNCTION AutResiz( lAutoresize, nWhatSize, oWnd, nResolution, lRepaint )
// Resoluci贸n de la pantalla en el momento de definir los controles.
Local nOriWidth, nOriHeight
// Lo normal ser铆a que fuera la resoluci贸n actual de la pantalla (nWhatSize=0).
// Se permite forzar esta resoluci贸n mediante el valor de nWhatSize=1,2,3,4,5,6,7,....
Local nWidth, nHeight
// Son la relaci贸n entre la resoluci贸n de pantalla y la resoluci贸n de dise帽o.
Local nFactorWitdh, nFactorHeight
Local nContador
DEFAULT lRepaint := .T.
nOriWidth := 0
nOriHeight := 0
nWidth := 0
nHeight := 0
nContador := 0
If ABS(nResolution) = 1
nOriWidth := 640
nOriHeight := 480
ElseIf ABS(nResolution) = 2
nOriWidth := 800
nOriHeight := 600
ElseIf ABS(nResolution) = 3
nOriWidth := 1024
nOriHeight := 768
ElseIf ABS(nResolution) = 4
nOriWidth := 1152
nOriHeight := 864
ElseIf ABS(nResolution) = 5
nOriWidth := 1280
nOriHeight := 800
ElseIf ABS(nResolution) = 6
nOriWidth := 1280
nOriHeight := 1024
ElseIf ABS(nResolution) = 7
nOriWidth := 1600
nOriHeight := 1200
ElseIf ABS(nResolution) = 8
nOriWidth := 768
nOriHeight := 1024
Else
ScrResolution( @nOriWidth, @nOriHeight )
Endif
//If nWhatSize = 0
// ScrResolution( @nWidth, @nHeight )
//ElseIf nWhatSize = 1
If nWhatSize = 1
nWidth := 640
nHeight := 480
ElseIf nWhatSize = 2
nWidth := 800
nHeight := 600
ElseIf nWhatSize = 3
nWidth := 1024
nHeight := 768
ElseIf nWhatSize = 4
nWidth := 1152
nHeight := 864
ElseIf nWhatSize = 5
nWidth := 1280
nHeight := 800
ElseIf nWhatSize = 6
nWidth := 1280
nHeight := 1024
ElseIf nWhatSize = 7
nWidth := 1600
nHeight := 1200
ElseIf nWhatSize = 8
nWidth := 768
nHeight := 1024
Else
ScrResolution( @nWidth, @nHeight )
/*
If oWnd:ClassName() = "TMDICHILD"
nWidth := oWnd:oWnd:nRight - oWnd:oWnd:nLeft - 10
nHeight := oWnd:oWnd:nBottom - oWnd:oWnd:nTop - 0
ElseIf oWnd:oWnd:ClassName() = "TMDICHILD"
nWidth := oWnd:oWnd:oWnd:nRight - oWnd:oWnd:oWnd:nLeft - 10
nHeight := oWnd:oWnd:oWnd:nBottom - oWnd:oWnd:oWnd:nTop - 0
Else
ScrResolution( @nWidth, @nHeight )
EndIf
//ScrResolution( @nWidth, @nHeight )
*/
Endif
//ScrResolution( @nWidth, @nHeight )
/*
Traza( 1, "nOriWidth=", nOriWidth )
Traza( 1, "nOriHeight=", nOriHeight )
Traza( 1, "nWidth=", nWidth )
Traza( 1, "nHeight=", nHeight )
*/
//Traza( 1, "oWnd:ClassName()=", oWnd:ClassName() )
//If nOriWidth != nWidth // .or.
If lAutoresize .and. nOriHeight != nHeight
/* Este ser谩 el caso habitual, en el cual se pretende redimensionar
los controles a la resoluci贸n de la pantalla en la cual se estan
viendo. 01/03/2006 */
If nResolution > 0
nFactorWitdh := nWidth / nOriWidth
nFactorHeight := nHeight / nOriHeight
/* Este ser谩 el caso en el cual se pretende deshacer el redimensionamiento
de los controles realizado previamente. */
ElseIf nResolution < 0
nFactorWitdh := nOriWidth / nWidth
nFactorHeight := nOriHeight / nHeight
EndIf
//oWnd:CoorsUpdate()
If lRepaint
oWnd:Hide()
EndIf
//If nFactorWitdh > 1 // .or.
If nFactorHeight > 1
//Traza( 1, "Aumentando tama帽o." )
If oWnd:ClassName() == "kalimeroquetequiero"
ElseIf oWnd:ClassName() $ "/TJ02LISMN/TLISTBOX/"
/ Traza( 1, "oWnd:nTop=", oWnd:nTop )
Traza( 1, "oWnd:nLeft=", oWnd:nLeft )
Traza( 1, "oWnd:nWidth=", oWnd:nWidth )
Traza( 1, "oWnd:nHeight=", oWnd:nHeight )
/
oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
oWnd:nWidth * nFactorWitdh, ;
oWnd:nHeight , ;
.F. )
Else
oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
oWnd:nWidth * nFactorWitdh, ;
oWnd:nHeight * nFactorHeight , ;
.F. )
EndIf
EndIf
If oWnd:ClassName() == "TFOLDER"
// Traza( 1, "ValType(oWnd:aDialogs)=", ValType(oWnd:aDialogs) )
If ValType( oWnd:aDialogs ) = "A"
For nContador := 1 To Len( oWnd:aDialogs )
AutResiz( lAutoresize, nWhatSize, oWnd:aDialogs[nContador], nResolution, .F. )
EndFor
EndIf
Else
// Traza( 1, "ValType(oWnd:aControls)=", ValType(oWnd:aControls) )
If ValType( oWnd:aControls ) = "A"
For nContador := 1 To Len( oWnd:aControls )
AutResiz( lAutoresize, nWhatSize, oWnd:aControls[nContador], nResolution, .F. )
EndFor
EndIf
EndIf
//If nFactorWitdh < 1 // .or.
If nFactorHeight < 1
//Traza( 1, "Disminuyendo tama帽o." )
If oWnd:ClassName() == "kalimeroquetequiero"
ElseIf oWnd:ClassName() $ "/TJ02LISMN/TLISTBOX/"
/ Traza( 1, "oWnd:nTop=", oWnd:nTop )
Traza( 1, "oWnd:nLeft=", oWnd:nLeft )
Traza( 1, "oWnd:nWidth=", oWnd:nWidth )
Traza( 1, "oWnd:nHeight=", oWnd:nHeight )
/
//Traza( 1, "oWnd:nRight=", oWnd:nRight )
//Traza( 1, "oWnd:nBottom=", oWnd:nBottom )
oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
oWnd:nWidth * nFactorWitdh, ;
oWnd:nHeight , ;
.F. )
//oWnd:SetSize( oWnd:nWidth * nFactorWitdh, oWnd:nHeight * nFactorHeight, .T. )
/ Traza( 1, "oWnd:nTop=", oWnd:nTop )
Traza( 1, "oWnd:nLeft=", oWnd:nLeft )
Traza( 1, "oWnd:nWidth=", oWnd:nWidth )
Traza( 1, "oWnd:nHeight=", oWnd:nHeight )
/
Else
oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
oWnd:nWidth * nFactorWitdh, ;
oWnd:nHeight * nFactorHeight , ;
.F. )
EndIf
EndIf
If lRepaint
oWnd:Show()
EndIf
EndIf
Return Nil
/ ******** /