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

Отрисовка на форме затирает компоненты


Андрей Рулин

Вопрос

Опубликовано

Если я в OnPaint формы провожу такую прорисовку

 

Canvas.BeginScene();
Canvas.DrawBitmap(MainBmp,r1,r2,1,False);
Canvas.EndScene();

То затираются все Label , Edit  и всё прочее на форме.  Как сделать ,чтобы у меня отрисовывалась картинка , которую я хочу. А поверх неё эти Label , Edit и т.д. ?  

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

  • 0
Опубликовано (изменено)

Если в PaintBox - всё равно затирается.  То есть если код заменить на 

PaintBox1.Canvas.BeginScene();
PaintBox1.Canvas.DrawBitmap(MainBmp,r1,r2,1,False);
PaintBox1.Canvas.EndScene();

то затирается. Причём даже игнорируется расположение этого PaintBox на форме. 

Второй вариант какой-то изврат. Тогда эти Label вообще проще выкинуть на помойку и использовать что-то вроде Canvas.FillText (не удивлюсь, правда если это работать не будет, в VСL по крайней мере Canvas.TextOut работал) . 

 

Собственно вот пример что должно быть , есть карта, есть цифры. Цифры должны быть текстом, потому, что динамически меняется цвет. И числа тоже могут меняться. 

 

 

 

Карта.jpg

Изменено пользователем Андрей Рулин
Дополнение
  • 0
Опубликовано

не надо сравнивать VCL и FMX. VCL и прозрачную картинку-то вывести не может, о чем речь вообще

в FMX все рисуется на одном Canvas. В VCL - бОльшая часть компонентов имеет свое окно в ОС.

поэтому подходы к рисованию абсолютно разные.

если у вас есть компоненты - вы можете рисовать ими, но компонентов для сложных деталек у вас нет (можно порисовать SVG в Graphics.TPath, но это на любителя)

поэтому берете модель данных, отрисовываете ее на битмап. в том числе текст. битмап выводите на PaintBox или TImage, пофиг.

получившийся код будет даже короче чем разбрасывание компонентов.

да еще сможет поддерживать масштабирование, чего от компонентов добиться сложновато

  • 0
Опубликовано (изменено)

Всё таки Canvas.FillText,  работает, как не странно.

Пойду таким путём.

 

10 часов назад, krapotkin сказал:

поэтому берете модель данных, отрисовываете ее на битмап. в том числе текст. битмап выводите на PaintBox или TImage, пофиг.

Я к сожалению не понял, что собственно в битмап должен обрисовывать и каким оператором. У меня есть текст String, который я сейчас засовываю в Label. Это и есть "модель данных" в ваших терминах?  

 

Изменено пользователем Андрей Рулин
  • 0
Опубликовано (изменено)

ну вообще говоря, вы не только текст выводите, но и знаете, по каким координатам он должен быть

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

вот и выходит, что есть какие-то данные о регионе, его контуре и месте на карте, что является моделью данных для этого приложения

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

и вот тут вариант с TImage сразу начнет обрастать условиями. Если сделать там Stretch, то масштаб он подберет самостоятельно, и узнать координатки после масштабирования затруднительно

поэтому для этой  (гипотетической) задачи придется опять же все делать самому и выводить на битмап с масштабом. а уж битмап хоть на Image в режиме original, хоть на paintbox - не суть важно. Главное то, что вы на каждое движение мыши будете бегать по модели данных и проверять, не попал ли курсор в один из регионов.

Изменено пользователем krapotkin

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...