当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Delphi:处理用户的字体首选项》经验,为你挑选了1个好方法。

我想出了获得用户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;

相关问题

.NET 2.0 WinForm:支持DPI和默认字体更改

.NET WinForms:Graphics.MeasureString返回的值不同于Win32 GetTextExtent

WPF:如何在XAML中布局对话框?

Nick Hodges.. 9

首先,我们很清楚,Borland不再拥有Delphi了.Embarcadero现在拥有德尔福,现在我们安全,安全.

好的,关于你的问题.

诀窍是将TForm.AutoScroll设置为False并确保您的开发机器设置为小字体.单独保留TForm.Scaled(默认值为True).

这就是我们在这里内部做的事情,IDE处理的一切都很好.



1> Nick Hodges..:

首先,我们很清楚,Borland不再拥有Delphi了.Embarcadero现在拥有德尔福,现在我们安全,安全.

好的,关于你的问题.

诀窍是将TForm.AutoScroll设置为False并确保您的开发机器设置为小字体.单独保留TForm.Scaled(默认值为True).

这就是我们在这里内部做的事情,IDE处理的一切都很好.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有