Francisco Horta wrote:Hola foro,
se que en alguna ocasion se toco el temo, pero lo encontre..
Tengo dialogos dise帽ados para una resolucion de 800x600 pero si mi resolucion es mayo quiero que el dialogo se ajuste al tama帽o nuevo de resolucion incluyendo controles, sera posible?
gracias
Paco
Yo utilizo esta funci贸n:
/* ******************** */
#Include "FiveWin.ch"
/*
Los par谩metros recibidos son:
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.
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.
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:
-* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -*
ACTIVATE oWnd ON INIT AutoResize( oWnd, 3 )
-* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -*
@ 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"
AutoResize( oTabs, 3, .T. )
-* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -*
*/
FUNCTION AutResiz( oWnd, nResolution, lRepaint )
// Resoluci贸n de la pantalla en el momento de definir los controles.
Local nOriWidth, nOriHeight
// Resoluci贸n actual de la pantalla.
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 nResolution = 1
nOriWidth := 640
nOriHeight := 480
ElseIf nResolution = 2
nOriWidth := 800
nOriHeight := 600
ElseIf nResolution = 3
nOriWidth := 1024
nOriHeight := 768
ElseIf nResolution = 4
nOriWidth := 1152
nOriHeight := 864
ElseIf nResolution = 5
nOriWidth := 1280
nOriHeight := 1024
ElseIf nResolution = 6
nOriWidth := 1600
nOriHeight := 1200
Else
ScrResolution( @nOriWidth, @nOriHeight )
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. nOriHeight != nHeight
nFactorWitdh := nWidth / nOriWidth
nFactorHeight := nHeight / nOriHeight
//oWnd:CoorsUpdate()
If lRepaint
oWnd:Hide()
EndIf
If nFactorWitdh > 1 // .or. 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( 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( oWnd:aControls[nContador], nResolution, .F. )
EndFor
EndIf
EndIf
If nFactorWitdh < 1 // .or. 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
/* ******************** */
Saludos
Carlos G.