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

标签 delphi preferences dpi

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

相关文章:

delphi - 如何在代码编辑器中禁用自动完成代码语句?

delphi - 如何省略 128C 条形码中的前导 0?

delphi - 如何使用 GDI+ 通过 Alpha channel 调整 PNG 图像的大小?

java - 有没有办法在 Windows 下使用 java.util.Preferences 而无需使用注册表作为后端?

适用于 Eclipse 的安卓 Nexus 7 DPI

png - 为 PNG 文件设置 DPI

delphi - 在 "Poodle"更改后让 Indy 调用与 Paypal IPN 一起工作

android - 如何将静态字符串与 XML 字符串资源连接起来?

java - 在 Android 应用程序中存储用户设置的最合适方法是什么

java - 如何在 Android 设备上使用 DPI 正确绘制以英寸为单位的精确长度?