Firemonkey 控件不绘制
Posted
技术标签:
【中文标题】Firemonkey 控件不绘制【英文标题】:Firemonkey controls do not draw 【发布时间】:2016-09-09 08:37:55 【问题描述】:在尝试绘制控件时,我根本不知道自己做错了什么。
我尝试过使用 TCanvas.BeginScene()/TCanvas.EndScene(),尝试使用其他方法(例如主窗体 OnPaint())进行绘画。 我试过 TControl.InvalidateRect()。 我什么也得不到。
这是我的测试应用程序中的内容:
type
TTestControl = class(TControl)
protected
procedure Paint; override;
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
fTestControl: TTestControl;
end;
procedure TTestControl.Paint;
begin
Canvas.Fill.Color := TColorRec.Blueviolet;
Canvas.FillEllipse(ClipRect, AbsoluteOpacity);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
fTestControl := TTestControl.Create(Self);
fTestControl.Parent := Self;
fTestControl.Align := TAlignLayout.Client;
end;
根据网上的说法,应该够了。 有什么建议吗?
【问题讨论】:
【参考方案1】:Canvas.Fill.Color
是 TAlphaColor
。
换行
Canvas.Fill.Color := TColorRec.Blueviolet;
到
Canvas.Fill.Color := TAlphaColors.Blueviolet;
【讨论】:
【参考方案2】:你的 Paint 方法应该是这样的:
procedure TTestControl.Paint;
begin
inherited;
Canvas.BeginScene;
Canvas.Fill.Color := claBlueviolet;
Canvas.FillEllipse(ClipRect, AbsoluteOpacity);
Canvas.EndScene;
end;
我也认为你应该重写 TControl 的 DoPaint 方法而不是 Paint。
【讨论】:
实际上它应该有一个try
/ finally
块。但这并不能解决这个问题。
我相信它们在 TControl.Paint 中是多余的,因为它们已经在 FMX 代码的其他地方完成了。以上是关于Firemonkey 控件不绘制的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Firemonkey 的 TTabItem 中插入另一个控件
实现 TComponentEditor 的自定义 Firemonkey 组件。在设计时将子控件添加到父控件