这是问题所在。 TFont对象以96 DPI分辨率保存(流式传输到文件),Size
属性设置为 9pt 。然后DPI更改为192,当反序列化对象时,其Size
属性值变为 5pt 。
环境:app是一个VCL表单应用,标记为DPI感知(“true / PM”)。 Form的Scaled属性不会影响行为,因为TFont对象是使用WriteComponent
/ ReadRootComponent
函数在表单对象之外保存/加载的。
使用测试应用程序说明问题的屏幕截图。该应用程序仅将TFont保存到文件中,“加载”按钮将其读回并在备忘录中显示加载字体的大小/高度。
屏幕截图1:程序在96dpi系统上启动,字体为Tahoma 8pt,保存到文件并加载。一切都很好。
序列化字体保存在文件中:
object TTest
F.Charset = DEFAULT_CHARSET
F.Color = clWindowText
F.Height = -11
F.Name = 'Tahoma'
F.Style = []
end
Screesnhot 2:在192dpi系统上启动,加载序列化字体,其大小变为4pt。
Delphi保存Height属性,并且正在根据Height计算Size,从而产生更小的字体......
有没有办法,而不是手动缩放大小(NewHeight = Height * SystemDPI / 96),以使Delphi保留“pt”字体大小而不管DPI设置如何?我觉得我在这里错过了什么...