![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
![]()
Люди, помогите! Пытаюсь без особого вникания в граф.подсистему венды
нарисовать рисунок на канве, который потом распечатать. Итак, взял форму, на неё поклал TImage и кнопку. В обработчик нажатия кнопы пытался забить различные кнопы отрисовки, но так и не понял, каким образом работает и SetMapMode, и SetViewportOrgEx, и SetViewportExtEx и SetWindowExtEx.... После длительных экспериментов выяснилось, что какие-то признаки линий рисуются в режимах MM_ISOTROPIC и MM_ANISOTROPIC, значения, передаваемые в SetViewportOrgEx и прочие хоть как-то влияют на результат вывода лишь в режимах MM_ISOTROPIC и MM_ANISOTROPIC кое как удалось реализовать одну из проблем! обработчик теперь таков: Код:
* так вот. РЕЗУЛЬТАТ ВЫВОДА теперь напрямую зависит от того, * * закомментирована ли строка с выводом "привета", или нет! * *********************************** ******************************* Когда showmessage('привет') выводится, вызов SetMapMode НЕ срабатывает, и линии рисуются такой длины (в две тыщи пикселей), что на экране лишь часть. Когда showmessage закомментирован, по всей видимости, вызов срабатывает (?) и на экране в углу какие-то точки. Почему вывод сообщения вообще влияет на вывод в канву? Что вообще может "перебивать" ShowMessage? ps SetMapMode(image.canvas.handle, MM_ISOTROPIC) возвращает 1 Последний раз редактировалось rpy3uH; 29.09.2008 в 11:11. |
![]() |
![]() |
![]() |
#2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
Смешно. По сути вы никогда не должны думать что компилятор или транслятор перепутали чтолибо ( ну если у вас конечно не дельфи 1 или еще меньше ). При вызове ShowMessage главный поток ( выполнение кода ) останавливается и ждем отклика от этот диалога. Сам лично не юзал никогда SetMapMode ( да собственно и зачем ? ). И такие вещи я лично предпочитаю рисовать в том же PaintBox в OnPaint
![]() |
![]() |
![]() |
![]() |
#3 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
2AnTe: а без SetMapMode никак не обойтись? вообще-то не рекомендуется применять к VCL компонентам API функции.
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
![]()
Вообще, изначально стояла задача сделать предпросмотр.
То есть, нужно начертить на листе формата А4 таблицу, строго соблюдая ширину/высоту колонок, в ней текст. При разработке, нужно чтобы пользователь видел на лист экране, как это будет выводиться на печать. Масштабировать и всё такое. Рисую через canvas.moveto, canvas.lineto, canvas.textout Иного пути, как изменить координаты порта вывода и окна для вывода, не нашёл ![]() не использовал SetMapMode, задав вручную: Код:
![]() Последний раз редактировалось rpy3uH; 30.09.2008 в 13:30. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
![]()
Нашёл ответ.
1. Сразу же после посылки ЛЮБОГО сообщения ЛЮБОМУ VCL контролу масштабирование при печати ричтекста перестает работать... Связано это, похоже, с обработкой сообщений VCL средствами --- любые оконные операции (в том числе, получение Handle окна) перестраховываются и лочат канву. Открывается она только после обработки всего стека сообщений, поэтому, предположительно, результатом посылки EM_SETZOOM можно будет воспользоваться "при следующем нажатии кнопки". Источник тут http://www.delphikingdom.com/asp/ans...IDAnswer=21049 Наверное, именно это и имелось в виду в советах мне здесь? ![]() Ну а как же выводить предпросмотр без применения winapi к vcl? В метафайл рисовать, а его растягивать? Последний раз редактировалось AnTe; 02.10.2008 в 14:25. |
![]() |
![]() |
![]() |
#6 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
ну да, что-то наподобие... я когда-то копался и понял что с VCL через Win API лучше не работать...
а может компоненты есть какие-нибудь? Последний раз редактировалось rpy3uH; 02.10.2008 в 20:58. |
![]() |
![]() |