Рисование в FireMonkey TControl.Canvas выводит в TForm Canvas - PullRequest
0 голосов
/ 24 сентября 2019

Я только что начал переводить огромную кодовую базу в FireMonkey, но у меня возникли некоторые трудности.

Одна вещь, которая меня подводит, - это серьезная проблема с TControl.Canvas.Если я не называю это правильно, то рисование в TCanvas фактически рисует на холсте формы (точнее, это рисует в форме 0,0 в форме, а не в клиентском источнике моего пользовательского элемента управления).

Например, в событии MouseMove мне нужно нарисовать выделение.Вот пример кода:

procedure TMyCustomControl.MouseMove(Shift: TShiftState; sX, sY: Single);
begin
  inherited;

  ...
  Paint();
end;

procedure TMyCustomControl.Paint();
begin
  PaintToCanvas(Canvas);
end; 

Используя этот код в FireMonkey, рисование выполняется в форме (т.е. выводится на 0,0 в форме).

Если я изменю код вMouseMove to Repaint ();затем он рисует правильно для моего элемента управления.

Ясно, что с FMX мне нужно запустить фактическое рисование элемента управления (а не просто рисовать напрямую), иначе Canvas недопустим.

Что мне нужноэто объяснение того, почему он функционирует так.В моем коде много рисования на холсте, поэтому мне нужно это понять, чтобы я мог найти другой несовместимый код.

Система: Delphi 10.3 Rio, 32- или 64-битные приложения Windows.

...