RE:Adaptar aplicativo a cualquier monitor
Con esto podes saber la resolucion actual de la pc y cambiarla a la que vos quieras. El problema esta en que la pc soporte la resolucion que vos le pongas. Te recomiendo que programes en una resolucion mas o mendo estandar como 1024x768 que es mas probable que la mayoria la tenga.
Suerte
Declare Integer GetSystemMetrics In Win32API Integer nIndex && resolucion pantalla
Declare Integer EnumDisplaySettings In Win32API STRING lpszDeviceName, INTEGER iModeNum, STRING @lpDevMode
Declare Integer ChangeDisplaySettings In Win32API STRING @lpDevMode , INTEGER dwFlags
Function GetScreenResolution()
Local cWidth As String, cHeight As String
cWidth = GetSystemMetrics(0)
cHeight = GetSystemMetrics(1)
Return Alltrim(Str(cHeight)) + " x " + Alltrim(Str(cWidth))
EndFunc
Function Dimensiones
#DEFINE h_screenwidth 0 && Screen width
#DEFINE h_screenheight 1 && Screen HEIGHT
Local lnalto_screen, lnancho_screen
lnalto_screen = getsystemmetrics(h_screenheight)
lnancho_screen = getsystemmetrics(h_screenwidth)
If ( lnalto_screen < 768 OR lnancho_screen < 1024 )
If MessageBox("Es recomendable que la resolución "+Chr(13)+;
"de su monitor sea de 1024 x 768"+Chr(13)+"Para que el sistema se ejecute adecuadamente"+Chr(13)+Chr(13)+;
"¿ Desea cambiarla ?",4+32+0,"Verifique pregunta" ) = 6
Return .T.
Else
Return .F.
EndIf
Else
Return .F.
EndIf
#undefine h_screenwidth
#undefine h_screenheight
EndFunc
Function Cambiar_Resolucion
Lparameters tnwidth, tnheight
Local lnwidth, lnheight, lnmodenum, lcdevmode, lnresp
lnmodenum = 0
lcdevmode = Replicate(Chr(0), 156)
lnwidth = Iif(Empty(tnwidth), 800, tnwidth)
lnheight = Iif(Empty(tnheight), 600, tnheight)
*!* Se usa obtener todos los modos disponibles
Do While EnumDisplaySettings(NULL, lnmodenum, @lcdevmode) <> 0
lnmodenum = lnmodenum + 1
ENDDO
lcdevmode = Stuff(lcdevmode, 41, 4, long2str(1572864))
lcdevmode = Stuff(lcdevmode, 109, 4, long2str(tnwidth)) && Ancho
lcdevmode = Stuff(lcdevmode, 113, 4, long2str(tnheight)) && Alto
lnresp = ChangeDisplaySettings(@lcdevmode, 1)
If lnresp = 0
*MessageBox("La resolución de su monitor ha sido cambiada"+Chr(13)+;
"Ahora podra trabajar adecuamente",0+48+0,"atención" )
Return .T.
Else
*MessageBox("No se pudo cambiar la resolución de su monitor",0+48+0,"atención" )
Return .F.
EndIf
EndFunc
Function long2str
Lparameters lnlongval
*!* Convierte un long integer a un 4-byte character string
*!* Sintaxis: LongToStr(lnLongVal)
*!* Valor devuelto: lcRetStr
*!* Argumentos: lnLongVal
*!* lnLongVal especifica el long integer a convertir
Local lncnt, lcretstr
lcretstr = ''
For lncnt = 24 To 0 Step -8
lcretstr = Chr(Int(lnlongval/(2^lncnt))) + lcretstr
lnlongval = Mod(lnlongval, (2^lncnt))
Next
Return lcretstr
EndFunc