Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-08-2022
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 193
Poder: 21
ramonibk Va por buen camino
Resolución pantalla

Hola a todos.
mi problema reside que en unos equipos muy viejos que se han colocado unos ordenadores nuevos con win10 sin tener en cuenta que los monitores son de hace 15 años, un cable VGA de 5 metros y una aplicación que corre en 800x600.
el problema principal es que los ordenadores arrancan en 1024x768 y al estar deseabilidad el escritorio no es fácil el cambio de resolución. por esto se opto en un primer momento por usar "nircmd" para la reconfiguración de monitor.
pero me esta surgiendo un problema de sincronismos que me deja la pantalla desplazada y hay que cortar físicamente la alimentación al monitor para que este se re-sincronice.

por mi parte he probado a hacer una pequeña aplicación en Delphi para forzar la resolución y apagar y encender la pantalla.

Código Delphi [-]
program Monitor;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, Winapi.Windows, Winapi.Messages, StrUtils;

var
  lpDevMode: TDeviceMode;
  X, Y, Hz : word;
  SizeX, SizeY, SizeHz : Integer;
  i : Integer;

function CambiarResolucion (XScreem, YScreem, HzScreem : word): BOOL;
begin
  Result := EnumDisplaySettings(nil, 0, lpDevMode);
  if Result then
  begin
    lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
    lpDevMode.dmPelsWidth := XScreem;
    lpDevMode.dmPelsHeight := YScreem;
    lpDevMode.dmDisplayFrequency := HzScreem;
    Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL and DISP_CHANGE_RESTART;
  end;
end;

begin
  try
   SizeX := GetSysTemMetrics(SM_CXSCREEN);
   SizeY := GetSysTemMetrics(SM_CYSCREEN);
   SizeHz := GetSysTemMetrics(SM_CXDLGFRAME);

   If ParamStr(1) = '' Then
    Begin
      Writeln ('Resolución actual: '+IntToStr(SizeX) +' x '+ IntToStr(SizeY));
    End;

   If ParamStr(1) = 'display' Then
    Begin
     X := StrToInt(ParamStr(2));
     Y := StrToInt(ParamStr(3));
     if ParamStr(4) <> '' Then
      Hz := StrToInt(ParamStr(4));
     if ParamStr(4) = '' Then
      Hz := 59;

     if (SizeX <> X) and (SizeY <> Y) then
      Begin
        CambiarResolucion (X, Y, Hz);
      End else
       Writeln ('La resolución actual coincide con la indicada, No es necesario realizar cambios.');

    End;

    If ParamStr(1) = 'monitor' Then
    Begin
     If ParamStr(2) = 'off' Then
       SendMessage(GetForegroundWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, 2);
     If ParamStr(2) = 'On' Then
       SendMessage(GetForegroundWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, -1);
    End;


  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.
con un fichero .bat apago la pantalla la enciendo y fuerzo la resolución antes de que arranque la aplicación principal. pero me he encontrado con el problema de aunque mande encender al monitor este se queda en negro hasta que se toque el ratón o alguna tecla lo cual no me vale.

a alguien se le ocurre algún método para solucionar esto.

Un saludo.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Resolución de la pantalla washiloo C++ Builder 3 23-09-2011 19:20:40
Resolucion de Pantalla shoulder Varios 3 05-10-2010 22:35:53
Resolucion de pantalla Willer OOP 7 30-04-2010 02:42:22
Resolucion de pantalla oregon Windows 1 22-03-2007 16:09:43
Resolución de pantalla kalimero Varios 8 05-11-2003 22:41:47


La franja horaria es GMT +2. Ahora son las 01:23:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi