Sign in Join
Wiki copytemporary

High DPI/es: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Definicion
22
33Cualquier configuración personalizada de DPI superior a 96 DPI (la configuración predeterminada) \[<http://msdn.microsoft.com/en-us/library/ee318406(VS.85>).aspx *\].\
44En español debe emplearse el término PPP (Puntos por pulgada) que es la traducción de "DPI" (Dots per inch), "High DPI" sería "PPP elevado" o "Configuración elevada de PPP", "High DPI Awareness" sería *aplicación* "Consciente de la configuración elevada de PPP".
55
66## Configurando High DPI en Windows
77
88En Windows 7 ve al Panel de Control \> Pantalla. Elije Más pequeño 100% (predeterminado), Mediano 125% o Más grande 150%.
99
1010Si elijes 100% (96 DPI) es la configuración predeterminada de DPI de Windows, no es High DPI.
1111
1212Si elijes 125% (120 DPI) la opción "Usar ajuste de ppp con el estilo de Windows XP" esta activada, las aplicaciones que ejecutes con esta configuración son escaladas como en Windows XP.
1313
1414Si elijes 150% (144 DPI) la opción "Usar ajuste de ppp con el estilo de Windows XP" esta desactivada (Virtualización de DPI activada), las aplicaciones que ejecutes con esta configuración deben ser "High DPI Awareness", sino serán escaladas por el sistema como si se tratara de una imagen blureada.
1515
1616También puedes establecer una configuración personalizada de DPI en la opción "Establecer tamaño de texto personalizado (PPP)" y activar/desactivar la Virtualización de DPI.
1717
1818## High DPI en Lazarus
1919
2020Con Lazarus debemos seguir estos pasos para hacer una aplicación "High DPI Awareness" para Windows 7. No estoy usando ScaleBy ni ScaleControls porque tienen muchos bugs para este propósito.
2121
2222### PASO 1 - Declarar High DPI
2323
2424Para hacer esto necesitamos un archivo de manifiesto que incluya la declaración, con Lazarus 0.9.30 podemos hacer esto entrando a Opciones \> Opciones del proyecto \> y seleccionando las opciones "Usar el archivo de manifiesto para habilitar temas (solo Windows)" y "Aplicación 'DPI-Aware' (para Vista+)".
2525
2626### PASO 2 - Escalar Formas (Forms) y Controles (Controls)
2727
2828Para hacer esto podemos llamar el procedimiento ScaleDPI en el evento OnCreate de cada forma del proyecto.
2929
3030Primero copia el siguiente código y guardalo a un archivo de texto "uscaledpi.pas":
3131
3232``` pascal
3333unit uscaledpi;
3434
3535{$mode objfpc}{$H+}
3636
3737interface
3838
3939uses
4040 Graphics, Controls;
4141
4242procedure ScaleDPI(Control: TControl; FromDPI: Integer);
4343
4444implementation
4545
4646procedure ScaleDPI(Control: TControl; FromDPI: Integer);
4747var
4848 n: Integer;
4949 WinControl: TWinControl;
5050begin
5151 with Control do begin
5252 Left:=ScaleX(Left,FromDPI);
5353 Top:=ScaleY(Top,FromDPI);
5454 Width:=ScaleX(Width,FromDPI);
5555 Height:=ScaleY(Height,FromDPI);
5656 end;
5757 if Control is TWinControl then begin
5858 WinControl:=TWinControl(Control);
5959 if WinControl.ControlCount > 0 then begin
6060 for n:=0 to WinControl.ControlCount-1 do begin
6161 if WinControl.Controls[n] is TControl then begin
6262 ScaleDPI(WinControl.Controls[n],FromDPI);
6363 end;
6464 end;
6565 end;
6666 end;
6767end;
6868
6969end.
7070```
7171
7272Copia el archivo "uscaledpi.pas" a la carpeta principal del proyecto:
7373
74-` MiProyecto\uscaledpi.pas`\
75-` `
74+```text
75+ MiProyecto\uscaledpi.pas
76+```
7677
7778En la sección "uses" del proyecto agrega "uScaleDPI":
7879
7980``` pascal
8081unit form1;
8182
8283{$mode objfpc}{$H+}
8384
8485interface
8586
8687uses
8788 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
8889 uScaleDPI; // Esto incluye el procedimiento ScaleDPI
8990```
9091
9192En el evento OnCreate de cada forma llama el procedimiento en esta forma:
9293
9394``` pascal
9495procedure TForm1.FormCreate(Sender: TObject);
9596begin
9697 {$IFDEF WINDOWS}
9798 if Screen.PixelsPerInch <> 96 then ScaleDPI(Self,96); // 96 es la configuración de DPI cuando diseñaste la Forma1 (Form1)
9899 {$ENDIF}
99100end;
100101```
101102
102103## Caso practico
103104
104105[CPickSniff](http://sourceforge.net/projects/cpicksniff2/) es una aplicación para capturar los colores del escritorio, es el programa que utilizaremos para ver como funciona High DPI en Windows.
105106
106107### DPI Predeterminado
107108
108109Esta es la aplicación corriendo en 96 DPI (100%), sin ningún tipo de escalado ya que no es necesario.
109110
110111![](/wiki-images/4/4b/Cpicksniff_defaultdpi.png)
111112
112113### DPI escalado por Windows
113114
114115Esta es la misma aplicación corriendo en 144 DPI (150%), no tiene el manifiesto por lo que Windows realiza el escalado: el resultado es una aplicacion blureada.
115116
116117![](/wiki-images/5/54/Cpicksniff_blured.png)
117118
118119### DPI con Manifiesto
119120
120121Corriendo en 144 DPI (150%). Esta vez la aplicación incluye el manifiesto declarando High DPI, pero no el código para manejar el escalado: el resultado es que los elementos no son escalados de acuerdo a como se escalan las fuentes (Windows realiza esto automáticamente), por lo que el texto aparece recortado.
121122
122123![](/wiki-images/1/1b/Cpicksniff_nohighdpi.png)
123124
124125### High DPI
125126
126127Finalmente con el Manifiesto y el escalado LCL, la aplicación se ve perfecta en High DPI.
127128
128129![](/wiki-images/b/bd/Cpicksniff_highdpi.png)
129130
130131## High DPI en Lazarus 1.7 y superior
131132
132133Nota: la información que aparece debajo es válida para la version actual del SVN trunk (Mayo 2017). Se hará oficial el how-to tan pronto como se publique la versión 1.8 de Lazarus 1.8. High-DPI se encuentra actualmente en construcción por lo que sus propiedades pueden cambiar antes de la publicación definitiva de la versión 1.8.
133134
134135Para manejar High DPI utiliando nuevas características en 1.7, sigue los siguientes pasos:
135136
136137- On Windows: enable DPI awarness in Project Options -\> Application. Decide if you want to support per monitor DPI awarness or not.
137138- Enable LCL scaling for your application DPI awarness in Project Options -\> Application -\> "Use LCL scaling (Hi-DPI).
138139- Set TForm.Scaled=True for all your forms (it is the default value). All WYSIWYG should work automatically. Also the designer scales the forms accordingly.
139140- If you create controls run-time, escala todas las coordenadas, tamaños, etc que tengan que ver con DPI-aware mediante TControl.ScaleCoord() o ScaleCoord96() (dependiendo de tu elección del PPI por defecto) o prepara tu contenedor (e.g. un panel con controles) como si estuviese en 96 PPI y entonces haz la llamada a TControl.AutoAdjustLayout(lapAutoAdjustForDPI, 96, ParentFormOfTheContainer.PixelsPerInch, 0, 0);
140141- Si algunos de tus componentes no realiza el escalado de sus dimensiones internas, override DoAutoAdjustLayout y escala sus dimensiones (ver TToolBar) - debe realizarse con todos los controles. Si un control LCL pierde DoAutoAdjustLayout por favor reportalo en Mantis y caso de disponer de un parche de solución, apórtalo.
141142
142143### Lazarus IDE high DPI
143144
144145El IDE mismo de Lazarus es DPI-aware.
145146
146147## Enlaces Externos
147148
148149- \[<http://msdn.microsoft.com/en-us/library/dd464646(v=VS.85>).aspx High DPI (Windows)\] Artículo MSDN sobre High DPI
149150- [Guía para escalado](http://msdn.microsoft.com/en-us/library/windows/apps/hh465362) Windows Dev Center - Guía de experiencia de usuario para el escalado de estilo de aplicaciones Metro.
150151- [[Windows Icon]] Como crear iconos que funcionan con High DPI.
151152
152153---
153154*From the Free Pascal wiki, page "High DPI/es", as it stood on 2020-02-17 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
154155Category: Castellano
155156Category: Español

Back to history