SORU
28 Kasım 2011, PAZARTESİ


Nasıl benim GUI Windows yazı tipi Ölçekleme %100'den büyük olduğunda iyi davranır yapabilirim

Windows Denetim Masası (125 0% gibi) büyük yazı tipi boyutlarını seçerken daha sonra BASKI uygulama sorunları vardır, her zaman bir şeyler pixelwise ayarlandı.

TStatusBar.Panel. Tam bir etiket içeren genişliğini ayarladım, şimdi büyük fontlarla etiket "". taşmaları Diğer bileşenleri ile aynı sorun.

Dell'den yeni dizüstü bilgisayarlar zaten varsayılan ayar olarak 125'i ile birlikte, geçmişte bu sorun oldukça nadir iken şimdi gerçekten önemlidir.

Bu sorunun üstesinden gelmek için neler yapılabilir?

CEVAP
28 Kasım 2011, PAZARTESİ


Bu ayarlarınızı .dpc dosya doğru ölçekli olacak, bu yüzden uzun Scaled True.

Eğer kodu Boyutlar sonra ayarlama Screen.PixelsPerInch Form.PixelsPerInch bölünmüş onları ölçek gerekir. MulDiv bunu yapmak için kullanın.

function TMyForm.ScaleDimension(const X: Integer): Integer;
begin
  Result := MulDiv(X, Screen.PixelsPerInch, PixelsPerInch);
end;

Bu form, sebat çerçeve Scaled True zaman yaptığı şey.

Aslında, sabit payda kodları 96 değeri olan bir sürüm ile bu işlevi yerine ikna edici bir argüman yapabilirsiniz. Bu mutlak boyut değerleri kullanımı ve geliştirilmesi için makine ve yeniden Kaydet senin üzerinde anlam eğer yazı tipi Ölçekleme değiştirecek olursan değiştirme hakkında endişelenmenize gerek yok sağlar .dosya dpc. Önemli olan nedeni PixelsPerInch özellik içinde saklı olmasıdır .dpc dosya olan makine değeridir .dpc dosya son kaydedilmiş.

const
  SmallFontsPixelsPerInch = 96;

function ScaleFromSmallFontsDimension(const X: Integer): Integer;
begin
  Result := MulDiv(X, Screen.PixelsPerInch, SmallFontsPixelsPerInch);
end;

Yani, teması devam, dikkatli olmak başka bir şey, eğer projeniz farklı DPİ değerleri ile birden fazla makine üzerinde geliştirilmiş, Delphi kaydederken kullandığı ölçeklendirme bulacaksınız .dpc dosya kontrolleri düzenlemeler bir dizi etrafında dolaşıp sonuçlanır. İşyerimde, bunu önlemek için formlar sadece 96 dpi (100% Ölçekleme) düzenlenmiş olan katı bir politikamız var.

Aslında ScaleFromSmallFontsDimension benim yorum da tasarım süresi bu set, çalışma sırasında farklı yazı tipi form olasılığı için ödenek yapar. XP makinelerde kullandığım bir uygulamanın formları 8pt Tahoma kullanın. Vista ve 9pt Segoe UI kullanılır. Bu özgürlüğün başka bir derecesi sağlar. Ölçekleme mutlak boyut değerleri kaynak kodu kullanılan 96 dpi 8pt Tahoma temel göreli olduğu varsayılır, çünkü bu hesaba katmalısınız.

Sizin UI herhangi bir resim veya Semboller kullanırsanız, o zaman bu da ölçek gerekiyor. Yaygın bir örnek, araç çubukları ve menüler üzerinde kullanılan semboller olurdu. Simge kaynakları yürütülebilir bağlantılı olarak bu sembollerin sağlamak isteyeceksiniz. Her simge boyutları bir dizi içerir ve daha sonra size en uygun boyutu seçin ve bir resim listesi yüklenemedi zamanında. Bu konu burada bulabilirsiniz bazı ayrıntılar: How do I load icons from a resource without suffering from aliasing?

Başka bir işe yarar görece birimler, Boyutlar, TextWidth TextHeight göre tanımlamaktır. Eğer bir şey 10 dikey çizgiler etrafında olmak istiyorsanız yani, boyutu 10*Canvas.TextHeight('Ag') kullanabilirsiniz. Bu çok kaba ve çizgi yapmanıza izin vermiyor. çünkü hazır bir metrik aralığı. Ancak, genellikle tüm PixelsPerInch ile GUI düzgün ölçekler ayarlayabilir.

Ayrıca high DPI aware olarak uygulamanız işaretlemeniz gerekir. Bunu yapmanın en iyi yolu uygulama bildirimi. Delphi'nin yapı araçları bildirimi özelleştirmek için izin değil, çünkü bu size ait, sizin için apaçık bir kaynak bağlantısı için güçlerini kullanın.

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <asmv3:windowsSettings
         xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>

Kaynak komut dosyası bu gibi görünüyor:

1 24 "Manifest.txt"

Manifest.txt bulunduğu gerçek apaçık. Ayrıca comctl32 v6 bölüm vardır ve requestedExecutionLevel asInvoker ayarlamak gerekir. Eğer uygulama için bu derlenmiş kaynak bağlantısı ve Delphi kendi manifestosu ile aynı şeyi yapmaya çalışmadığından emin olun. Modern Delphi Hiçbiri Zamanı Temalar proje seçeneği ayarlayarak bunu başarmak.

Bu bildirimdoğruyol uygulaması yüksek DPİ haberdar olmak için ilan. Eğer sadece hızlı bir şekilde tezahür karıştırmasını olmadan denemek istiyorsanız, SetProcessDPIAware Ara. Uygulamanız çalıştığında yapacağın ilk şey yap. Tercihen erken ünitesi bölümleri, veya ilk olarak başlatma .dosya Kore.

Eğer uygulama yüksek olduğunu bildirmeniz yok ise ve DPİ farkında sonra Vista olacak 125% üzerinde herhangi bir yazı tipi Ölçekleme için eski bir modda işlemek. Bu oldukça korkunç görünüyor. Bu tuzağa düşmesini önlemek için deneyin.

Windows monitör DPİ güncelleme başına 8.1

Windows 8.1, artık her monitör DPİ ayarları (http://msdn.microsoft.com/en-ca/magazine/dn574798.aspx) için işletim sistemi desteği. Bu farklı görüntüler çok farklı yetenekleri ile bağlı olabilecek modern cihazlar için büyük bir sorundur. Çok yüksek DPİ laptop ekranı ve düşük DPİ harici bir projektör olabilir. Böyle bir senaryoyu destekleyen yukarıda anlatılandan bile daha fazla çalışma gerektirir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Carlos Delgado

    Carlos Delga

    21 HAZİRAN 2011
  • KIT KAT

    KIT KAT

    3 EKİM 2005
  • Mark Hyder

    Mark Hyder

    6 EKİM 2011

İLGİLİ SORU / CEVAPLAR