Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi高DPI组件_Delphi_Highdpi - Fatal编程技术网

Delphi高DPI组件

Delphi高DPI组件,delphi,highdpi,Delphi,Highdpi,我有一个关于Delphi中高DPI应用程序的问题。 在互联网上,我发现了一系列由阿尔科·加基奇发表的文章。这些文章讨论了如何创建适合高DPI的Delphi应用程序。 该方法描述的效果很好,但作者在每个应用程序中都使用它;例如,谈到TSpeedButtons 我的问题是:有没有一种方法可以在组件中实现这种行为?例如,我正在实现一个类似Embarcadero TSpeedButton但使用透明PNG图像的简单组件。 组件内的图像在设计时从一些PNG图像加载。我有一个TObjectDictionary

我有一个关于Delphi中高DPI应用程序的问题。 在互联网上,我发现了一系列由阿尔科·加基奇发表的文章。这些文章讨论了如何创建适合高DPI的Delphi应用程序。 该方法描述的效果很好,但作者在每个应用程序中都使用它;例如,谈到TSpeedButtons

我的问题是:有没有一种方法可以在组件中实现这种行为?例如,我正在实现一个类似Embarcadero TSpeedButton但使用透明PNG图像的简单组件。 组件内的图像在设计时从一些PNG图像加载。我有一个TObjectDictionary,我在其中注册了按钮状态:enabled、disabled等等。它是这样声明的:

FGlyphs: TObjectDictionary<TGlyphState, TPicture>
TGlyphState的定义如下:

TGlyphState = (gtEnabled, gtDisabled, gtDown, gtOver);
Eros

1)首先,您应该在
项目选项->应用程序->目标平台->清单文件中启用选项
启用高Dpi
。此选项自Delphi 10(西雅图)起提供

2) 如果在W10操作系统中有不同的
比例
,则可以计算并运行调整窗口和一个特定窗口上的所有元素的
TWinControl.ScaleBy
(可用于表单)

请参阅上的演示


演示包含
t工具按钮
控件。

高DPI感知取决于每个应用程序,而不是每个组件。如果应用程序不支持高DPI感知,则不能使用高DPI感知组件。
TGlyphState = (gtEnabled, gtDisabled, gtDown, gtOver);