Hola, yo utilizo está funcion a la que llamo desde el init del form para ajustar según resolución del monitor del cliente... también ajusta el tamaño de la fuente... a mi me va bien...
tienes variables como oapp.incremento_fuente,oapp.oapp.coeficiente,oapp.coeficiente1 que calculo al inicio de mi aplicación suponiendo que mis formularios fueron diseñados para 1024*768 pues hago algo asi:
OAPP.COEFICIENTE=(SYSMETRIC(1)/1024)
oapp.coeficiente1=(SYSMETRIC(2)/768)
IF SYSMETRIC(1)/SYSMETRIC(2) > 1.59 && es monitor 16:9 o 16:10
OAPP.COEFICIENTE=oapp.coeficiente1
endif
DO case
CASE OAPP.coeficiente>=1.28 OR OAPP.coeficiente<1.44
OAPP.INCREMENTO_FUENTE=1
CASE OAPP.coeficiente>=1.44 OR OAPP.coeficiente<=1.60
OAPP.INCREMENTO_FUENTE=2
CASE OAPP.coeficiente>1.60 OR OAPP.coeficiente<2.0
OAPP.INCREMENTO_FUENTE=3
CASE OAPP.coeficiente>=2.0 OR OAPP.coeficiente<2.4
OAPP.INCREMENTO_FUENTE=4
CASE OAPP.coeficiente>2.4
OAPP.INCREMENTO_FUENTE=5
ENDCASE
Tambien puedes poner esos valores en el init y luego cambiarlos según la máquina... en fin espero te sirva... como te he dicho a mi me escala bien...
PROCEDURE cambiar_tamaño
LPARAMETERS oObject
local nOBJETOS,nT,cOBJETOS
LOCAL loCol AS Collection
IF oapp.cambiar_tamaño
IF oapp.coeficiente!=1
IF UPPER(oObject.Baseclass)="FORM"
oObject.LockScreen=.T.
IF oObject.WindowState!=2 && si no maximizada
oObject.Width=INT(oObject.Width*oapp.coeficiente)
oObject.Height=INT(oObject.Height*oapp.coeficiente1)
ENDIF
ENDIF
IF VARTYPE(oObject.fontsize)="N"
oObject.FONTSIZE=oObject.FONTSIZE+oapp.incremento_fuente
ENDIF
loCol = CREATEOBJECT('collection')
nOBJETOS=0
nOBJETOS=COBJECTS(loCol, oObject)
cOBJETOS=""
FOR nT=1 TO nOBJETOS
IF VARTYPE(loCol(nT)) = "O"
IF VARTYPE( loCol(nT).FONTSIZE ) = "N" AND UPPER(loCol(nT).baseclass)!="GRID"
loCol(nT).FONTSIZE=loCol(nT).FONTSIZE+oapp.incremento_fuente
ENDIF
IF VARTYPE(loCol(nT).WIDTH) = "N"
loCol(nT).WIDTH=round(loCol(nT).WIDTH*oapp.coeficiente,8)
ENDIF
IF VARTYPE(loCol(nT).TOP) = "N"
loCol(nT).Top=round(loCol(nT).Top*oapp.coeficiente1,8)
ENDIF
IF VARTYPE(loCol(nT).LEFT) = "N"
loCol(nT).left=round(loCol(nT).left*oapp.coeficiente,8)
ENDIF
IF VARTYPE(loCol(nT).HEIGHT) = "N"
loCol(nT).Height=round(loCol(nT).Height*oapp.coeficiente1,8)
ENDIF
IF VARTYPE(loCol(nT).ROWHEIGHT) = "N"
loCol(nT).RowHeight=round(loCol(nT).RowHeight*oapp.coeficiente1,8)
ENDIF
IF VARTYPE(loCol(nT).HEADERHEIGHT) = "N"
loCol(nT).HeaderHeight=round(loCol(nT).HeaderHeight*oapp.coeficiente1,8)
ENDIF
IF VARTYPE(loCol(nT).BORDERWIDTH) = "N" AND UPPER(loCol(nT).baseclass)!="PAGEFRAME"
loCol(nT).BorderWidth=round(loCol(nT).BorderWidth*oapp.coeficiente,8)
ENDIF
ENDIF
ENDFOR
IF UPPER(oObject.Baseclass)="FORM"
oObject.AutoCenter=.T.
oObject.LockScreen=.F.
ENDIF
ENDIF
ENDIF
ENDPROC