Перейти к содержанию
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
4 часа назад, mixi сказал:

Положите Image. В Image - карту, сверху на Image - Label

Да, так не затирается. 

Изменено пользователем Андрей Рулин
Ссылка на комментарий
  • 0

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

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

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

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

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

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

Изменено пользователем krapotkin
Ссылка на комментарий

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

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

Гость
Ответить на вопрос...

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

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

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

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

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

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

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