Вывод на печать с помощью команды PrintRect
|
|
Ketzer | Дата: Понедельник, 04 Декабря 2006, 12:45 | Сообщение # 1 |
Новый участник
Группа: Пользователи
Сообщений: 11
Репутация: 0
Награды: 0
Статус: Offline
| При использовании команды PrintRect изображение выводится на принтер непропорциональным (вытянутым по ширине). Использование различных значений параметра "fit" ничего не дало. Кто-нибудь сталкивался с подобным и если да, то как решал проблему? P.S. На зарубежном форуме данную проблему обсуждали еще в 2004 году, но никак не решили P.P.S. Плагинов для этого похоже нет
Сообщение отредактировал Ketzer - Понедельник, 04 Декабря 2006, 13:59 |
|
| |
as-master | Дата: Понедельник, 04 Декабря 2006, 14:23 | Сообщение # 2 |
Группа: Удаленные
| А ты не пробовал сделать сам Rectangle в проекте, который определяет у тебя область печати, ровным квадратом? Может быть, тогда пропорции будут правильными?
|
|
| |
Ketzer | Дата: Понедельник, 04 Декабря 2006, 14:45 | Сообщение # 3 |
Новый участник
Группа: Пользователи
Сообщений: 11
Репутация: 0
Награды: 0
Статус: Offline
| В ходе экспериментов выяснилось, что команда PrintRect каким-то образом привязана к размерам окна проекта. Т.е. если окно проекта имеет одинаковые размеры по ширине и высоте, то изображение выводится на принтер нормально, а если нет (допустим, размеры окна 720х540), то изображение при печати будет вытянуто по горизонтали или по вертикали (смотря какой из размеров больше). Вариант решения: наложить сверху HotSpot с размерами, пропорциональными размерам окна (допустим, 427х320 при Bitmap-е 320х320 и окне 720х540) и посылать на печать его. Чтобы не печатался фон страницы (тот, что в пределах HotSpot-а, но за пределами Bitmap-а) подложил под Bitmap невидимый белый Rectangle. Пример кода: Show("Rectangle") PrintRect("HotSpot","50") Hide("Rectangle") Побочный эффект: Если в процессе посыла на печать передвинуть открывшееся окно печати, Rectangle может быть виден (вернее, та его часть, что была под окном). Кто знает более красивое решение, поделитесь. Добавлено (2006-12-04, 2:45 Pm) ---------------------------------------------
Quote (as-master) | А ты не пробовал сделать сам Rectangle в проекте, который определяет у тебя область печати, ровным квадратом? Может быть, тогда пропорции будут правильными? | Такой вот нюанс открылся - PrintRect пляшет от размеров проекта, а не Rectangle (который изначально был квадратным) Ошибка разработчиков, надо полагать
|
|
| |
as-master | Дата: Понедельник, 04 Декабря 2006, 15:10 | Сообщение # 4 |
Группа: Удаленные
| Quote (Ketzer) | Такой вот нюанс открылся - PrintRect пляшет от размеров проекта, а не Rectangle (который изначально был квадратным) smile Ошибка разработчиков, надо полагать | Как раз только что проверял - и у меня при любых размерах прямоугольника печаталось пропорционально. Но прочитал твой пост и вспомнил - окно проекта у меня было 400х400, то есть как раз таким, как надо Сейчас еще попробую сделать непропорциональное окно проекта и проверю твои слова. Спасибо за инфу! Пожалуй, это стоит написать в разедл готовых ответов под темой "Глюк ММВ - проблема с печатью". Добавлено (2006-12-04, 3:10 Pm) --------------------------------------------- Действительно, при непропорциональных размерах окна проекта изображение при выводже на печать искажается, независимо от пропорций самой прямоугольной области. :-( Напрашивается еще одно решение - а почему бы не использовать SysCommand("ResizeWindow","X,X"), и ВРЕМЕННО делать окно пропорциональным?
|
|
| |
Ketzer | Дата: Понедельник, 04 Декабря 2006, 15:47 | Сообщение # 5 |
Новый участник
Группа: Пользователи
Сообщений: 11
Репутация: 0
Награды: 0
Статус: Offline
| Дополнение: HotSpot может быть невидимым - печатается все равно. И еще: HotSpot может выходить за размеры окна - в этом случае при печати возникает глюк. Объяснить словами сложно, но попробую: у меня HotSpot выходит за правую границу проекта на 8px - в это случае на печати в правой 8-пиксельной области печатается фон (несмотря на белый Rectangle, так же выходящий за размеры проекта) из левой части проекта от координаты x=0 и шириной как раз 8px. В общем, пришлось в левой стороне проекта еще один белый Rectangle шириной 8px положить Quote (as-master) | Напрашивается еще одно решение - а почему бы не использовать SysCommand("ResizeWindow","X,X"), и ВРЕМЕННО делать окно пропорциональным? | Если размеры окна заданы не жестко, то да, тоже вариант.
Сообщение отредактировал Ketzer - Понедельник, 04 Декабря 2006, 15:52 |
|
| |
as-master | Дата: Понедельник, 04 Декабря 2006, 18:57 | Сообщение # 6 |
Группа: Удаленные
| Quote (Ketzer) | Если размеры окна заданы не жестко, то да, тоже вариант. | Этот вариант работает вот в каком случае. Если ресайзить размеры окна до квадратных, всё равно получаются искажения. А ресайзить нужно до пропорций прямоугольника, лучше вообще до его размеров, при этом сам прямоугольник с его содержимым переносить в левый верхний угол проекта (с координатами 0,0). Тогда на печать выводится абсолютно правильно, независимо от пропорций прямоугольника, причем без всякого параметра FIT выводится точно на страницу. А вот команда PrintPage("") работает правильно, при этом ширину окна проекта она приравнивает к ширине листа, независимо от высоты окна проекта.
|
|
| |
Oleg | Дата: Четверг, 03 Декабря 2009, 22:51 | Сообщение # 7 |
Любопытный
Группа: Пользователи
Сообщений: 39
Репутация: 0
Награды: 0
Статус: Offline
| У меня почтовый бланк формата А6, проблем с печатью нет, только после отправки на печать в свойстах принтера приходится постоянно переставлять А6 и альбомная, можно ли эти условия прописать в код и выключить диалог настройки. Проще нажал печать(а принтер уже знает чё и как и ничего не спрашивает)сразу идёт печать.
|
|
| |
DEMBEL | Дата: Четверг, 03 Декабря 2009, 23:06 | Сообщение # 8 |
Наш дизайнер
Группа: Модераторы
Сообщений: 2266
Репутация: 135
Награды: 32
Статус: Offline
| Штатными средствами ммб тут не помочь, они не контролируют системные диалоги. Но возможны варианты, если вывод на печать производится не из ммб.
Win7x64 SP1 Neobook v5.70 (Trial) WinXP SP3 Neobook v5.62
|
|
| |
Oleg | Дата: Четверг, 03 Декабря 2009, 23:11 | Сообщение # 9 |
Любопытный
Группа: Пользователи
Сообщений: 39
Репутация: 0
Награды: 0
Статус: Offline
| Жаль, так наверно мне не подойдёт бумажку ведь в ммб заполняю, и отправка на печать идёт изммб.
|
|
| |
YURIY | Дата: Четверг, 03 Декабря 2009, 23:15 | Сообщение # 10 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Quote (Oleg) Жаль, так наверно мне не подойдёт бумажку ведь в ммб заполняю На сайте есть модуль, который может фотографировать активное окно. С его помощью можно сохранить содержимое, то есть готовую для печати страницу, в картинку. А вот как печатать это, причём поставленными выше условиями - я пока не знаю.
Вечная память Андрею Сергееву!
|
|
| |
Oleg | Дата: Четверг, 03 Декабря 2009, 23:20 | Сообщение # 11 |
Любопытный
Группа: Пользователи
Сообщений: 39
Репутация: 0
Награды: 0
Статус: Offline
| "Фотография" получится наверно вместе скартинкой(фон,подложка), а мне её печатать ненадо, или только боксы? как его найти?
Сообщение отредактировал Oleg - Четверг, 03 Декабря 2009, 23:21 |
|
| |
YURIY | Дата: Четверг, 03 Декабря 2009, 23:21 | Сообщение # 12 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Окно захватывается целиком. Это аналог ALT + PrintScreen. Не вижу проблемы, кстати. В окне разместить только то, что должно быть выведено на печать.
Вечная память Андрею Сергееву!
|
|
| |
Oleg | Дата: Четверг, 03 Декабря 2009, 23:24 | Сообщение # 13 |
Любопытный
Группа: Пользователи
Сообщений: 39
Репутация: 0
Награды: 0
Статус: Offline
| Отлично будем смотреть :), как попробую напишу
|
|
| |
YURIY | Дата: Четверг, 03 Декабря 2009, 23:25 | Сообщение # 14 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Так а чего смотреть-то? Печатать как будете?
Вечная память Андрею Сергееву!
|
|
| |
Oleg | Дата: Четверг, 03 Декабря 2009, 23:28 | Сообщение # 15 |
Любопытный
Группа: Пользователи
Сообщений: 39
Репутация: 0
Награды: 0
Статус: Offline
| чесно говоря незнаю, буду читать можеть чё придумаю
|
|
| |
YURIY | Дата: Четверг, 03 Декабря 2009, 23:30 | Сообщение # 16 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Плагина такого я не нашёл. Только делать. Возьмётся ли кто? И второй вариант - с помощью системных возможностей самой Windows. В этом я не силён. Дождёмся Алекса. Что он скажет.
Вечная память Андрею Сергееву!
|
|
| |
Oleg | Дата: Четверг, 03 Декабря 2009, 23:32 | Сообщение # 17 |
Любопытный
Группа: Пользователи
Сообщений: 39
Репутация: 0
Награды: 0
Статус: Offline
| Буду ждать с нетерпением
|
|
| |
Alex3A | Дата: Пятница, 04 Декабря 2009, 02:40 | Сообщение # 18 |
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
| Самый лучший выход, использовать браузер Заембедить хтмл с шапкой или рекламой, и вставить че нада в конец страницы Code text$='Тут должен быть твой текст<br>строка1<br>строка2<br>.........<br>строкаN' url$ = 'javascript:document.body.insertAdjacentHTML(\'beforeEnd\', \'<p>' + text$ + '</p>\')' Browser("Browser","url$") и распечатать Code Browser("Browser","Print") С помощью хтмл можно изголятся над текстом, сколь душе угодно, размер, цвет, фонт, положение, рамки..... Добавлено (04 Декабрь 2009, 02:40) ---------------------------------------------
Quote (YURIY) Плагина такого я не нашёл. Только делать. Возьмётся ли кто? А до репорта вы пока не дорасли Вещь серьезная, не для баловства.
|
|
| |
DEMBEL | Дата: Пятница, 04 Декабря 2009, 02:40 | Сообщение # 19 |
Наш дизайнер
Группа: Модераторы
Сообщений: 2266
Репутация: 135
Награды: 32
Статус: Offline
| тут не совсем в этом вопрос Quote (Oleg) в свойстах принтера приходится постоянно переставлять А6 и альбомная, можно ли эти условия прописать в код и выключить диалог настройки. Проще нажал печать(а принтер уже знает чё и как и ничего не спрашивает)сразу идёт печать. можно в настройки печати залезть как нибудь?
Win7x64 SP1 Neobook v5.70 (Trial) WinXP SP3 Neobook v5.62
|
|
| |
Alex3A | Дата: Пятница, 04 Декабря 2009, 03:27 | Сообщение # 20 |
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
| Ну это уже не имеет отношения к ммв, гуглите как побороть диалоги принтера, Quote (DEMBEL) ну или хотябы не выставлять каждый раз параметры печати а просто нажать Ну так настройте их и сохраните настройки.Добавлено (04 Декабрь 2009, 03:27) --------------------------------------------- По идее, настройки принтера в системе как бы должны иметь глобальный характер, а те же настройки из приложения могут иметь локальный, что бы каждому приложению свои, но не факт и я не проверял. Установки сделанные из винды у меня сохраняются, но под каждый принтер свой драйвер, так что могут быть варианты. Да и принтера у меня нет, но установлен, что бы репорты всякия не матерились
|
|
| |
DEMBEL | Дата: Пятница, 04 Декабря 2009, 03:33 | Сообщение # 21 |
Наш дизайнер
Группа: Модераторы
Сообщений: 2266
Репутация: 135
Награды: 32
Статус: Offline
| Quote (Alex3A) Ну так настройте их и сохраните настройки. настройки сбрасываются при повторной печатиДобавлено (04 Декабрь 2009, 03:33) ---------------------------------------------
Quote (DEMBEL) настройки сбрасываются при повторной печати собственно, по этой причине вопрос и возник
Win7x64 SP1 Neobook v5.70 (Trial) WinXP SP3 Neobook v5.62
|
|
| |
Alex3A | Дата: Пятница, 04 Декабря 2009, 03:50 | Сообщение # 22 |
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
| Quote (DEMBEL) настройки сбрасываются при повторной печати зайди в настройка-принтеры-выбери принтер свойства-настройка печати, настрой, там должна быть кнопа "применить", станет активной после изменения чего либо, нажимаем. Если и после этого чего слетает - драйвер на фиг, найди в сетке что посвежее... Ну надеюсь это все под админом делается...Добавлено (04 Декабрь 2009, 03:50) --------------------------------------------- Все это дерьмо пишется в мусорник если у тебя ХР Code HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers посмотри откуда у тебя лезут старые настройки.
|
|
| |
DEMBEL | Дата: Пятница, 04 Декабря 2009, 03:59 | Сообщение # 23 |
Наш дизайнер
Группа: Модераторы
Сообщений: 2266
Репутация: 135
Награды: 32
Статус: Offline
| Quote (Alex3A) посмотри откуда у тебя лезут старые настройки. я не знаю откуда они лезут у тов. Oleg, но у меня диалог печати не виндовый а от принтера (Canon Pixma MP210) и там нихрена не сохраняется, только если создать отдельный профиль настроек печати и переключаться между ними. А в виндовом диалоге вообще никогда не сохранялось ничего, насколько я помню.Добавлено (04 Декабрь 2009, 03:59) ---------------------------------------------
Code HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers да, действительно, там коечто можно поменять в настройках печати. надо бы проверить. по крайней мере, для моего принтера и диалога печати, не знаю как с этим дела у тов. Oleg...
Win7x64 SP1 Neobook v5.70 (Trial) WinXP SP3 Neobook v5.62
|
|
| |
Alex3A | Дата: Пятница, 04 Декабря 2009, 04:07 | Сообщение # 24 |
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
| А эти настройки к винде никакого отношения не имеют, они чисто конкретного принтера, появляются после устаноки драйвера, по этому я и советую поискать альтернативу, возможно у тебя стоит какой нибудь корявый драйвер. Quote (DEMBEL) только если создать отдельный профиль настроек печати и переключаться между ними Ну способ изощренности может быть какой угодно, но без мусорника не обходится, там могут быть параметры по умолчанию и вновь введенные, их бы и поменять местами. Пойми что несохраняемость настроек это глюк, производителя наверное не оставили бы в покое, по опыту, продаваемые изделия редко содержат хороший драйвер, а вот на сайте производителя такой найти можно.
|
|
| |
DEMBEL | Дата: Пятница, 04 Декабря 2009, 04:15 | Сообщение # 25 |
Наш дизайнер
Группа: Модераторы
Сообщений: 2266
Репутация: 135
Награды: 32
Статус: Offline
| Quote (Alex3A) Пойми что несохраняемость настроек это глюк да нет, все нормально. В моем драйвере так и должно быть - управление через профили. Если настройки менялись и не сохранились в профиль (читай - в реестр) - они сбрасываются на дефолт. Видимо тов. Oleg стоит пошуршать в реестре и поменять там параметры, и все будет норм.
Win7x64 SP1 Neobook v5.70 (Trial) WinXP SP3 Neobook v5.62
|
|
| |
Alex3A | Дата: Пятница, 04 Декабря 2009, 04:32 | Сообщение # 26 |
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
| Quote (DEMBEL) Видимо тов. Oleg стоит пошуршать в реестре и поменять там параметры, и все будет норм. Драйвер для того и делают, что бы не шуршать в реестре, иначе глюк "Ну стоит у меня прога, три раза в минуту, или более кидает на принтер документ, в круглосуточном режиме, так что я спать не должен!" "Производитель, забирай наф свою шелезяку и гони бабки, за моральный ущерб, или оплачивай мне труд обезьяны, которая будет на каждый документ восстанавливать нужные настройки печати"
|
|
| |
Oleg | Дата: Пятница, 04 Декабря 2009, 22:37 | Сообщение # 27 |
Любопытный
Группа: Пользователи
Сообщений: 39
Репутация: 0
Награды: 0
Статус: Offline
| Quote (DEMBEL) у меня диалог печати не виндовый а от принтера У меня тоже от принтора Quote (DEMBEL) настройки сбрасываются при повторной печати Это точно, но я подумал немного о другом, если я смог бы указать"кнопкой" на каком формате и ориентацию бумаги, то наверно сделал бы ещё 3-4 таких кнопки с разными настройками , а если на самом деле много документов и все разного формата,Quote (Alex3A) Самый лучший выход, использовать браузер Наверно больше ничего не остаётся, как попробывать хтмл, но мне кажется что диалог принтера и настроики серавно придётся тыкать, потаму что, Quote (DEMBEL) настройки сбрасываются при повторной печати или опять же разные бумажки
Сообщение отредактировал Oleg - Пятница, 04 Декабря 2009, 22:40 |
|
| |
DEMBEL | Дата: Пятница, 04 Декабря 2009, 23:54 | Сообщение # 28 |
Наш дизайнер
Группа: Модераторы
Сообщений: 2266
Репутация: 135
Награды: 32
Статус: Offline
| Quote (Oleg) Наверно больше ничего не остаётся, как попробывать хтмл, но мне кажется что диалог принтера и настроики серавно придётся тыкать, потаму что, Я же говорю, что в моем диалоге печати можно установить параметры печати по умолчанию через реестр. Лезьте в реестр по указанному адресу, ищите ветку вашего принтера и смотрите как поменять параметры. Можно подготовить несколько reg-файлов для разных случаев и применять их перед печатью.
Win7x64 SP1 Neobook v5.70 (Trial) WinXP SP3 Neobook v5.62
|
|
| |
Oleg | Дата: Суббота, 05 Декабря 2009, 00:06 | Сообщение # 29 |
Любопытный
Группа: Пользователи
Сообщений: 39
Репутация: 0
Награды: 0
Статус: Offline
| М да, с этим сложнее никогда не лез в реестр, а как привязать рег к кнопке? Посмотрел реестр, наверно откажусь от затеи, ни чё не понял чего на что менять. Жаль.
Сообщение отредактировал Oleg - Суббота, 05 Декабря 2009, 00:36 |
|
| |
DEMBEL | Дата: Суббота, 05 Декабря 2009, 00:43 | Сообщение # 30 |
Наш дизайнер
Группа: Модераторы
Сообщений: 2266
Репутация: 135
Награды: 32
Статус: Offline
| Вначале выясните какие параметры отвечают за размер бумаги и ориентацию, и влияет ли вообще их изменение на печать. У меня напрмер ключ размера бумаги Code HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Canon MP210 series Printer\DsDriver "printMediaReady" = "A4" Quote (Oleg) а как привязать рег к кнопке? не проблема, вначале экспортируй нужную ветку в файл, блокнотом поменяй нужные значения и сохрани reg-файл. Чтобы его импортировать назад - запусти его двойным щелчком или команда REGEDIT /S C:\file.reg И сохрани резервную копию файла для восстановления начальных параметров до редактирования.Добавлено (05 Декабрь 2009, 00:43) ---------------------------------------------
Quote (Oleg) Посмотрел реестр, Экспортируйте ветку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers я сам посмотрю (правой кнопкой по разделу - "экспортировать")
Win7x64 SP1 Neobook v5.70 (Trial) WinXP SP3 Neobook v5.62
|
|
| |