Андрей Рулин Опубликовано 7 июня, 2022 Поделиться Опубликовано 7 июня, 2022 Если я в OnPaint формы провожу такую прорисовку Canvas.BeginScene(); Canvas.DrawBitmap(MainBmp,r1,r2,1,False); Canvas.EndScene(); То затираются все Label , Edit и всё прочее на форме. Как сделать ,чтобы у меня отрисовывалась картинка , которую я хочу. А поверх неё эти Label , Edit и т.д. ? Цитата Ссылка на комментарий
0 krapotkin Опубликовано 8 июня, 2022 Поделиться Опубликовано 8 июня, 2022 не нужно на форме рисовать либо сначала взять скриншот формы, нарисовать на нем, и отрисовать обратно Цитата Ссылка на комментарий
0 Андрей Рулин Опубликовано 8 июня, 2022 Автор Поделиться Опубликовано 8 июня, 2022 (изменено) Если в PaintBox - всё равно затирается. То есть если код заменить на PaintBox1.Canvas.BeginScene(); PaintBox1.Canvas.DrawBitmap(MainBmp,r1,r2,1,False); PaintBox1.Canvas.EndScene(); то затирается. Причём даже игнорируется расположение этого PaintBox на форме. Второй вариант какой-то изврат. Тогда эти Label вообще проще выкинуть на помойку и использовать что-то вроде Canvas.FillText (не удивлюсь, правда если это работать не будет, в VСL по крайней мере Canvas.TextOut работал) . Собственно вот пример что должно быть , есть карта, есть цифры. Цифры должны быть текстом, потому, что динамически меняется цвет. И числа тоже могут меняться. Изменено 8 июня, 2022 пользователем Андрей Рулин Дополнение Цитата Ссылка на комментарий
0 krapotkin Опубликовано 9 июня, 2022 Поделиться Опубликовано 9 июня, 2022 не надо сравнивать VCL и FMX. VCL и прозрачную картинку-то вывести не может, о чем речь вообще в FMX все рисуется на одном Canvas. В VCL - бОльшая часть компонентов имеет свое окно в ОС. поэтому подходы к рисованию абсолютно разные. если у вас есть компоненты - вы можете рисовать ими, но компонентов для сложных деталек у вас нет (можно порисовать SVG в Graphics.TPath, но это на любителя) поэтому берете модель данных, отрисовываете ее на битмап. в том числе текст. битмап выводите на PaintBox или TImage, пофиг. получившийся код будет даже короче чем разбрасывание компонентов. да еще сможет поддерживать масштабирование, чего от компонентов добиться сложновато Цитата Ссылка на комментарий
0 mixi Опубликовано 9 июня, 2022 Поделиться Опубликовано 9 июня, 2022 Положите Image. В Image - карту, сверху на Image - Label Цитата Ссылка на комментарий
0 Андрей Рулин Опубликовано 9 июня, 2022 Автор Поделиться Опубликовано 9 июня, 2022 (изменено) Всё таки Canvas.FillText, работает, как не странно. Пойду таким путём. 10 часов назад, krapotkin сказал: поэтому берете модель данных, отрисовываете ее на битмап. в том числе текст. битмап выводите на PaintBox или TImage, пофиг. Я к сожалению не понял, что собственно в битмап должен обрисовывать и каким оператором. У меня есть текст String, который я сейчас засовываю в Label. Это и есть "модель данных" в ваших терминах? Изменено 9 июня, 2022 пользователем Андрей Рулин Цитата Ссылка на комментарий
0 Андрей Рулин Опубликовано 9 июня, 2022 Автор Поделиться Опубликовано 9 июня, 2022 (изменено) 4 часа назад, mixi сказал: Положите Image. В Image - карту, сверху на Image - Label Да, так не затирается. Изменено 9 июня, 2022 пользователем Андрей Рулин Цитата Ссылка на комментарий
0 krapotkin Опубликовано 10 июня, 2022 Поделиться Опубликовано 10 июня, 2022 (изменено) ну вообще говоря, вы не только текст выводите, но и знаете, по каким координатам он должен быть кроме того, я предположил, что все эти региончики выводятся отдельно а не просто нарисованы на одной картинке в частности, я исходил из, того, что просто статическая картинка обычно никому не нужна, иначе что мешает вам нарисовать циферки прямо на нее изначально? вот и выходит, что есть какие-то данные о регионе, его контуре и месте на карте, что является моделью данных для этого приложения следовательно, следующий вопрос тут будет - а как определить, что курсор находится над заданным регионом. и вот тут вариант с TImage сразу начнет обрастать условиями. Если сделать там Stretch, то масштаб он подберет самостоятельно, и узнать координатки после масштабирования затруднительно поэтому для этой (гипотетической) задачи придется опять же все делать самому и выводить на битмап с масштабом. а уж битмап хоть на Image в режиме original, хоть на paintbox - не суть важно. Главное то, что вы на каждое движение мыши будете бегать по модели данных и проверять, не попал ли курсор в один из регионов. Изменено 10 июня, 2022 пользователем krapotkin Цитата Ссылка на комментарий
Вопрос
Андрей Рулин
Если я в OnPaint формы провожу такую прорисовку
Canvas.BeginScene(); Canvas.DrawBitmap(MainBmp,r1,r2,1,False); Canvas.EndScene();
То затираются все Label , Edit и всё прочее на форме. Как сделать ,чтобы у меня отрисовывалась картинка , которую я хочу. А поверх неё эти Label , Edit и т.д. ?
Ссылка на комментарий
7 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.