【发布时间】: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 感知组件。