【发布时间】:2016-06-27 12:50:57
【问题描述】:
我创建了一个测试组件
unit Control1;
interface
uses
System.SysUtils, System.Classes, FMX.Types, FMX.Controls;
type
TTestComp = class(TControl)
private
i: integer;
protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
published
property Width;
property Height;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Test', [TTestComp]);
end;
{ TTestComp }
constructor TTestComp.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
i := 0;
end;
procedure TTestComp.Paint;
begin
inherited;
inc(i);
canvas.BeginScene;
canvas.Fill.Color := $FF000000;
canvas.FillRect(localrect, 0, 0, [], 1);
canvas.Fill.Color := $FFFFFFFF;
canvas.FillText(localrect, IntToStr(i), false, 1, [], TTextAlign.Center);
canvas.EndScene;
end;
end.
问题来了:
- 组件在左上角绘制
- 调整表单大小时调用了过多的绘制方法。
刚刚调整大小的表格。
我有很多组件,都是按照这个原理构建的。当我改变表单的大小时,它们开始滞后(低 FPS)。
标准组件(TButton 等)工作正常
【问题讨论】:
-
如何确定 Paint 调用次数过多?应该调用多少次,被调用多少次?
-
@DavidHeffernan 看看我的方法中的 Paint 过程。每次重新绘制时都会增加 var "I"。
-
表示它被调用了多少次。如何确定应该调用多少次,以及为什么这个数字太大。
标签: delphi firemonkey delphi-xe7