Page 1 of 1

Resolucion en pantalla

Posted: Thu Aug 13, 2015 9:54 am
by Loren
Compañeros, buenos días:

Tengo un software diseñado y optimizado para una resolucion de 1024x768, donde fundamentalmente utiliza ventanas Dialogs y no Windows, desde recurso diseñados con Pelles C.

El caso es que tengo algunos usuarios que al cambiar de resolución en sus equipos (a letra más grande 125%, por falta de visión) o simplemente otra resolución (640x480), los buttons de los dialogs se esconden y desaparecen en pantalla por lo que es inoperativo el funcionamiento del programa.

He visto que los programas más comerciales diseñados por empresa muy potentes se adaptan a las nuevas configuraciones de pantalla.
La solución NO sería insertar un msginfo al principio del programa advirtiendo al usuario que cambie de resolución.
¿ Existe alguna rutina que pueda incorporar a mi software para cambiar el tamaño de los dialogs en tiempo de ejecución?

Mil gracias.
Un saludo a todos
Desde Cádiz, ESpaña

Re: Resolucion en pantalla

Posted: Thu Aug 13, 2015 10:40 am
by AngelSalom
Mira este hilo http://forums.fivetechsupport.com/viewt ... isplay+prg , concretamente la función DISPLAY.PRG

Re: Resolucion en pantalla

Posted: Thu Aug 13, 2015 1:25 pm
by russimicro

Buen día.. Esta función la obtuve de este foro y me funciona muy bien

AjustaResolucion() // al inicio de la aplicacion

FUNCTION AjustaResolucion()

LOCAL nResoAncho := GetSysMetrics(0)

IF nResoAncho > 1024
CamReso ( 1024, 768)
ENDIf

RETURN nil

//*****************************************************************

Function CamReso(nAncho, nAlto)

Local DM_PELSWIDTH := nHex("80000")
Local DM_PELSHEIGHT := nHex("100000")

//Local DM_PELSWIDTH := nHex("100000")
//Local DM_PELSHEIGHT := nHex("160000")

Local oDevMode
Local lPosible
Local cBuffer
Local lCamReso := .f.
DEFAULT nAncho := GetSysMetrics(0), ;
nAlto := GetSysMetrics(1)

STRUCT oDevMode
MEMBER cDevName AS STRING LEN 32
MEMBER nSpecVer AS WORD
MEMBER nDrvVer AS WORD
MEMBER nSize AS WORD
MEMBER nDrvExtra AS WORD
MEMBER nFields AS DWORD
MEMBER nOrientat AS WORD
MEMBER nPaperSiz AS WORD
MEMBER nPaperLen AS WORD
MEMBER nPaperWid AS WORD
MEMBER nScale AS WORD
MEMBER nCopies AS WORD
MEMBER nDefSrc AS WORD
MEMBER nPrnQlty AS WORD
MEMBER nColor AS WORD
MEMBER nDuplex AS WORD
MEMBER nYResolut AS WORD
MEMBER nTTOpt AS WORD
MEMBER nCollate AS WORD
MEMBER cFormName AS STRING LEN 32
MEMBER nUnusePad AS WORD
MEMBER nBitsPPel AS DWORD
MEMBER nPelWidth AS DWORD
MEMBER nPelHeigh AS DWORD
MEMBER nDisFlags AS DWORD
MEMBER nDisFreq AS DWORD
ENDSTRUCT

cBuffer := oDevMode:cBuffer
lPosible := EnumDisplaySettings(0, 0, @cBuffer)
IF lPosible
oDevMode:nFields := nOr(DM_PELSWIDTH, DM_PELSHEIGHT )
oDevMode:nPelWidth := nAncho
oDevMode:nPelHeigh := nAlto
cBuffer:=oDevMode:cBuffer
TRY
ChangeDisplaySettings(@cBuffer, 4)
lCamReso := .T.
CATCH
MsgAlert("Modo no soportado", "Error" )
END
else
MsgAlert("Modo no soportado", "Error" )
endif
return lCamReso

DLL32 FUNCTION EnumDisplaySettings(lpszDeviceName AS DWORD,;
iModeNum AS DWORD, ;
@lpDevMode AS LPSTR) AS BOOL PASCAL;
FROM "EnumDisplaySettingsA" LIB "User32.dll"

DLL32 STATIC FUNCTION ChangeDisplaySettings(@lpDevMode AS LPSTR,;
dwFlags AS DWORD) AS DWORD PASCAL;
FROM "ChangeDisplaySettingsA" LIB "User32.dll"

DLL32 FUNCTION ExitWindowsEx(uFlags AS DWORD,;
dwReserved AS DWORD) AS DWORD PASCAL;
LIB "user32.dll"

//************************************************************************

Johnson Russi

Re: Resolucion en pantalla

Posted: Wed Sep 02, 2015 4:08 am
by Bayron
La mejor manera, es por codigo....

Tamaño del Font

Code: Select all

DEFINE FONT oFont1 NAME 'Verdana' ;
            SIZE 0 , ( 22 * ( Min ( oDIALOG:nWidth / 1680 , oDIALOG:nHeight / 1050 ) ) ) * nPorcentaje ;
            BOLD
Botones

Code: Select all

@ ( Cuadro1[1][1] + ( Btn1Height * 1 ) + 9 ) , ( Cuadro1[1][2] + ( Btn1Width * 0 ) +  8 ) ;
            BTNBMP oBtnF[ 1] OF oDIALOG ;
            SIZE ( Btn1Width - 4 ) , ( Btn1Height - 4 ) ;
            CENTER PIXEL ADJUST NOBORDER ;
            FONT oFont1 ;
            PROMPT "BOTON1"

https://www.youtube.com/watch?v=PVQpK-Eu7qo

Re: Resolucion en pantalla

Posted: Wed Sep 02, 2015 10:44 am
by pgfdz
Hola

El escalado de la fuente me parece una solución magnífica, sencilla y elegante. Muy bueno.

Saludos

Re: Resolucion en pantalla

Posted: Thu Sep 03, 2015 7:42 pm
by horacio
Byron, cual es el valor de nPorcentaje ? Gracias

Saludos

Re: Resolucion en pantalla

Posted: Wed Sep 09, 2015 2:11 am
by Bayron
nPorcentaje es un valor que se le asigna en un archivo .INI, para que pueda ser cambiado por el usuario, o puede almacenarce en una BD y tener una opcion de configuracion...

Yo lo hice de esta manera para resolver el problema del tamano de las pantallas.

Son demasiados controles, asi que de otra manera seria imposible...

https://www.youtube.com/watch?v=PVQpK-Eu7qo

Re: Resolucion en pantalla

Posted: Wed Sep 09, 2015 2:27 am
by Bayron
El proceso es sencillo

Hacer el diseño en una resolución especifica

Luego dividir la resolucion por la resolucion en que se diseñó

Multiplicar por el porcentaje que se desea ocupar en la pantalla

Hacer el diseño estilo WEB, pero sumando y restando valores...

Aqui una foto de cuando estaba diseñando todavia...

Image

Image