gpt4 book ai didi

delphi - 如何访问继承或继承的图像 Canvas ?

转载 作者:行者123 更新时间:2023-12-03 18:26:02 26 4
gpt4 key购买 nike

我的后代TMyImage = class(ExtCtrls.TImage)需要访问TImage继承的 Canvas(TGraphicControl 的祖先)

例如

procedure TMyImage.Paint;
var
LCanvas: TCanvas;
begin
// need "inherited inherited Canvas"
LCanvas := inherited (inherited Canvas); // of the TGraphicControl

inherited;
end;

以上显然不会编译。
这可以在没有黑客攻击的情况下完成吗 TGraphicControl并使用私有(private)成员 FCanvas ?

这有效:
type
THackGraphicControl = class(TControl)
private
FCanvas: TCanvas;
end;

procedure TMyImage.Paint;
var
LCanvas: TCanvas;
begin
// need "inherited inherited Canvas"
LCanvas := THackGraphicControl(Self).FCanvas;
with LCanvas do
begin
Brush.Bitmap := FAlphaPattern;
FillRect(ClientRect);
Brush.Bitmap := nil;
end;
inherited;
end;

但我想知道是否有一个不依赖于版本的解决方案。

最佳答案

您可以使用类似于您已有的技术,但访问 Canvas属性而不是 FCanvas field 。 Canvas属性是 protected ,这意味着它在技术上是控件界面的一部分,因此您不必担心它在 future 的版本中会发生变化。 (它可能仍然会改变,但这不是你应该担心的事情。)

type
THackGraphicControl = class(TGraphicControl) end;

LCanvas := THackGraphicControl(Self).Canvas;

关于delphi - 如何访问继承或继承的图像 Canvas ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42313384/

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