2013-07-17 11 views
8

(E cosa posso fare a riguardo?)Perché i font condensati non vengono visualizzati correttamente in FireMonkey?

Se creo due etichette in VCL e ne imposto uno per utilizzare Arial e un altro Arial Narrow vedrò un risultato previsto.

enter image description here

Se faccio lo stesso in FireMonkey, la seconda etichetta non è visualizzato in Arial Narrow. Non è nemmeno visualizzato in Arial (i punti su i sono rotondi, la forma di "s" è completamente sbagliata ecc.).

enter image description here

Qualcuno sa perché FM (stavo testando questo con Delphi XE4) non visualizza il tipo di carattere in modo corretto? C'è qualcosa che posso fare al riguardo?

Fonte per la forma 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 

sorgente per il modulo 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

Qual è la tua definizione di "correttamente"? Perché affermi che VCL è corretto e FMX no? –

+0

Arial Narrow non è un font Windows predefinito. È installato tramite la suite Office di Windows. Hai provato a riprodurre questo problema tramite altri font? Hai provato a riprodurre questo problema su un altro computer? Con Windows, molto può influenzare il rendering del font. – Peter

+4

@DavidHeffernan: Perché, come ho sottolineato, la rappresentazione FM non è chiaramente un font della famiglia Arial. – gabr

risposta

6

Questo sembra interessare solo i caratteri all'interno delle famiglie - se il carattere non esiste in cartella di caratteri sotto il proprio nome di famiglia. Arial Narrow, ad esempio, è un font all'interno del file di font "Arial" (esiste all'interno di una famiglia e non è, di per sé, una famiglia a sé stante).

In genere una famiglia di caratteri dovrebbe includere i quattro stili solo

Arial (contiene ingenuamente)

  • Arial Regular
  • Arial Bold
  • Arial Corsivo
  • Arial grassetto corsivo

"Arial Narrow", tuttavia, esiste all'interno della famiglia "Arial" a fianco degli stili standard - vale a dire:

Arial (contiene in realtà)

  • Arial Regular
  • Arial Bold
  • Arial Italic
  • Arial Bold Italic
  • Arial Narrow
  • Arial Narrow Bold
  • Arial Narrow Italic
  • Arial Narrow grassetto corsivo
  • Arial Black

Sembra che FMX è solo alla ricerca di un livello profondo di qualsiasi famiglia di font e non sta guardando in qualsiasi variante di stile che si discosta dalle rigide definizioni di stile GDI + (normale, grassetto, corsivo, grassetto corsivo).

Questo anche, per ispezione, influenza Arial Black - altri esempi sono facili da trovare scorrendo nella cartella dei caratteri. Franklin Gothic Demi, Gill Sans Ultra Bold, ecc ... tutto ciò che segue il modello sopra. Il carattere sembra essere visualizzato nell'interfaccia utente di Segoe predefinita quando vengono rilevati questi tipi di carattere.

Una soluzione di stopgap consiste nell'utilizzare Arial e impostare la proprietà su X=0.82 - non è perfetta, ma è abbastanza vicina ad Arial Narrow.

Arial stretch vs Arial Narrow

Questo è probabilmente un bug e dovrebbe essere QC'd.

+0

Ho notato anche questo, in VCL se si digita nell'ispettore dell'oggetto, ad esempio il semibold Segoe UI, che è un font secondario dell'interfaccia utente di Segoe, lo visualizzerà correttamente. Ma fare lo stesso in Firemonkey non produrrà il font corretto. – Peter

+0

@J ... Avevo ricavato il mio font condensato e l'ho installato sotto un nuovo nome senza alcuna famiglia di caratteri secondari. Avevo provato a usare questo font in FMX, ma non è riconosciuto e quindi sostituito con l'interfaccia utente di Segoe. In Wordpad il mio font funziona correttamente. Quindi quel problema non riguarda solo i caratteri all'interno delle famiglie. – slotomo

+0

@slotomo: la creazione dei font può essere complicata, sarei interessato a vedere questo tipo di carattere. Immagino molto probabilmente che non sia stato rispettato alcun aspetto dello stretto standard. Sicuramente non ha molto senso che FMX abbia un pregiudizio contro i caratteri magri. –

Problemi correlati