Page 1 of 1

Problema DPI y tamaño de texto al 150% en windows 10

Posted: Thu Feb 28, 2019 9:19 pm
by carlos vargas
Tengo problemas con una app en una app que es full hd, se mira borroso y pequeño, lo borroso se corriege con una conf del so de control de DPI, en esta laptop, el texto esta a 150% que es lo recomendado por el equipo.

revisando un poco la web me encontre con esta pagina:
http://www.rw-designer.com/DPI-aware
ya con esa info, he hecho esto:

Code: Select all

#pragma BEGINDUMP

#include "hbapi.h"
#include "windows.h"

HB_FUNC( HB_GETSYSMETRIC_ICON )
{
  hb_retni( GetSystemMetrics( SM_CXSMICON ) );
}

HB_FUNC( FW_FSCALE )
{
   HWND hWnd = GetActiveWindow();
   HDC hdc = GetDC( hWnd );
   float fScale = GetDeviceCaps( hdc, LOGPIXELSX ) / 96.0f;
   ReleaseDC( hWnd, hdc );

   hb_retnd( (double) fScale );
}
#pragma ENDDUMP
 
con esta funcio FW_FSCALE, en mi app al inicio tengo esto:

Code: Select all

PROCEDURE Main()
   LOCAL oBrush, nScale := fw_fScale()
   ?nScale //retorna 1.5
 
con lo cual nScale me retorna 1.5 que seria el valor a escalar el tamaño de las fuentes, y el tamaño de los controles, con las fuente ya hago esto y funciona:

Code: Select all

   DEFINE FONT oFont  NAME "TAHOMA" SIZE 0, ( -13 * nScale )
   DEFINE FONT oFontD NAME "TAHOMA" SIZE 0, ( -13 * nScale )
 
pero con los controles no se como hacerlo para que se aplique a todos ellos.
me podrian dar una mano con esto.

salu2
carlos vargas

Re: Problema DPI y tamaño de texto al 150% en windows 10

Posted: Thu Feb 28, 2019 9:24 pm
by carlos vargas
tambien he modificado un poco mi manifest file con lo que ellos recomiendan.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings
xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

Re: Problema DPI y tamaño de texto al 150% en windows 10

Posted: Thu Feb 28, 2019 10:06 pm
by cnavarro
Carlos
Se me ocurre algo asi

Code: Select all

   AEVal( oDlg:aControls, { | o | o:nWidth := o:nWidth * nScale, o:nHeight := o:nHeight * nScale, o:Move( .... ) } )
// Ahi tendrás que probar las distintas posibilidades con los metodos Move, Resize, etc., incluso quizás en lugar de modificar el width y el height, quizás tengas que
// modificar el nRight y el nBottom, prueba y nos vas contando
// También puedes poner eso antes del ACTIVATE, o en el ON INIT
 

Re: Problema DPI y tamaño de texto al 150% en windows 10

Posted: Fri Mar 01, 2019 4:47 pm
by carlos vargas
Pues con el manifest se quito lo borroso, y con el escalado a la fuente se mira bien.
Image
Image

a los controles no fue necesario hacerle nada, salvo al ancho de las columnas de xbrowse, las cuales las incremente segun la escala.
tambien los item de las statusbar, y el ancho en los botones de las toolbar. y en _ algunas imagenes, las cuales modifique su tamaño.

Code: Select all

   IF nScale > 0
      AEval( oBrw:aCols, {|o| o:nWidth *= nScale } )
   ENDIF
 

Code: Select all

STATIC PROCEDURE Clie_Toolbar()
   LOCAL oCursor := CrearCursorBarraBotones()

   DEFINE BUTTONBAR oToolBar OF oDlg SIZE (60*nScale), 60 2015 CURSOR oCursor
...
   DEFINE MSGBAR oMsgBar OF oDlg PROMPT "INS=Nuevo, DEL=Borrar, ENTER=Editar, F3=Imprimir, F4=Documentos, F5=Filtrar, F6=Prestamos, F9=Refrescar." 2010 FONT oFontD
   DEFINE MSGITEM oItem OF oMsgBar PROMPT "TODOS" SIZE (125*nScale) COLOR CLR_RED
 

Code: Select all

   IF HB_IsObject( ::oBitmap ) .and. ::oBitmap:hBitmap <> 0
      IF nScale > 0
         ::oBitmap:hBitmap := ResizeBitmap( ::oBitmap:hBitmap, (::oBitmap:nWidth*nScale)+4, (::oBitmap:nHeight*nScale)+4 )
      ENDIF
      IF ::oBitmap:HasAlpha()
         ABPaint( ::hDC, 0, 0, ::oBitmap:hBitmap, 200 )
      ELSE
         DrawBitmap( ::hDC, ::oBitmap:hBitmap, 0, 0 )
      ENDIF
 

Re: Problema DPI y tamaño de texto al 150% en windows 10

Posted: Fri Mar 01, 2019 6:46 pm
by Carles
Carlos,

Muy bueno !.
carlos vargas wrote:tambien he modificado un poco mi manifest file con lo que ellos recomiendan.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings
xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Como has conseguido los paràmetros correctos ?

Comno se ve en otro monitor inferior ?

Re: Problema DPI y tamaño de texto al 150% en windows 10

Posted: Sat Mar 02, 2019 1:24 pm
by carlos vargas
Carles, en este sitio obtuve la info
http://www.rw-designer.com/DPI-aware
en pantalla tamaño normal todo ok, ya que nSscale da un valor de 1 y con eso el escalado se mantiene en su valor original.