【发布时间】:2017-09-25 16:04:35
【问题描述】:
我一直在写非视觉组件;它们的创建非常简单,并且它们在 VCL 和 FMX 下同样有效。到目前为止一切顺利,但现在我遇到了问题。
我以前从TComponent 继承,但现在我不能了,因为我的组件名为TRedistPreview 确实需要这样的过程:
procedure drawPreview(area: TCanvas);
此过程必须在某处绘制一些东西(形状、线条和颜色),例如在TRectangle 中。我在网上看到TComponent没有绘图能力,所以我应该继承其他东西。我找到了TWinControl(但那是仅限 VCL)和 TCustomControl(也仅限 VCL)。
你能告诉我我应该继承什么来获得画布吗?我的意思是,我想替换:
TRedistPreview = class(TComponent)
end;
与:
TRedistPreview = class(TSomeClassThatHasCanvas)
end;
我可以调用procedure drawPreview(area: TCanvas); 并在表面上绘图(如TRectangle)。
我正在使用 Canvas 寻找层次结构中可能最低的类。
由于这个组件在 Windows 和 Android 下对我非常有用,我正在寻找一个 Firemonkey 实现。根据我的研究,我发现我可以继承 TRectangle,它位于 FMX.Objects 内部,但我不知道这是否是正确的选择。
我该怎么办?
另外,如果我需要这个组件在 VCL 中,我是否必须编写另一个从另一个类继承的组件?
正如我所说,这是我第一次编写可视化组件,所以我希望有人告诉我正确的方法!
【问题讨论】:
-
从 TComponent 驱动绝对没问题。完全没有理由不能实现在画布上绘制组件的方法。当然,这种设计可能是错误的。也许你需要一个视觉控制。也许你要求错了。
-
是的,VCL 和 FMX 不以任何方式相互兼容 - 不是在编写一个适用于两者的单一控件的意义上。这基本上就像试图将柴油发动机从半卡车安装到迷你库珀中。
-
作为一个快速的开始,你可以看看一些预先写好的东西,比如我在这个问题中的代码:stackoverflow.com/questions/31767346/… 研究它并实现你自己的东西。
-
其实我的那个控制继承自
TShape。
标签: delphi firemonkey