Слишком много вызовов метода рисования
Я создал тестовый компонент
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 и т. Д.) Работают нормально
1 ответ
1.Компонент рисует в левом верхнем углу
Ваш компонент рисует именно там, где он находится (Position
имущество). Если вы не назначаете какие-либо значения Position.X
а также Position.Y
значения по умолчанию 0 используются для обоих.
2. Слишком много вызовов метода рисования при изменении размера формы.
При изменении размера формы все компоненты перекрашиваются, например, f.ex. кнопок. В тесте с 81 вашим элементом управления я не обнаружил никакой задержки (но я предполагаю, что ваши фактические элементы управления делают больше рисования, чем этот пример элемента управления).