【问题标题】:Delphi High-DPI ComponentsDelphi 高 DPI 组件
【发布时间】:2018-10-31 13:55:49
【问题描述】:

我有一个关于 Delphi 中的高 DPI 应用程序的问题。 在 Internet 上冲浪 我发现了 Žarko Gajić 发表的一系列文章。这些文章谈到了为 High-DPI 创建 Delphi 应用程序。 该方法描述工作正常,但是作者在每个应用程序中都使用它;例如谈论 TSpeedButtons。

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

FGlyphs: TObjectDictionary<TGlyphState, TPicture>

在使用此组件的应用程序中,我从 24 x 24 像素的文件中加载 PNG 图像。当我在 4K 显示器上执行应用程序时,这些图像变得非常小。 如果我应用 Žarko 方法一切正常,但这样每个应用程序都需要使用我的组件来实现此解决方案。

如何直接在组件内部实现呢?我想在 SetGlyph 过程中实现它,就像下面的代码,但我不知道这是不是正确的地方。

procedure TNCRSpeedButton.SetGlyphs(Index: TGlyphState; Value: TPicture);
begin
  FGlyphs.Items[Index].Assign(Value);
end;

TGlyphState 是这样定义的:

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

爱神

【问题讨论】:

  • 高 DPI 感知取决于每个单独的应用程序,而不是每个单独的组件。如果应用程序不支持高 DPI 感知,则您不能拥有高 DPI 感知组件。

标签: delphi highdpi


【解决方案1】:

1) 首先您应该在Project Option -&gt; Application -&gt; your target platform -&gt; Manifest file 中启用选项Enable High-Dpi。此选项自 Delphi 10(西雅图)起可用。

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

在https://github.com/KohrAhr/DelphiDemoPPI上查看演示

演示包含TToolButtons 控件。

【讨论】:

    猜你喜欢
    • 2017-04-20
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 2021-10-13
    • 2015-02-04
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    相关资源
    最近更新 更多