PDA

Ver la Versión Completa : Preguntar por el % aumento fuente


newtron
06-07-2023, 14:23:28
Buenas a tod@s.


Tengo un pequeño problema cuando el windows de turno está "tuneado" para que escale las fuentes a un porcentaje distinto al 100% que es el que viene por defecto.


¿Hay alguna forma de consultar el valor de ese porcentaje en el windows?


Gracias y un saludo.

Casimiro Notevi
06-07-2023, 17:06:30
A ver si sirve:
uses
Windows, Graphics;

function GetFontScalePercentage: Integer;
var
DC: HDC;
LogPixelsY: Integer;
begin
// Obtiene el contexto del dispositivo de pantalla
DC := GetDC(0);
try
// Obtiene la resolución vertical en píxeles por pulgada (PPP)
LogPixelsY := GetDeviceCaps(DC, LOGPIXELSY);
finally
// Libera el contexto del dispositivo de pantalla
ReleaseDC(0, DC);
end;

// Calcula el porcentaje de tamaño de las fuentes
Result := MulDiv(LogPixelsY, 100, 96);
end;

newtron
07-07-2023, 09:32:59
Antonio.


Gracias por tu respuesta pero la variable LogPixelsY me coge valor 0. ¿Alguna idea de por qué puede ser?


Gracias y un saludo.

newtron
07-07-2023, 09:59:01
Ok, ya está.


Me "chirriaba" un poco que el nombre de la variable fuera igual que el segundo parámetro del GetDeviceCaps así que lo he cambiado y ahora si pilla el valor.


Gracias y un saludo.

Casimiro Notevi
07-07-2023, 14:31:32
Es que cero es porque no está aumentada, tiene tamaño predeterminado.
Si aumentas las fuentes verás que en lugar de cero devolverá el porcentaje aumentado.
Esa es la teoría :)

newtron
07-07-2023, 16:37:25
Pues en la práctica si no está aumentado el tamaño de fuente devuelve el valor 100 y si está aumentada al 125% devuelve 125. Eso es lo que yo quería poder consultar.


Pero te digo que en el ejemplo que pasas devuelve 0 mientras no cambies el nombre de la variable "LogPixelsY" por otro. Eso si lo tengo comprobado.


Gracias y un saludo.

Casimiro Notevi
07-07-2023, 19:00:46
^\||/^\||/^\||/

pgranados
23-01-2024, 23:54:53
Me "chirriaba" un poco que el nombre de la variable fuera igual que el segundo parámetro del GetDeviceCaps así que lo he cambiado y ahora si pilla el valor.

Hola, he copiado la función y modifique el nombre de la variable pero sigo obteniendo 0, lo probé en Delphi 10.4, puedes pasarme la función por favor? Saludos

newtron
24-01-2024, 09:33:48
Hola, he copiado la función y modifique el nombre de la variable pero sigo obteniendo 0, lo probé en Delphi 10.4, puedes pasarme la función por favor? Saludos


Claro.



function GetFontScalePercentage: Integer;
var
DC: HDC;
LogPixelsY_: Integer;
begin
// Obtiene el contexto del dispositivo de pantalla
DC := GetDC(0);
try
// Obtiene la resolución vertical en píxeles por pulgada (PPP)
LogPixelsY_ := GetDeviceCaps(DC, LOGPIXELSY);
finally
// Libera el contexto del dispositivo de pantalla
ReleaseDC(0, DC);
end;

// Calcula el porcentaje de tamaño de las fuentes
Result := MulDiv(LogPixelsY_, 100, 96);
end;



Saludos.

pgranados
24-01-2024, 16:44:08
Muchas gracias, ya funciono :D