我已经提出了获取用户 UI 字体首选项的调用(如 反对 Borland 硬编码选择“MS Sans Serif”)。
假设用户的字体偏好是:
Segoe Print, 15pt
我将所有表单、所有应用程序中所有项目的字体设置为:
Segoe Print, 15pt
问题是事情现在被切断了。按钮太小 - 太窄, 过短。标签中的文本被切断等..
表单具有 Scaled 属性,但这不会根据字体而改变 尺寸。缩放属性在基于序列化时缩放表单 数字“0”的高度。
我在帮助中找不到任何关于 Borland 希望我如何支持的内容 用户的 Windows 应用程序首选项。
如何处理用户字体首选项?
注意:我从 Embargadero 的新闻组服务器交叉发布了此内容,因为 Embargadero 的新闻服务器似乎快要死了,或者正在审查,或者损坏了,或者需要登录。
<小时/>更新 1
我说的是用户的字体偏好,而不是 DPI 设置。即:想象以下语言中立伪代码:
procedure TForm1.FormCreate(Sender: TObject);
var
FontFace: string;
FontHeight: Integer;
begin
GetUserFontPreference(out FontFace, out FontHeight);
Self.Font.Name := FontFace;
Self.Font.Height := FontHeight;
end;
注意:这不是我的实际代码(毕竟它是语言中立的伪代码)。但此外,您需要递归地检查表单上的每个控件,在需要更改时更改字体。当字体应用了与其父字体不同的样式(例如粗体)并且不再继承其父字体时,需要手动设置。
<小时/>根据lkessler的请求,以下是从 Windows 检索用户 UI 字体首选项的代码:
procedure GetUserFontPreference(out FaceName: string; out PixelHeight: Integer);
var
lf: LOGFONT;
begin
ZeroMemory(@lf, SizeOf(lf));
//Yes IconTitleFont (not SPI_GETNONCLIENTMETRICS MessageFont)
if SystemParametersInfo(SPI_GETICONTITLELOGFONT, SizeOf(lf), @lf, 0) then
begin
FaceName := PChar(Addr(lf.lfFaceName[0]));
PixelHeight := lf.lfHeight;
end
else
begin
{
If we can't get it, then assume the same non-user preferences that
everyone else does.
}
FaceName := 'MS Shell Dlg 2';
PixelHeight := 8;
end;
end;
相关问题
最佳答案
首先,我们要明确的是,Borland 不再拥有 Delphi。 Embarcadero 现在拥有德尔福,我们现在处于安全可靠的手中。
好的,回答你的问题。
诀窍是将 TForm.AutoScroll 设置为 False 并确保您的开发计算机设置为小字体。保留 TForm.Scaled(它的默认值为 True)。
这就是我们在内部的做法,IDE 可以很好地处理一切。
关于Delphi:处理用户的字体首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/401075/