In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Cambiar la resoluci

Foro de Xailer profesional en español
Responder
josem
Mensajes: 20
Registrado: Sab May 17, 2008 9:35 am

Cambiar la resoluci

Mensaje por josem »

Como puedo cambiar la resolución del monitor de 1024 x 768 a 800 x 600,
desde una aplicación en Xailer.
El monitor lo tengo configurado en 1024 x 768, pero la aplicación esta
desarrollada para 800 x 600. Lo que quiero es que las ventanas ocupen el
100% de la pantalla y se escale automáticamente, o bien cambiando la
resolución del monitor, o inclemtando la resolcuión de la aplicación a la
que realmente tiene el monitor configurado.
He mirado la variable pública "screen", pero no puedo cambiar ningún valor
de ella, solamente consultar sus datos
Saludos
José Manuel Serrano
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Cambiar la resoluci

Mensaje por Bingen Ugaldebere »

Tendrás que adaptarlo a tu aplicación pero esto es lo que yo uso y
funciona 100%
METHOD ChangeResolution( oSender, nWidth, nHeight ) CLASS tApplication
WITH OBJECT TScreenResolution():New()
:nWidth := nWidth
:nHeight := nHeight
IF :Test() // Probamos si está soportada
IF :Set() // La ponemos
// Si hay que reiniciar, preguntamos al usuario
IF :lNeedRestart
If MsgYesNo(If(AppData:cOriginalLng="ESP",;
"Es sistema necesita reiniciarse para
aplicar el cambio de resolución",;
"The System needs to restart to applicate
resolution changes"))
RebootSystem()
ELSE
// Dejar como estaba al inicio de la aplicación
:Reset()
ENDIF
ENDIF
ELSE
MsgInfo( If(AppData:cOriginalLng="ESP",;
"No se ha podido cambiar la resolución.",;
"Resolution not changed" ) )
ENDIF
ELSE
MsgInfo( If(AppData:cOriginalLng="ESP",;
ToString(nWidth)+"x"+ToString(nHeight)+" pixel.
Resolución no soportada por el equipo." ,;
ToString(nWidth)+"x"+ToString(nHeight)+" pixel.
Resolution unsupported on this computer" ) )
ENDIF
END
RETURN Nil
CLASS TScreenResolution FROM XScreenResolution
ENDCLASS
CLASS XScreenResolution FROM TComponent
PUBLISHED:
PROPERTY nWidth INIT Screen:nWidth
PROPERTY nHeight INIT Screen:nHeight
PUBLIC:
DATA lNeedRestart INIT .F. READONLY
METHOD Test()
METHOD Set()
METHOD Reset()
ENDCLASS
METHOD Reset() CLASS XScreenResolution
::nWidth := Screen:nWidth
::nHeight := Screen:nHeight
::Set()
::lNeedRestart := .F.
RETURN Nil
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
static BOOL XScreenRes_Run( PHB_ITEM Self, BOOL bChange )
{
DEVMODE dm;
BOOL bSuccess = FALSE;
memset( &dm, 0, sizeof( DEVMODE ) );
dm.dmSize = sizeof( DEVMODE );
if( EnumDisplaySettings( NULL, 0, &dm ) )
{
LONG lAction;
dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
dm.dmPelsWidth = XA_ObjGetNL( Self, "nWidth" );
dm.dmPelsHeight = XA_ObjGetNL( Self, "nHeight" );
lAction = ChangeDisplaySettings( &dm, CDS_TEST );
XA_ObjSendL( Self, "_lNeedRestart", FALSE );
switch( lAction )
{
case DISP_CHANGE_RESTART:
XA_ObjSendL( Self, "_lNeedRestart", TRUE );
// No hay break intencionadamente
case DISP_CHANGE_SUCCESSFUL:
{
bSuccess = TRUE;
if( bChange )
ChangeDisplaySettings( &dm, CDS_UPDATEREGISTRY );
break;
}
}
}
return bSuccess;
}
XA_FUNC_STATIC( XSCREENRESOLUTION_TEST )
{
PHB_ITEM Self = hb_stackSelfItem();
hb_retl( XScreenRes_Run( Self, FALSE ) );
}
XA_FUNC_STATIC( XSCREENRESOLUTION_SET )
{
PHB_ITEM Self = hb_stackSelfItem();
hb_retl( XScreenRes_Run( Self, TRUE ) );
}
XA_FUNC( REBOOTSYSTEM )
{
ExitWindowsEx( EWX_REBOOT, 0 );
}
#pragma ENDDUMP
josem
Mensajes: 20
Registrado: Sab May 17, 2008 9:35 am

Cambiar la resoluci

Mensaje por josem »

Bingen, gracias por tu respuesta.
Llevo varios días intentando adaptarla función pero no lo consigo
Me dá arios errores en la compilación:
Me he creador un formulario: "fResolucionPantalla.prg"
Al compilar de me dá el error:
fResolucionPantalla.prg(23) Error E0010 'Class "tApplication" not declared
for method: ChangeResolution(oSender,nWidth,nHeight ) ; function
ChangeResolution(oSender,nWidth,nHeight ) ; local self := QSelf()'
y la tengo declarada al inicio.
Que se me está escapando?
Muchas gracias
Saludos
José Manuel Serrano
"Bingen Ugaldebere" <bingen@muninser.com> escribió en el mensaje
news:[email=45c72546@news.xailer.com...]45c72546@news.xailer.com...[/email]
> Tendrás que adaptarlo a tu aplicación pero esto es lo que yo uso y
> funciona 100%
>
> METHOD ChangeResolution( oSender, nWidth, nHeight ) CLASS tApplication
>
> WITH OBJECT TScreenResolution():New()
> :nWidth := nWidth
> :nHeight := nHeight
> IF :Test() // Probamos si está soportada
> IF :Set() // La ponemos
> // Si hay que reiniciar, preguntamos al usuario
> IF :lNeedRestart
> If MsgYesNo(If(AppData:cOriginalLng="ESP",;
> "Es sistema necesita reiniciarse para
> aplicar el cambio de resolución",;
> "The System needs to restart to applicate
> resolution changes"))
> RebootSystem()
> ELSE
> // Dejar como estaba al inicio de la aplicación
> :Reset()
> ENDIF
> ENDIF
> ELSE
> MsgInfo( If(AppData:cOriginalLng="ESP",;
> "No se ha podido cambiar la resolución.",;
> "Resolution not changed" ) )
> ENDIF
> ELSE
> MsgInfo( If(AppData:cOriginalLng="ESP",;
> ToString(nWidth)+"x"+ToString(nHeight)+" pixel.
> Resolución no soportada por el equipo." ,;
> ToString(nWidth)+"x"+ToString(nHeight)+" pixel.
> Resolution unsupported on this computer" ) )
> ENDIF
> END
>
> RETURN Nil
>
> CLASS TScreenResolution FROM XScreenResolution
> ENDCLASS
>
> CLASS XScreenResolution FROM TComponent
>
> PUBLISHED:
> PROPERTY nWidth INIT Screen:nWidth
> PROPERTY nHeight INIT Screen:nHeight
>
> PUBLIC:
> DATA lNeedRestart INIT .F. READONLY
>
> METHOD Test()
> METHOD Set()
> METHOD Reset()
>
> ENDCLASS
>
> METHOD Reset() CLASS XScreenResolution
>
> ::nWidth := Screen:nWidth
> ::nHeight := Screen:nHeight
> ::Set()
> ::lNeedRestart := .F.
>
> RETURN Nil
>
>
> #pragma BEGINDUMP
>
> #include <windows.h>
> #include <xailer.h>
>
> static BOOL XScreenRes_Run( PHB_ITEM Self, BOOL bChange )
> {
> DEVMODE dm;
> BOOL bSuccess = FALSE;
>
> memset( &dm, 0, sizeof( DEVMODE ) );
> dm.dmSize = sizeof( DEVMODE );
>
> if( EnumDisplaySettings( NULL, 0, &dm ) )
> {
> LONG lAction;
>
> dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
> dm.dmPelsWidth = XA_ObjGetNL( Self, "nWidth" );
> dm.dmPelsHeight = XA_ObjGetNL( Self, "nHeight" );
>
> lAction = ChangeDisplaySettings( &dm, CDS_TEST );
> XA_ObjSendL( Self, "_lNeedRestart", FALSE );
>
> switch( lAction )
> {
> case DISP_CHANGE_RESTART:
> XA_ObjSendL( Self, "_lNeedRestart", TRUE );
> // No hay break intencionadamente
>
> case DISP_CHANGE_SUCCESSFUL:
> {
> bSuccess = TRUE;
> if( bChange )
> ChangeDisplaySettings( &dm, CDS_UPDATEREGISTRY );
>
> break;
> }
> }
> }
>
> return bSuccess;
> }
>
> XA_FUNC_STATIC( XSCREENRESOLUTION_TEST )
> {
> PHB_ITEM Self = hb_stackSelfItem();
>
> hb_retl( XScreenRes_Run( Self, FALSE ) );
> }
>
> XA_FUNC_STATIC( XSCREENRESOLUTION_SET )
> {
> PHB_ITEM Self = hb_stackSelfItem();
>
> hb_retl( XScreenRes_Run( Self, TRUE ) );
> }
>
> XA_FUNC( REBOOTSYSTEM )
> {
> ExitWindowsEx( EWX_REBOOT, 0 );
> }
>
> #pragma ENDDUMP
>


Attached files fResolucionPantalla.prg (3.5 KB)Â fResolucionPantalla.xfm (263 B)Â
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9452
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Cambiar la resoluci

Mensaje por ignacio »

José Manuel,
Supongo que el código que te paso Bingen es tan sólo parte de un módulo en
el cual crea la clase TAplication . Simplemente con que incluyas esto arriba
del todo debería funcionar:
CLASS TApplication FROM XApplication
END CLASS
Saludos
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Manuel" <josem@nuel.es> escribió en el mensaje
news:45cc1ec1$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Bingen, gracias por tu respuesta.
>
> Llevo varios días intentando adaptarla función pero no lo consigo
>
> Me dá arios errores en la compilación:
>
> Me he creador un formulario: "fResolucionPantalla.prg"
>
> Al compilar de me dá el error:
>
> fResolucionPantalla.prg(23) Error E0010 'Class "tApplication" not
> declared for method: ChangeResolution(oSender,nWidth,nHeight ) ; function
> ChangeResolution(oSender,nWidth,nHeight ) ; local self := QSelf()'
>
> y la tengo declarada al inicio.
>
> Que se me está escapando?
>
> Muchas gracias
>
> Saludos
> José Manuel Serrano
>
>
>
>
> "Bingen Ugaldebere" <bingen@muninser.com> escribió en el mensaje
> news:[email=45c72546@news.xailer.com...]45c72546@news.xailer.com...[/email]
>> Tendrás que adaptarlo a tu aplicación pero esto es lo que yo uso y
>> funciona 100%
>>
>> METHOD ChangeResolution( oSender, nWidth, nHeight ) CLASS tApplication
>>
>> WITH OBJECT TScreenResolution():New()
>> :nWidth := nWidth
>> :nHeight := nHeight
>> IF :Test() // Probamos si está soportada
>> IF :Set() // La ponemos
>> // Si hay que reiniciar, preguntamos al usuario
>> IF :lNeedRestart
>> If MsgYesNo(If(AppData:cOriginalLng="ESP",;
>> "Es sistema necesita reiniciarse para
>> aplicar el cambio de resolución",;
>> "The System needs to restart to applicate
>> resolution changes"))
>> RebootSystem()
>> ELSE
>> // Dejar como estaba al inicio de la aplicación
>> :Reset()
>> ENDIF
>> ENDIF
>> ELSE
>> MsgInfo( If(AppData:cOriginalLng="ESP",;
>> "No se ha podido cambiar la resolución.",;
>> "Resolution not changed" ) )
>> ENDIF
>> ELSE
>> MsgInfo( If(AppData:cOriginalLng="ESP",;
>> ToString(nWidth)+"x"+ToString(nHeight)+" pixel.
>> Resolución no soportada por el equipo." ,;
>> ToString(nWidth)+"x"+ToString(nHeight)+" pixel.
>> Resolution unsupported on this computer" ) )
>> ENDIF
>> END
>>
>> RETURN Nil
>>
>> CLASS TScreenResolution FROM XScreenResolution
>> ENDCLASS
>>
>> CLASS XScreenResolution FROM TComponent
>>
>> PUBLISHED:
>> PROPERTY nWidth INIT Screen:nWidth
>> PROPERTY nHeight INIT Screen:nHeight
>>
>> PUBLIC:
>> DATA lNeedRestart INIT .F. READONLY
>>
>> METHOD Test()
>> METHOD Set()
>> METHOD Reset()
>>
>> ENDCLASS
>>
>> METHOD Reset() CLASS XScreenResolution
>>
>> ::nWidth := Screen:nWidth
>> ::nHeight := Screen:nHeight
>> ::Set()
>> ::lNeedRestart := .F.
>>
>> RETURN Nil
>>
>>
>> #pragma BEGINDUMP
>>
>> #include <windows.h>
>> #include <xailer.h>
>>
>> static BOOL XScreenRes_Run( PHB_ITEM Self, BOOL bChange )
>> {
>> DEVMODE dm;
>> BOOL bSuccess = FALSE;
>>
>> memset( &dm, 0, sizeof( DEVMODE ) );
>> dm.dmSize = sizeof( DEVMODE );
>>
>> if( EnumDisplaySettings( NULL, 0, &dm ) )
>> {
>> LONG lAction;
>>
>> dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
>> dm.dmPelsWidth = XA_ObjGetNL( Self, "nWidth" );
>> dm.dmPelsHeight = XA_ObjGetNL( Self, "nHeight" );
>>
>> lAction = ChangeDisplaySettings( &dm, CDS_TEST );
>> XA_ObjSendL( Self, "_lNeedRestart", FALSE );
>>
>> switch( lAction )
>> {
>> case DISP_CHANGE_RESTART:
>> XA_ObjSendL( Self, "_lNeedRestart", TRUE );
>> // No hay break intencionadamente
>>
>> case DISP_CHANGE_SUCCESSFUL:
>> {
>> bSuccess = TRUE;
>> if( bChange )
>> ChangeDisplaySettings( &dm, CDS_UPDATEREGISTRY );
>>
>> break;
>> }
>> }
>> }
>>
>> return bSuccess;
>> }
>>
>> XA_FUNC_STATIC( XSCREENRESOLUTION_TEST )
>> {
>> PHB_ITEM Self = hb_stackSelfItem();
>>
>> hb_retl( XScreenRes_Run( Self, FALSE ) );
>> }
>>
>> XA_FUNC_STATIC( XSCREENRESOLUTION_SET )
>> {
>> PHB_ITEM Self = hb_stackSelfItem();
>>
>> hb_retl( XScreenRes_Run( Self, TRUE ) );
>> }
>>
>> XA_FUNC( REBOOTSYSTEM )
>> {
>> ExitWindowsEx( EWX_REBOOT, 0 );
>> }
>>
>> #pragma ENDDUMP
>>
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Cambiar la resoluci

Mensaje por Bingen Ugaldebere »

Perdona llevaba varios dí­as sin pasar por el foro.
Efectivamente es lo que comenta Ignacio, pero lo deje por obvio pensando
que tu lo readaptarí­as, supongo que con la solución de Ignacio te andará
y si no me contactas por privado y te lo readapto yo.
Salu2.
José Manuel escribió:
> Bingen, gracias por tu respuesta.
>
> Llevo varios dí­as intentando adaptarla función pero no lo consigo
>
> Me dá arios errores en la compilación:
>
> Me he creador un formulario: "fResolucionPantalla.prg"
>
> Al compilar de me dá el error:
>
> fResolucionPantalla.prg(23) Error E0010 'Class "tApplication" not declared
> for method: ChangeResolution(oSender,nWidth,nHeight ) ; function
> ChangeResolution(oSender,nWidth,nHeight ) ; local self := QSelf()'
>
> y la tengo declarada al inicio.
>
> Que se me está escapando?
>
> Muchas gracias
>
> Saludos
> José Manuel Serrano
>
>
>
>
> "Bingen Ugaldebere" <bingen@muninser.com> escribió en el mensaje
> news:[email=45c72546@news.xailer.com...]45c72546@news.xailer.com...[/email]
>> Tendrás que adaptarlo a tu aplicación pero esto es lo que yo uso y
>> funciona 100%
>>
>> METHOD ChangeResolution( oSender, nWidth, nHeight ) CLASS tApplication
>>
>> WITH OBJECT TScreenResolution():New()
>> :nWidth := nWidth
>> :nHeight := nHeight
>> IF :Test() // Probamos si está soportada
>> IF :Set() // La ponemos
>> // Si hay que reiniciar, preguntamos al usuario
>> IF :lNeedRestart
>> If MsgYesNo(If(AppData:cOriginalLng="ESP",;
>> "Es sistema necesita reiniciarse para
>> aplicar el cambio de resolución",;
>> "The System needs to restart to applicate
>> resolution changes"))
>> RebootSystem()
>> ELSE
>> // Dejar como estaba al inicio de la aplicación
>> :Reset()
>> ENDIF
>> ENDIF
>> ELSE
>> MsgInfo( If(AppData:cOriginalLng="ESP",;
>> "No se ha podido cambiar la resolución.",;
>> "Resolution not changed" ) )
>> ENDIF
>> ELSE
>> MsgInfo( If(AppData:cOriginalLng="ESP",;
>> ToString(nWidth)+"x"+ToString(nHeight)+" pixel.
>> Resolución no soportada por el equipo." ,;
>> ToString(nWidth)+"x"+ToString(nHeight)+" pixel.
>> Resolution unsupported on this computer" ) )
>> ENDIF
>> END
>>
>> RETURN Nil
>>
>> CLASS TScreenResolution FROM XScreenResolution
>> ENDCLASS
>>
>> CLASS XScreenResolution FROM TComponent
>>
>> PUBLISHED:
>> PROPERTY nWidth INIT Screen:nWidth
>> PROPERTY nHeight INIT Screen:nHeight
>>
>> PUBLIC:
>> DATA lNeedRestart INIT .F. READONLY
>>
>> METHOD Test()
>> METHOD Set()
>> METHOD Reset()
>>
>> ENDCLASS
>>
>> METHOD Reset() CLASS XScreenResolution
>>
>> ::nWidth := Screen:nWidth
>> ::nHeight := Screen:nHeight
>> ::Set()
>> ::lNeedRestart := .F.
>>
>> RETURN Nil
>>
>>
>> #pragma BEGINDUMP
>>
>> #include <windows.h>
>> #include <xailer.h>
>>
>> static BOOL XScreenRes_Run( PHB_ITEM Self, BOOL bChange )
>> {
>> DEVMODE dm;
>> BOOL bSuccess = FALSE;
>>
>> memset( &dm, 0, sizeof( DEVMODE ) );
>> dm.dmSize = sizeof( DEVMODE );
>>
>> if( EnumDisplaySettings( NULL, 0, &dm ) )
>> {
>> LONG lAction;
>>
>> dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
>> dm.dmPelsWidth = XA_ObjGetNL( Self, "nWidth" );
>> dm.dmPelsHeight = XA_ObjGetNL( Self, "nHeight" );
>>
>> lAction = ChangeDisplaySettings( &dm, CDS_TEST );
>> XA_ObjSendL( Self, "_lNeedRestart", FALSE );
>>
>> switch( lAction )
>> {
>> case DISP_CHANGE_RESTART:
>> XA_ObjSendL( Self, "_lNeedRestart", TRUE );
>> // No hay break intencionadamente
>>
>> case DISP_CHANGE_SUCCESSFUL:
>> {
>> bSuccess = TRUE;
>> if( bChange )
>> ChangeDisplaySettings( &dm, CDS_UPDATEREGISTRY );
>>
>> break;
>> }
>> }
>> }
>>
>> return bSuccess;
>> }
>>
>> XA_FUNC_STATIC( XSCREENRESOLUTION_TEST )
>> {
>> PHB_ITEM Self = hb_stackSelfItem();
>>
>> hb_retl( XScreenRes_Run( Self, FALSE ) );
>> }
>>
>> XA_FUNC_STATIC( XSCREENRESOLUTION_SET )
>> {
>> PHB_ITEM Self = hb_stackSelfItem();
>>
>> hb_retl( XScreenRes_Run( Self, TRUE ) );
>> }
>>
>> XA_FUNC( REBOOTSYSTEM )
>> {
>> ExitWindowsEx( EWX_REBOOT, 0 );
>> }
>>
>> #pragma ENDDUMP
>>
>
>
Responder