Перейти к содержанию
Fire Monkey от А до Я
  • 0

В каких координатах выполняется отрисовка на канве?


Igor

Вопрос

Krug1: TCircle лежащий на TabItem4TabControl1 лежащим на Form1

 

Проблема в том, что текст кажется рисуется по координатам формы, а не Krug1, или TabItem4, или TabControl1 (заменял в коде krug1.Canvas на TabControl1.Tabs[3].Canvas всё равно по координатам формы рисует).

 

В теории представляю, что если по координатам круга то TRectF.Create(0, 0, krug1.Width, krug1.Height) должен работать, но нет.

 

post-365-0-29391100-1409840640_thumb.png

 

В коде (кусок из события Click объекта krug1) ниже по логике в TRectF.Create с опорой на координаты Tab'а, хотя канва krug1, в итоге рисует над TabControl1:

with krug1.Canvas do
  begin
    BeginScene;
    try
      Fill.Color := TAlphaColorRec.Red;
      Fill.Kind := TBrushKind.Solid;
      Font.Size := 10;
      FillText(TRectF.Create(krug1.Position.X, krug1.Position.Y, krug1.Position.X+krug1.Width, krug1.Position.Y+krug1.Height), 'Текст', False, 1, [], TTextAlign.Center, TTextAlign.Center);
    finally
      EndScene;
    end;
  end;
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Администраторы

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

  1. Канва одна на всю форму и на все контролы формы.
  2. Из пункта 1 следует - Значит каждый контрол рисует себя на одной общей канве
  3. При передачи управления на отрисовку контролу, канве задаются настройки (матрица трансформации, кисти и тд) таким образом, чтобы отрисовка выполнялась в локальных координатах контрола.
  4. Значит если вы рисуете в другом месте, то отрисовка выполняется в глобальных координатах формы. По этому отрисовку нужно выполнять в абсолютных координатах (координатах формы)
  5. Прямую отрисовку на форме нельзя выполнять по нажатию на кнопку. Так как в FMX есть четкая последовательность фаз отрисовки. Места отведенные для рисования - это событие OnPaint. В противном случае, не гарантируется корректная отрисовка на всех платформах.
Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...