Слишком много вызовов метода рисования

Я создал тестовый компонент

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.

Вот проблема:

  1. Компонент рисует в левом верхнем углу
  2. Слишком много вызовов методов рисования при изменении размера формы.

Просто изменил форму

Просто изменил форму.

У меня много компонентов, построенных по этому принципу. И когда я изменяю размер формы, они начинают отставать (низкий FPS).

Стандартные компоненты (TButton и т. Д.) Работают нормально

1 ответ

1.Компонент рисует в левом верхнем углу

Ваш компонент рисует именно там, где он находится (Position имущество). Если вы не назначаете какие-либо значения Position.X а также Position.Y значения по умолчанию 0 используются для обоих.

2. Слишком много вызовов метода рисования при изменении размера формы.

При изменении размера формы все компоненты перекрашиваются, например, f.ex. кнопок. В тесте с 81 вашим элементом управления я не обнаружил никакой задержки (но я предполагаю, что ваши фактические элементы управления делают больше рисования, чем этот пример элемента управления).

Другие вопросы по тегам