2013-07-17 13 views
8

(I co mogę z tym zrobić?)Dlaczego skondensowane czcionki nie są poprawnie wyświetlane w FireMonkey?

Jeśli utworzę dwie etykiety w VCL i ustawię jedną na Arial i inną Arial Narrow, zobaczę oczekiwany wynik.

enter image description here

Jeśli zrobić to samo w Firemonkey, druga etykieta nie jest wyświetlana w Arial Narrow. Nawet nie jest wyświetlany w Arial (kropki na i są okrągłe, kształt "s" jest zły itd.).

enter image description here

Czy ktoś wie dlaczego FM (ja testowałem to z Delphi XE4) nie wyświetla czcionki prawidłowo? Czy mogę coś z tym zrobić?

źródło formie VCL:

object Form3: TForm3 
    Left = 0 
    Top = 0 
    Caption = 'Form3' 
    ClientHeight = 198 
    ClientWidth = 475 
    Color = clBtnFace 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -11 
    Font.Name = 'Tahoma' 
    Font.Style = [] 
    OldCreateOrder = False 
    PixelsPerInch = 96 
    TextHeight = 13 
    object Label1: TLabel 
    Left = 24 
    Top = 32 
    Width = 134 
    Height = 14 
    Caption = 'This label is using Arial @11' 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -11 
    Font.Name = 'Arial' 
    Font.Style = [] 
    ParentFont = False 
    end 
    object Label2: TLabel 
    Left = 24 
    Top = 52 
    Width = 152 
    Height = 15 
    Caption = 'This label is using Arial Narrow @11' 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -11 
    Font.Name = 'Arial Narrow' 
    Font.Style = [] 
    ParentFont = False 
    end 
    object Label3: TLabel 
    Left = 24 
    Top = 98 
    Width = 398 
    Height = 36 
    Caption = 'This label is using Arial @32' 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -32 
    Font.Name = 'Arial' 
    Font.Style = [] 
    ParentFont = False 
    end 
    object Label4: TLabel 
    Left = 24 
    Top = 140 
    Width = 429 
    Height = 37 
    Caption = 'This label is using Arial Narrow @32' 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -32 
    Font.Name = 'Arial Narrow' 
    Font.Style = [] 
    ParentFont = False 
    end 
end 

źródło formie FM:

object Form4: TForm4 
    Left = 0 
    Top = 0 
    Caption = 'Form4' 
    ClientHeight = 207 
    ClientWidth = 558 
    FormFactor.Width = 320 
    FormFactor.Height = 480 
    FormFactor.Devices = [dkDesktop, dkiPhone, dkiPad] 
    DesignerMobile = False 
    DesignerWidth = 0 
    DesignerHeight = 0 
    DesignerDeviceName = '' 
    DesignerOrientation = 0 
    object Label1: TLabel 
    Font.Family = 'Arial' 
    StyledSettings = [ssSize, ssStyle, ssFontColor] 
    Height = 17.000000000000000000 
    Position.X = 16.000000000000000000 
    Position.Y = 32.000000000000000000 
    Text = 'This label is using Arial @11' 
    Width = 225.000000000000000000 
    end 
    object Label2: TLabel 
    Font.Family = 'Arial Narrow' 
    StyledSettings = [ssSize, ssStyle, ssFontColor] 
    Height = 17.000000000000000000 
    Position.X = 16.000000000000000000 
    Position.Y = 48.000000000000000000 
    Text = 'This label is using Arial Narrow @11' 
    Width = 225.000000000000000000 
    end 
    object Label3: TLabel 
    Font.Family = 'Arial' 
    Font.Size = 32.000000000000000000 
    StyledSettings = [ssStyle, ssFontColor] 
    Height = 41.000000000000000000 
    Position.X = 16.000000000000000000 
    Position.Y = 104.000000000000000000 
    Text = 'This label is using Arial @32' 
    Width = 433.000000000000000000 
    end 
    object Label4: TLabel 
    Font.Family = 'Arial Narrow' 
    Font.Size = 32.000000000000000000 
    StyledSettings = [ssStyle, ssFontColor] 
    Height = 65.000000000000000000 
    Position.X = 16.000000000000000000 
    Position.Y = 128.000000000000000000 
    Text = 'This label is using Arial Narrow @32' 
    Width = 545.000000000000000000 
    end 
end 
+0

Jaka jest twoja definicja "prawidłowo"? Dlaczego twierdzicie, że VCL jest właściwy, a FMX nie? –

+0

Arial Narrow nie jest domyślną czcionką Windows. Jest instalowany za pośrednictwem pakietu biurowego Windows. Czy próbujesz odtworzyć ten problem za pomocą innej czcionki? Czy próbowałeś odtworzyć ten problem na innym komputerze? W przypadku okien wiele może mieć wpływ na renderowanie czcionki. – Peter

+4

@DavidHeffernan: Ponieważ, jak wskazałem, reprezentacja FM zdecydowanie nie jest czcionką z rodziny Arial. – gabr

Odpowiedz

6

To wydaje się dotyczyć tylko czcionek w rodzinach - jeśli czcionka nie istnieje w czcionek folderze pod własne nazwisko. Arial Narrow, na przykład, jest czcionką w pliku czcionki "Arial" (istnieje w rodzinie i nie jest sama w sobie rodziną).

Zazwyczaj, rodzina tekstu będzie zawierać cztery style tylko

Arial (naiwnego zawiera)

  • Arial Regular
  • Arial Bold
  • Arial Kursywa
  • Arial Bold

"Arial Narrow", jednak istnieje wewnątrz "Arial" rodziny obok standardowych stylów - czyli:

Arial (w rzeczywistości zawiera)

  • Arial Regular
  • Arial Bold
  • Arial Italic
  • Arial Bold Italic
  • Arial Narrow
  • Arial Narrow Bold
  • Arial Narrow Italic
  • Arial Narrow Bold
  • Arial Black

Wydaje się, że FMX szuka tylko jeden poziom głęboko w każdej rodziny czcionek i nie patrzy na dowolny wariant stylu, który odbiega od ścisłych definicji stylu GDI + (zwykłe, pogrubione, kursywa, pogrubiona kursywa).

To także przez inspekcję wpływa na Arial Black - inne przykłady można łatwo znaleźć, przeglądając folder z czcionkami. Franklin Gothic Demi, Gill Sans Ultra Bold, itd ... wszystko, co wynika z powyższego wzoru. Wydaje się, że czcionka jest renderowana w domyślnym interfejsie użytkownika Segoe po napotkaniu tych czcionek.

Rozwiązaniem przejściowym jest użycie Arial i ustawienie właściwości Scale na X=0.82 - nie jest to idealne rozwiązanie, ale jest dość zbliżone do Arial Narrow.

Arial stretch vs Arial Narrow

Prawdopodobnie jest to błąd i powinno być QC'd.

+0

Zauważyłem to również w VCL, jeśli w typie inspektora obiektów wpisz, na przykład, semibold Segoe, który jest pod-czcionką interfejsu Segoe, wyświetli go poprawnie. Ale wykonanie tego samego w Firemonkey nie da prawidłowej czcionki. – Peter

+0

@J ... Otrzymałem własną skondensowaną czcionkę i zainstalowałem ją pod nową nazwą bez rodziny czcionek podrzędnych. Próbowałem użyć tej czcionki w FMX, ale nie został rozpoznany i dlatego został zastąpiony przez Segoe UI. W programie Wordpad moja czcionka działa poprawnie. Problem ten dotyczy nie tylko czcionek w rodzinach. – slotomo

+0

@strono - tworzenie fontów może być trudne, chciałbym zobaczyć tę czcionkę. Wyobrażam sobie najprawdopodobniej, że nie przestrzegano niektórych aspektów ścisłego standardu. Z pewnością nie ma sensu, żeby FMX miał tendencyjność wobec chudych czcionek. –

Powiązane problemy