-1

我有一个关于 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);

爱神

4

1 回答 1

-1

1)首先你应该启用选项Enable High-DpiProject Option -> Application -> your target platform -> Manifest file此选项自 Delphi 10 (Seattle) 起可用。

2) 如果在 W10 OS 中你有不同Scale的,你可以计算和运行TWinControl.ScaleBy(适用于 Forms)调整窗口和一个特定窗口上的所有元素。

请参阅https://github.com/KohrAhr/DelphiDemoPPI上的演示

演示包含TToolButtons控件。

于 2018-11-02T20:54:37.607 回答