2010-05-18 17 views
9

Tengo una aplicación con un cuadro de texto, y el ancho del cuadro de texto en la pantalla siempre debe ser de 17,5 centímetros en la pantalla del usuario.¿Cómo dar a un cuadro de texto un ancho fijo de 17,5 cm?

Esto es lo que he intentado hasta ahora:

const double centimeter = 17.5; // the width I need 
const double inches = centimeter * 0.393700787; // convert centimeter to inches 

float dpi = GetDpiX(); // get the dpi. 96 in my case. 

var pixels = dpi*inches; // this should give me the amount of pixels 
textbox1.Width = Convert.ToInt32(pixels); // set it. Done. 



private float GetDpiX() 
{ 
    floar returnValue; 
    Graphics graphics = CreateGraphics(); 
    returnValue = graphics.DpiX; 
    graphics.Dispose(); // don’t forget to release the unnecessary resources 
    return returnValue; 
} 

Pero esto me da diferentes tamaños con diferentes resoluciones.

Me da 13 cm con 1680 x 1050 y 21,5 cm con 1024 x 768.

¿Qué estoy haciendo mal?

+4

"el cuadro de texto en la pantalla siempre debe tener 17,5 centímetros en la pantalla del usuario." - ese es un requisito peculiar .... –

+0

Sí ... lo es. Si su cliente le dio este requisito, dígale que es un 'tard'. – mpen

+1

Tal vez un requisito extraño, pero una pregunta interesante, no obstante. ¿Qué hay de la configuración de la resolución de pantalla de forma manual, calculando manualmente el DPI que tiene, y ver si coincide con la salida de GetDpiX() y GetDpiY()? ¿Es posible que no todos los monitores sean compatibles con esta funcionalidad? – Bryan

Respuesta

7

El método graphics.DpiX no proporciona los puntos reales por pulgada del monitor. Devuelve el conjunto de DPI en las propiedades de Windows Display, en su mayoría 96 o 120 DPI.

No es posible leer el DPI real del monitor. Microsoft investigó esto para Windows Vista/7, pero mientras los fabricantes de monitores no proporcionen una forma estándar de leer el valor del hardware del monitor, no será posible.

3

Sí, desafortunadamente Xenan tiene razón. Para solucionar el problema, podría permitir una especie de calibración manual realizada por el usuario.

p. Ej. dibuja una línea de 400 píxeles en la pantalla, pide al usuario que mida en la pantalla y establezca el resultado. Ahora es realmente simple calcular el PPI (píxeles por pulgada) que es su calibración.

0

La propiedad de ancho de la estructura de Tamaño depende de la configuración de PageUnit y PageScale de la clase Graphics. Intente jugar con estos ajustes para obtener el efecto deseado. Como lo más probable es que necesite modificar estas configuraciones en el evento Paint del control, le sugiero que cree su propio control TextBox personalizado.

Cuestiones relacionadas