2013-07-17 59 views
8

(Và tôi có thể làm gì với nó?)Tại sao phông chữ đậm đặc không được hiển thị đúng trong FireMonkey?

Nếu tôi tạo hai nhãn trong VCL và đặt một nhãn để sử dụng Arial và Arial Narrow khác, tôi sẽ thấy kết quả mong đợi.

enter image description here

Nếu tôi làm như vậy trong Firemonkey là nhãn thứ hai không được hiển thị trong Arial Narrow. Nó thậm chí không được hiển thị trong Arial (dấu chấm trên của tôi là tròn, hình dạng của 's' là tất cả sai vv).

enter image description here

Có ai biết tại sao FM (Tôi đã thử nghiệm này với Delphi XE4) không hiển thị font chữ đúng? Tôi có thể làm được gì không?

Nguồn cho các hình thức 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 

Nguồn cho các hình thức 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

Định nghĩa của bạn về "đúng" là gì? Tại sao bạn khẳng định rằng VCL là thích hợp, và FMX thì không? –

+0

Arial Narrow không phải là phông chữ mặc định của Windows. Nó được cài đặt thông qua bộ Windows Office. Bạn đã cố gắng sao chép vấn đề này qua bất kỳ phông chữ nào khác không? Bạn đã cố tái tạo sự cố này trên máy tính khác chưa? Với cửa sổ, rất nhiều ảnh hưởng đến cách phông chữ được hiển thị. – Peter

+4

@DavidHeffernan: Bởi vì, như tôi đã chỉ ra, biểu diễn FM rõ ràng không phải là phông chữ từ gia đình Arial. – gabr

Trả lời

6

Điều này dường như chỉ ảnh hưởng đến các phông chữ trong gia đình - nếu font không tồn tại trong các phông chữ thư mục dưới tên riêng của họ. Arial Narrow, ví dụ, là một phông chữ trong tập tin phông chữ "Arial" (nó tồn tại trong một gia đình và không phải là, mỗi gia đình, một gia đình cho chính nó).

Thông thường họ phông chữ sẽ bao gồm bốn phong cách chỉ

Arial (ngây thơ chứa)

  • Arial Regular
  • Arial Bold
  • Arial Italic
  • Arial Bold Italic

"Arial Narrow" Tuy nhiên, tồn tại trong gia đình "Arial" cùng với phong cách tiêu chuẩn - ví dụ:

Arial (trên thực tế chứa)

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

Dường như FMX chỉ tìm kiếm một mức độ sâu bên trong bất kỳ họ phông chữ nhất định và không nhìn vào bất kỳ biến thể kiểu cách lệch khỏi định nghĩa kiểu GDI + (Regular, Bold, Italic, Bold Italic).

Điều này cũng bằng cách kiểm tra, ảnh hưởng đến Arial Black - các ví dụ khác dễ tìm bằng cách chạy qua thư mục phông chữ của bạn. Franklin Gothic Demi, Gill Sans Ultra Bold, v.v. bất cứ thứ gì theo mô hình trên. Phông chữ dường như được hiển thị trong giao diện người dùng Segoe mặc định khi các phông chữ này gặp phải.

Giải pháp stopgap là sử dụng Arial và đặt thuộc tính Scale thành X=0.82 - không hoàn hảo, nhưng nó khá gần với Arial Narrow.

Arial stretch vs Arial Narrow

Đây có thể là lỗi và phải là QC'd.

+0

Tôi nhận thấy điều này là tốt, trong VCL nếu bạn trong loại thanh tra đối tượng trong ví dụ Segoe UI semibold đó là một phông chữ phụ của Segoe UI nó sẽ hiển thị nó một cách chính xác. Nhưng làm như vậy trong Firemonkey sẽ không tạo ra font đúng. – Peter

+0

@J ... Tôi đã bắt nguồn phông chữ riêng của mình và cài đặt nó dưới tên mới mà không có bất kỳ họ phông chữ phụ nào. Tôi đã cố gắng sử dụng phông chữ này trong FMX, nhưng không được nhận dạng và do đó được thay thế bằng giao diện người dùng Segoe. Trong Wordpad, phông chữ của tôi hoạt động chính xác. Vì vậy, vấn đề đó không chỉ ảnh hưởng đến phông chữ trong gia đình. – slotomo

+0

@slotomo - xây dựng phông chữ có thể khó khăn, tôi sẽ quan tâm để xem phông chữ này. Tôi tưởng tượng nhiều khả năng rằng một số khía cạnh của tiêu chuẩn nghiêm ngặt không được tôn trọng. Chắc chắn nó làm cho cảm giác ít rằng FMX sẽ có một thiên vị chống lại phông chữ gầy. –