【问题标题】:Why are condensed fonts not displayed properly in FireMonkey?为什么在 FireMonkey 中不能正确显示压缩字体?
【发布时间】:2013-07-16 01:52:18
【问题描述】:

(我能做些什么呢?)

如果我在 VCL 中创建两个标签并设置一个使用 Arial,另一个使用 Arial Narrow,我会看到预期的结果。

如果我在 Firemonkey 中做同样的事情,第二个标签不会显示在 Arial Narrow 中。它甚至不显示在 Arial 中(i 上的点是圆形的,'s' 的形状都是错误的等等)。

有人知道为什么 FM(我用 Delphi XE4 测试过)没有正确显示字体吗?有什么我可以做的吗?

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

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

【问题讨论】:

  • 你对“正确”的定义是什么?为什么你断言 VCL 是正确的,而 FMX 不是?
  • Arial Narrow 不是默认的 Windows 字体。它是通过 Windows Office 套件安装的。您是否尝试过通过任何其他字体重现此问题?您是否尝试在另一台计算机上重现此问题?对于 Windows,很多因素都会影响字体的呈现方式。
  • @DavidHeffernan:因为,正如我所指出的,FM 表示显然不是 Arial 家族的字体。
  • 我会尝试使用所有已安装的字体,然后比较 VCL 和 FMX,然后列出失败的字体。也许其中有一个模式。
  • 是 trueType 还是 OpenType?

标签: delphi fonts firemonkey


【解决方案1】:

这似乎只影响系列中的字体 - 如果字体不存在于其自己系列名称下的字体文件夹中。例如,Arial Narrow 是“Arial”字体文件中的一种字体(它存在于一个家族中,本身并不是一个家族)。

通常一个字体系列只包含四种样式

Arial(天真地包含)

  • 宋体常规
  • 宋体粗体
  • Arial 斜体
  • Arial 粗斜体

然而,“Arial Narrow”与标准样式一起存在于“Arial”系列中 - 即:

Arial(实际包含)

  • 宋体常规
  • 宋体粗体
  • Arial 斜体
  • Arial 粗斜体
  • Arial 窄版
  • Arial 窄粗体
  • Arial 窄斜体
  • Arial 窄粗斜体
  • 宋体黑

FMX 似乎只在任何给定字体系列中查看了一个级别,并且没有查看任何偏离严格 GDI+ 样式定义(Regular、Bold、Italic、Bold Italic)的样式变体。

通过检查,这也会影响 Arial Black - 通过运行您的字体文件夹很容易找到其他示例。 Franklin Gothic Demi、Gill Sans Ultra Bold 等......任何遵循上述模式的东西。遇到这些字体时,字体似乎会在默认的 Segoe UI 中呈现。

权宜之计是使用 Arial 并将 Scale 属性设置为 X=0.82 - 这并不完美,但它非常接近 Arial Narrow。

这可能是一个错误,应该进行 QC。

【讨论】:

  • 我也注意到了这一点,在 VCL 中,如果您在对象检查器中输入例如 Segoe UI semibold,它是 Segoe UI 的子字体,它将正确显示。但是在 Firemonkey 中做同样的事情不会产生正确的字体。
  • @J... 我派生了自己的压缩字体,并以新名称安装它,没有任何子字体系列。我曾尝试在 FMX 中使用此字体,但无法识别,因此被 Segoe UI 取代。在写字板中,我的字体可以正常工作。所以这个问题不仅会影响家族中的字体。
  • @slotomo - 字体构建可能很棘手,我很想看看这个字体。我想很可能是严格标准的某些方面没有得到遵守。当然,FMX 对瘦字体有偏见是没有意义的。
  • 是否有关于此字体问题的 quality.embarcadero.com 报告?如果不是,gabr 应该创建一个,以便 Embarcadero 正式意识到这一点。如果之后我们被告知报告编号,如果我们发现新的详细信息,我们可以跟踪它或为报告做出贡献。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
相关资源
最近更新 更多