我总是写非视觉成分;他们的创作非常简单,他们在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中,是否必须编写另一个继承自另一个类的组件?
正如我所说,这是我第一次使用视觉成分写作,所以我希望有人能以正确的方式向我展示!
答案 0 :(得分:2)
在VCL中,支持画布的第一个类是TCustomcontrol
,它是TWinControl
的后代。
http://docwiki.embarcadero.com/Libraries/Seattle/en/Vcl.Controls.TCustomControl
在FMX中,允许绘制例程的基类是TControl。
但请记住,在FireMonkey中渲染可视组件与在VCL中有很大不同。因此,如果您考虑在FMX中重复使用VCL代码,反之亦然,我担心它可能无法实现。