Андрей Рулин Опубликовано 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 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.