¿Alguien sabe como cambiar la resolución de pantalla en visual foxpro? Encontré un ejemplo en el cual me cambia la resolución de 1024x768 a 800x600, pero al intentar restaurar mi resolución inicial no lo hace. El ejemplo es el "00000008.zip", no se si alguien ya lo vio y pudo detectarle el error. Si tienen otra manera de realizar dicho cambio de resolución.
Te paso un código que encontré hace tiempo. Lamentablemente no recuerdo el autor. *!* sintaxis changeres(tnwidth, tnheight) do case case sysmetric(1)=640 and sysmetric(2)=480 lancho=sysmetric(1) lalto =sysmetric(2) case sysmetric(1)=800 and sysmetric(2)=600 lancho=sysmetric(1) lalto =sysmetric(2) case sysmetric(1)=1024 and sysmetric(2)=768 lancho=sysmetric(1) lalto =sysmetric(2) case sysmetric(1)=1280 and sysmetric(2)=1024 lancho=sysmetric(1) lalto =sysmetric(2) otherwise messagebox([la resolucion del monitor es desconocida]) Endcase changeres(800,600) messagebox([la resolucion fue cambiada a 800 * 600 pixeles]) changeres(lancho,lalto) messagebox([la resolucion fue retornada a su modo original ]+alltrim(str(lancho))+[ * ]+alltrim(str(lalto))+[ pixeles]) *!* valor devuelto: llretval *!* argumentos: tnwidth, tnheight *!* tnwidth especifica la nueva anchura de la pantalla en pixels *!* tnheight especifica la nueva altura de la pantalla en pixels function changeres lparameters tnwidth, tnheight local lnwidth, lnheight, lnmodenum, lcdevmode *!* valores lnmodenum = 0 lcdevmode = replicate(chr(0), 156) lnwidth = iif(empty(tnwidth), 800, tnwidth) lnheight = iif(empty(tnheight), 600, tnheight) *!* instrucciones declare dll para cambiar resolución declare integer enumdisplaysettings in win32api string lpszdevicename, integer imodenum, string @lpdevmode declare integer changedisplaysettings in win32api string @lpdevmode , integer dwflags *!* bucle para obtener todos los modos disponibles do while enumdisplaysettings(null, lnmodenum, @lcdevmode) <> 0 lnmodenum = lnmodenum +1 enddo *!* configurar la structura devmode lcdevmode = stuff(lcdevmode, 41, 4, longtostr(1572864)) lcdevmode = stuff(lcdevmode, 109, 4, longtostr(tnwidth)) && ancho lcdevmode = stuff(lcdevmode, 113, 4, longtostr(tnheight)) && alto *!* cambiar resolucion changedisplaysettings(@lcdevmode, 1) endfunc *!* 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 function longtostr lparameters lnlongval 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 No sé que estabas usando vos, pero a mí esto me anduvo perfectamente.
Bueno Maxisis Antes que nada quiero agradecer tu buena predisposición. Te comento que lo que no tengo son las DLL. No se si podes facilitármelas. Muchas gracias Eduardo
Disculpas. En el código que te pasé hay un error. La DLL no es win32api, cambiala por user32. Suerte.
Maxisis Quiero comentarte que intente con la DLL que me comentaste y no tuve suerte. Disculpa mi tardanza en responderte pero me surgió un inconveniente. Muchas gracias.
Esto que te pasé lo estoy probando ahora mismo y funciona perfectamente. Es más, la probé definiendo la DLL como win32api y como user32 y funciona de ambas formas. Hay que ver que falla te está dando y en qué punto del código. ¿Podes darme más información del error que se genera? ¿O no se genera error? Otra causa (no la comprobé) puede llegar a ser falta de permisos administrativos o versión de sistema operativo. Pásame toda la información adicional que puedas.
Maxisis Quiero comentarte que intente con ambas DLL y tampoco tuve suerte. Me abocaron a una nueva tarea que me esta demandando mucho tiempo por eso tome la decisión de finalizar mi pregunta para no tenerte esperando con mi respuesta. Me gustaría decirte que una vez más tranquilo con mi trabajo, quisiera retomar el tema con más tiempo si no te resulta molesto. Desde ya quiero que sepas que agradezco mucho tu colaboración. Eduardo