Necesito averiguar si la pantalla del usuario está configurada en 96 ppp normales (tamaño pequeño), fuentes grandes de 120 ppp, u otra cosa. ¿Cómo hago eso en VB.NET (preferido) o C#?¿Cómo puedo detectar si la fuente del usuario (DPI) está configurada como pequeña, grande o alguna otra cosa?
Respuesta
La forma mejor es sólo para dejar que el tamaño de formulario automáticamente, en base a la configuración de DPI actuales del usuario. Para hacerlo, simplemente configure AutoScaleMode
property en AutoScaleMode.Dpi
y habilite la propiedad AutoSize
. Esto se puede hacer ya sea desde la ventana Propiedades en el diseñador oa través de código:
Public Sub New()
InitializeComponent()
Me.AutoScaleMode = AutoScaleMode.Dpi
Me.AutoSize = True
End Sub
O, si lo que necesita saber esta información, mientras que dibujo (como en el método de control Paint
caso), puede extraer la información de las propiedades DpiX
y DpiY
de la instancia Graphics
class.
Private Sub myControl_Paint(ByVal sender As Object, ByVal e As PaintEventArgs)
Dim dpiX As Single = e.Graphics.DpiX
Dim dpiY As Single = e.Graphics.DpiY
' Do your drawing here
' ...
End Sub
Por último, si es necesario determinar el nivel de DPI sobre la marcha, tendrá que crear una instancia temporal de la clase Graphics
para su formulario, y comprobar los DpiX
y DpiY
propiedades, como se muestra arriba . El CreateGraphics
method de la clase de formulario hace que esto sea muy fácil de hacer; solo asegúrese de ajustar la creación de este objeto en un Using
statement para evitar pérdidas de memoria. Código de ejemplo:
Dim dpiX As Single
Dim dpiY As Single
Using g As Graphics = myForm.CreateGraphics()
dpiX = g.DpiX
dpiY = g.DpiY
End Using
¡Hola, y gracias! Pero, ¿los ppp se relacionan con el tamaño de la pantalla (X/Y) o el tamaño de la fuente (X solo está disponible)? En otras palabras, ¿puedo estar seguro de que dpiX = dpiY en todos los casos? De lo contrario, la nueva fuente se vería estirada, ¿no? –
@Didier: Sí, normalmente dpiX será equivalente a dpiY. Si no, se vería estirado. Dependerá de la resolución y de la configuración de DPI elegida por el usuario. Los ajustes pequeños predeterminados tienen dpiX = 96 y dpiY = 96. Los ajustes grandes predeterminados tienen dpiX = 120 y dpiY = 120. Puede consultar [esta página de MSDN] (http://msdn.microsoft.com/en-us/ library/dd464646.aspx) en aplicaciones de alta resolución. La [página de cómo hacer] vinculada (http://msdn.microsoft.com/en-us/library/dd464660.aspx) es excelente. –
- 1. ¿Cómo puedo saber si mi página está configurada como página de inicio del usuario?
- 2. GWT o DOJO o alguna otra cosa?
- 3. Magma, GOODS, GLORP, o alguna otra cosa?
- 4. ¿Cómo puedo detectar/calcular si hay una imagen pequeña dentro de una imagen más grande?
- 5. Cómo verificar si la alarma está configurada
- 6. ¿Cómo puedo detectar si el usuario está "inactivo" con javascript?
- 7. Cómo controlar la fuente DPI en la aplicación .NET WinForms
- 8. Comprobando si la cookie está configurada
- 9. Condor, Sun Grid Engine, o alguna otra cosa?
- 10. Scala cómo escribir si otra cosa
- 11. ¿Cómo puedo detectar si Dispatcher.DisableProcessing está activo?
- 12. Sass mixin con si otra cosa
- 13. valor dpi de forma predeterminada "grande", el texto "pequeña", "medio" y considera androide
- 14. Refactoring un árbol Si otra cosa
- 15. Mano corta Si declaración sin otra cosa
- 16. Android: ¿detectar una tableta pequeña frente a un teléfono grande?
- 17. Verifica si la sesión está configurada o no, y si no creas una?
- 18. ¿Cómo puedo detectar cuándo el usuario está desplazándose activamente?
- 19. ¿Cómo puedo verificar si la opción de depuración python está configurada desde una secuencia de comandos
- 20. innecesaria 'otra cosa' declaración
- 21. ¿Cómo verificar en el script NAnt si la propiedad está configurada o no?
- 22. ¿Cómo puedo detectar qué dispositivo iOS está usando mi usuario?
- 23. ¿Cómo puedo detectar si una ventana del navegador está enfocada o no?
- 24. ¿Cómo puedo detectar si quicktime está instalado con javascript?
- 25. ¿Cómo detectar si un usuario subió un archivo más grande que post_max_size?
- 26. ¿Cómo puedo detectar si un iframe está cargado?
- 27. Cómo detectar si se presiona alguna tecla
- 28. compruebe si la variable de entorno ya está configurada
- 29. ¿Cómo puedo detectar si mi proceso se está ejecutando UAC elevado o no?
- 30. ¿Cómo detectar si Vista UAC está habilitado?
Una forma nativa (escrito en Delphi, pero sólo mediante la API nativa de Windows): 'var DC: HDC; res: entero; begin dc: = GetDC (0); if dc <> 0 then try res: = GetDeviceCaps (dc, LOGPIXELSX); finalmente ReleaseDC (0, dc) end; ' –
Como sugiere Andreas, también puede llamar a las funciones API de Windows' GetDC' y 'GetDeviceCaps' para obtener esta información, pero deberá usar P/Invoke para llegar a ellos desde una aplicación .NET, y hay un pequeño beneficio al hacerlo, ya que la clase 'Graphics' ya ha finalizado esto muy bien en el código administrado. –
Pero de todos modos, ** gracias por [pagar sus impuestos] (http://blogs.msdn.com/b/oldnewthing/archive/2004/07/14/182971.aspx) ** –