gpt4 book ai didi

Delphi TFontDialog - 如何缩放高 Dpi?

转载 作者:行者123 更新时间:2023-12-04 11:33:52 26 4
gpt4 key购买 nike

我想使用 TFontDialog在高 dpi 显示器上使用 Delphi 10.3.3。

但不幸的是,Delphi 并没有真正扩展内容。
(检查示例(Beispiel)的位置!)

我有 2 个显示器。主要有 96ppi,另一个 144ppi。
我的应用程序正在第二个上运行。

你是如何在你的应用程序中解决这样的问题的?
有没有办法解决这个问题,还是我必须希望 Delphi 10.4 能解决这个问题?

使用 200% 或更高时,您将无法再读取字体大小。

enter image description here

编辑 (2020-01-13):

一切都取决于 Delphi 的 DPI 感知集:

无、无意识和系统意识:

FontDialog 的大小为 648x518 像素,一切都很好,但很模糊

每个监视器:

FontDialog 的大小为 433x346 像素且太小 (100%)

每个监视器 V2:

FontDialog 的大小为 648x528 像素,一切都很清晰但不正确(见图)

最佳答案

不幸的是TFontDialog ,或者准确地说是基础ChooseFont来自 Windows,(尚)不支持每个 Monitor V2 DPI 感知。作为一种解决方法,您可以在显示对话框时暂时切换到系统感知,然后再切换回来。
为了实现这一点,我建议使用一个覆盖 TFontDialog 的内插器类。 :

type
TFontDialog = class(Vcl.Dialogs.TFontDialog)
protected
function TaskModalDialog(DialogFunc: Pointer; var DialogData): Bool; override;
end;

function TFontDialog.TaskModalDialog(DialogFunc: Pointer; var DialogData): Bool;
var
previousDpiContext: DPI_AWARENESS_CONTEXT;
begin
previousDpiContext := SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_SYSTEM_AWARE);
try
Result := inherited TaskModalDialog(DialogFunc, DialogData);
finally
SetThreadDpiAwarenessContext(previousDpiContext);
end;
end;
请注意,提供给对话框和从对话框中检索的字体大小基于系统 DPI,并且必须从/到它所使用的监视器 DPI 进行缩放。

关于Delphi TFontDialog - 如何缩放高 Dpi?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59679860/

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