我创建了一个测试组件
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.
问题在于:
答案 0 :(得分:0)
1.Component正在左上角绘图
您的组件正在精确绘制它的位置(Position
属性)。如果您没有为Position.X
和Position.Y
分配任何值,则默认值0将用于两者。
2.调整表单大小时,调用很多绘制方法。
当您调整表单大小时,所有组件都会重新绘制,同样也是f.ex.纽扣。在81个控件的测试中,我没有意识到任何滞后(但我认为你的实际控件比这个示例控件做了更多的绘画)。