2016-06-27 3 views
-1

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

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. Слишком много метод краски требует при изменении размеров формы ,

Just resized form

Просто изменить размер формы.

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

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

+0

Как определить, что Paint называется слишком много раз? Сколько раз он должен называться и сколько раз или называется? –

+0

@DavidHeffernan посмотрите на процедуру Paint в моем методе. При каждом перекраске увеличивается значение var «I». –

+0

Это вопрос, сколько раз он называется. Как вы можете определить, сколько раз ** следует вызывать **, и почему этот номер слишком велик. –

ответ

0

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

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

2.Too много методов обработки краски при изменении размера.

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

Смежные вопросы