Delphi:处理用户的字体偏好

前端之家收集整理的这篇文章主要介绍了Delphi:处理用户的字体偏好前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想出了一个获取用户UI字体偏好的调用(as
反对Borland对“MS Sans Serif”的硬编码选择).

让我们假装用户的字体偏好是:

Segoe Print,15pt

我将所有项目的字体,在所有表单中,在所有应用程序中设置为:

Segoe Print,15pt

问题是事情现在被切断了.按钮太小 – 太窄,
太短.标签中的文字被切断等.

该表单具有缩放属性,但不会因字体而异
大小.缩放后的属性按照序列化方式缩放形式
数字“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: Supporting DPI and Default Font Changes
> .NET WinForms: Graphics.MeasureString returns different values than Win32 GetTextExtent
> WPF: How to layout a dialogs in XAML?

解决方法

首先,我们很清楚,Borland不再拥有德尔福. Embarcadero现在拥有德尔福,现在我们处于安全可靠的手中.

好的,就你的问题

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

这就是我们在内部这样做,IDE处理一切都很好.

猜你在找的Delphi相关文章