PDA

Ver la Versión Completa : Establecer mi programa de 1024x768


mantraxer21
18-02-2011, 15:50:22
Estimaados:

Quiero dejar mi aplicación para que funcione de 1024x768, de lo contrario enviar un mensaje al usuario para informar dicha resolución de trabajo.

He leido algo por ahi referente a los "Const"

const
RESOLUCION_HORIZONTAL: LongInt = 1024;
RESOLUCION_VERTICAL: LongInt = 768;

Y de Screen.Width y de Screen.Height

pero no me ha resultado mucho que digamos .


Saludos Cordiales

defcon1_es
18-02-2011, 16:53:12
Hola, puedes forzar la resolución de tu programa, sin necesidad de informar al usuario.


unit Varios;

var
Resoriginal: TDevMode; //Variable Global, para restaurar la resolución al cerrar la aplicacion
Resolucion_Horizontal, Resolucion_Vertical: Cardinal; //Variables para cargar la resolucion actual

...

procedure ComprobarResolucion(Restaurar: Boolean);
var NuevaRes:TDevMode;
begin
if (Resolucion_Horizontal <> 0) and (Resolucion_Vertical <> 0)
then begin
if Restaurar
then begin
Windows.ChangeDisplaySettings(Resoriginal, CDS_UPDATEREGISTRY);
end
else begin
// Añadido para la resolución
// Guarda la resolución actual
Windows.EnumDisplaySettings(Nil, Cardinal(-1), NuevaRes);
// Si la resolución es diferente de 1024x768, la cambia
If ( NuevaRes.dmpelsWidth <> Cardinal(Resolucion_Horizontal) ) or
( NuevaRes.dmpelsheight <> Cardinal(Resolucion_Vertical) )
then begin
Windows.EnumDisplaySettings(Nil, Cardinal(-1), NuevaRes);
NuevaRes.dmpelsWidth := Resolucion_Horizontal;
NuevaRes.dmPelsHeight := Resolucion_Vertical;
if Windows.ChangeDisplaySettings(NuevaRes, CDS_UPDATEREGISTRY) <> 0
then begin
Resolucion_Horizontal := Resoriginal.dmpelsWidth;
Resolucion_Vertical := Resoriginal.dmPelsHeight;
Windows.ChangeDisplaySettings(Resoriginal, CDS_UPDATEREGISTRY);
end;
end;
end;
end
else begin
Resolucion_Horizontal := Resoriginal.dmpelsWidth;
Resolucion_Vertical := Resoriginal.dmPelsHeight;
end;
end;

defcon1_es
18-02-2011, 16:57:30
Se me olvidó poner que en el Create de tu aplicación debes poner el código:

// Guarda la resolución original de windows antes forzarla a la que queramos
Windows.EnumDisplaySettings(Nil, Cardinal(-1), Varios.ResOriginal);
Para guardar la resolución de windows antes de forzarla, y restaurarla al salir de tu programa.

newtron
18-02-2011, 17:03:46
Yo lo que hago cuando necesito una resolución determinada es lo siguiente:

1º capturo la resolución actual

AnchoOriginal := GetSystemMetrics(SM_CXSCREEN);
AlturaOriginal := GetSystemMetrics(SM_CYSCREEN);

2º fuerzo la resolución a 1024x768

If (GetSystemMetrics(SM_CXSCREEN)<>1024) or (GetSystemMetrics(SM_CYSCREEN)<>768) then
SetScreenResolution(1024,768);

3º al cerrar lo dejo como estaba

SetScreenResolution(AnchoOriginal, AlturaOriginal);

Saludos