gpt4 book ai didi

Delphi:处理用户的字体首选项

转载 作者:行者123 更新时间:2023-12-03 14:41:14 27 4
gpt4 key购买 nike

我已经提出了获取用户 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com