![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Печать на плоттер
Maverick © (2003-05-14 09:38:00)Проблема в том, что при очередном выводе в Printer.Canvas программа вроде как зависает. Перед этим всё благополучно уходит. Может быть при выводе на плоттер есть какие-то свои особенности? Может быть стоит делать NextPage? А как тогда узнать, сколько элементов может влезть в этот плоттер?
Ещё одна проблема в том, что юзер с плоттером находится далеко и посмотреть, как всё это выглядит, я не могу. :(
Maverick (2003-05-16 10:19:00) [1]Вы таки будете смеяться, но мне удалось уговорить пользователя переустановить драйвера и проблема вроде как исчезла! :)
Одно не понятно, другой софт, например AutoCAD, выводил на этот плоттер не смотря на кривость драйверов. Наверное, использовать winAPI лучше, чем tPrinter.
Слесарь Матерящийся (2003-05-15 11:54:00) [2]На hdc можно рисовать с помощью MoveToEx() и LineTo(), для создания пера - CreatePen() и для выбора пера - SelectObject(). Все функции - WinAPI. В остальном всё то же самое.
Maverick (2003-05-15 11:02:00) [3]Да в том-то и дело, что у меня всё печатает прекрасно. В сетке несколько принтеров и проблем никаких не наблюдается.
В канвас же я вывожу как раз векторную графику (moveTo, lineTo).
А рисовать на hdc, как я понимаю, можно так же, как и на канвас, теми же функциями?
Слесарь Матерящийся (2003-05-14 11:32:00) [4]IMHO, надо проверить на каком-либо принтере (не-плоттере, лучше поставить какой-нибудь "Epson Compatible 24pin", etc), предварительно перенаправив вывод в файл (порт FILE: спулера печати). Если всё пройдёт гладко (получим файл с данными печати), и ничего не повиснет, значит, в первом приближении, код не виноват.
Если код не виноват, то, возможно, дело в режиме вывода.
Постарайтесь не использовать операции таких типов, какие рендер не поддерживает (например, вывод растровой картинки на векторный плоттер).
Какие операции плоттер поддерживает - можно узнать с помощью ф-и GetDeviceCaps() WinAPI.
Ещё одна возможность - не использовать TCanvas, а рисовать прямо на hdc. IMHO, гораздо проще.
Плюс - если плоттер доступен через сеть, поставить его на локальном компе и перенаправить вывод в тот же порт FILE: - эта проверка поможет понять, всё ли в порядке с транспортом данных по сети.
Разумеется, всё это лишь предположения, делать именно так не обязательно, одним словом, IMHO...