2010-05-18 16 views
9

Metin kutusuyla bir uygulamam var ve ekrandaki metin kutusunun genişliği, kullanıcının ekranında her zaman 17,5 cm olmalıdır.Metin kutusuna 17,5 cm sabit genişlik nasıl verilir?

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; 
} 

Ama bu bana farklı çözünürlüklerde farklı boyutlarda verir:

Bu defa denedim budur.

O 1024 x 768 ile 1680 x 1050 ve 21,5 cm ile bana 13 cm verir.

Neyi yanlış yapıyorum?

+4

"Ekrandaki metin kutusu, her zaman kullanıcının ekranında 17,5 cm olmalıdır." - Bu garip bir gerekliliktir .... –

+0

Evet ... öyle. Müşteriniz size bu şartı verdiyse, ona 'tard' olduğunu söyle. – mpen

+1

Belki garip bir gereklilik, ancak ilginç bir soru daha az değil. Ekran çözünürlüğünü manuel olarak ayarlama, elinizdeki DPI'yı manuel olarak hesaplama ve GetDpiX() ve GetDpiY() 'nin çıktılarıyla eşleşip eşleşmediğini görmek nasıl olur? Tüm monitörler bu işlevselliği desteklemiyor olabilir mi? – Bryan

cevap

7

Grafik.DpiX yöntemi, monitörün inç başına gerçek noktasını vermez. Windows Görüntü özelliklerinde, çoğunlukla 96 veya 120 DPI olan DPI'yi döndürür.

Monitörün gerçek DPI'sını okumak mümkün değildir. Microsoft bunu Windows Vista/7 için araştırdı, ancak monitörlerin üretimi monitör donanımından gelen değeri okumak için standart bir yol sağlamadığı sürece mümkün olmayacak.

3

Evet, maalesef Xenan haklı. Geçici çözüm için, kullanıcı tarafından yapılan bir el ile kalibrasyona izin verebilirsiniz.

örn. Ekranda 400 piksellik bir çizgi çizin, kullanıcının ekranda ölçmesini ve sonucu ayarlamasını isteyin. Artık kalibrasyon olan ÜFE'yi (inç başına düşen piksel) hesaplamak gerçekten çok kolay.

0

Boyut yapısının genişlik özelliği, Graphics sınıfının PageUnit ve PageScale ayarlarına bağlıdır. İstediğiniz efekti elde etmek için bu ayarlarla oynamayı deneyin. Büyük olasılıkla bu ayarları kontrolün Paint olayı üzerinde değiştirmeniz gerektiğinden, bunun yerine kendi özel TextBox denetiminizi oluşturmanızı öneririm.

İlgili konular