|
Print Common Dialog API
|
|||
---|---|---|---|
#18+
Понятно что Googl-ом пользоваться умею и примеров там есть. Опыт работы с Open/Save как бы не хилый (более чем) в плане всяких хуков и кастомизаций. Для печати использую следующее: Код: plaintext
Но как все подобные "самопалы" что-то неважнецки он выглядит, как ныне подумалось. Т.е. хочу использовать стандартный. Но потенциальная проблема кот. не глядя видится такова: Мне от этого диалога надо получить 1) только имя принтера Ну может быть 2) (не уверен что мне это надо) номера страниц, ибо природа печатаемых файлов известна и вычленить страницы возможно Хочу сказать что опции типа: Диапазон страниц Число копий Печать в файл Кнопка Настройка и все что за ней стоит мне в этом диалоге не нужны, вредны и только будут сбивать с толку, ибо все равно через printto эти параметры не передашь, посему красиво было бы 1) чего-то задизейблить 2) чего-то скрыть Т.е. тыкнул в принтер и нажал печать. Нет ли достойных примеров с учетом пожелания свести к примитиву органы данного диалога? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2011, 04:25 |
|
Print Common Dialog API
|
|||
---|---|---|---|
#18+
Ну, допустим PrintDialog.flags = ..or PD_NOSELECTION -тупо установить All Pages без возможности выбора Or PD_HIDEPRINTTOFILE/PD_DISABLEPRINTTOFILE -скрыть/disable Print to File Or PD_COLLATE -показывает картинку "11/22/33" с копиями но почему-то без галки Collate(разобрать по копиям) но при этом or PD_USEDEVMODECOPIESANDCOLLATE/PD_USEDEVMODECOPIES -культурный тон (число копий на основании драйвера принтера) эту картинку Collate опять убирает, а для красоты пусть была бы лучше. Потом, чего делать с Preferences(настройки принтера). Ну допустим, через хук я разберусь и ее задизейблю (c Open/Save такие трюки удавались, здесь пока не пробовал). А надо ли это делать? Дмитрий77мне в этом диалоге не нужны, вредны и только будут сбивать с толку, ибо все равно через printto эти параметры не передашь, А может все-таки как то "передашь"? Если я правильно понимаю, Public PrintDialog As PRINTDLGS ShowPrinter = PrintDlg(PrintDialog) 1)возвращает структуру PRINTDLGS 2) + настройки принтера, которые я ручками накурочил через этот диалог через "Preferences" (так понимаю отличаются от дефолтных кот. в Start->Settings->Printer and Faxes), например Портрет/Альбом, разрешение и т.п. Т.е. как всю эту "временную ерунду" передать в Printto (для данного сеанса печати порожденного этим диалогом) без изменения глобальных настроек принтера? (в ShellExecute(Filename, PrintTo)) Использую PrintTo, потому что позволяет указать имя принтера и эксплуатирует приложение ассоциированное с типом файла, но не из VB-PictureBox-а же глючности печатать? Есть еще ключ ShellExecute(Filename, Print )) без "to" но там имя принтера даже не укажешь похоже. Пока я даже не понимаю как получить PrinterName (as String) Наткнулся еще на ПРАКТИЧЕСКОЕ руководство: Изменение и управление печатью диалоговых из Visual Basic но не уверен что это правильный путь - использовать доп. библиотеку пусть и не vb-control, даже не пробовал пока. Помогите кто чем может. Пока бардак в голове. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2011, 14:51 |
|
Print Common Dialog API
|
|||
---|---|---|---|
#18+
Дмитрий77 Пока я даже не понимаю как получить PrinterName (as String) Пока бардак в голове. Ну, насколько сумел разобрался. http://www.vbmonster.com/Uwe/Forum.aspx/vb-controls/6238/Print-API-instead-of-Common-Dialog-VB6 Задизейблил/украсил как смог, т.е. насколько позволяют флаги. Код: plaintext
Дмитрий77Потом, чего делать с Preferences(настройки принтера). Ну допустим, через хук я разберусь и ее задизейблю (c Open/Save такие трюки удавались, здесь пока не пробовал).. Разобраться то разобрался. http://www.vbmonster.com/Uwe/Forum.aspx/basic/5116/Problem-with-Print-Dialog-Hook-functions-in-VB-6 Но я то хочу UseExDialog = true а при попытке PD_ENABLEPRINTHOOK он гад делает UseExDialog = false http://www.windowsdevelop.com/windows-forms-general/useexdialog-when-using-a-printhookproc-6250.shtml При UseExDialog = false можно через хук конечно задизейблить ID_PROPERTIES = &H401 Но...короче отказался от этого в пользу красивого окна. Анализ майкрософтовских даже родных прог показывает, что окно Print используется настолько "некорректно" : лишние настройки, неизменение реальных параметров при тек. печати и т.п., что на это можно забить. Дмитрий77 А может все-таки как то "передашь"? . Бог с ним с параметрами. Для быстрой печати документа целиком + красивое стандартное окно Print с выбором принтера то что сделал вполне пригодно. Если уж user хочет перевернутых отдельных страниц в формате B333, пусть открывает в приложении и оттуда печатает. Дмитрий77Помогите кто чем может. . Да-с..все сам, все сам. Обидно что нет грамотных людей по данным вопросам. Не в первый раз кстати данную тематику затрагиваю. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2011, 16:45 |
|
Print Common Dialog API
|
|||
---|---|---|---|
#18+
Дмитрий77, >Да-с..все сам, все сам. Не смог я уловить Вашу беду Лично у меня печатается так - всё выделил, нажал на клаве кнопки Контрол пюс цифру по количеству копий и всё, дело в шляпе Что каксается принтера, печатается на том, на котором последний раз печаталось А кстати когда ни один не подключен как узнать?? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2011, 17:00 |
|
Print Common Dialog API
|
|||
---|---|---|---|
#18+
Ципихович ЭндрюА кстати когда ни один не подключен как узнать?? Если вы мой код посмотрите + немного раскомментируете + соседняя тема, то все сможете посмотреть через диалог + настроить все параметры печати через диалог. Ну, с флагами поиграйтесь, я там "заблокировал" все что можно было. в the_DevMode будет содержаться все настроенное вами: ориентация, копии, страницы и т.п. Имя выбранного принтера лучше брать из LongPrinterName (поддержка имен >32) И можете это the_DevMode экспортировать в объект принтер, или чего у вас там. Но это если ВАШЕ ПРИЛОЖЕНИЕ САМО ЗАНИМАЕТСЯ печатью. У меня приложение само ПЕЧАТЬЮ НЕ ЗАНИМАЕТСЯ. А "паразитирует" на системе, т.е. "приложении, с которым ассоциирован данный тип файла". Например для pdf это обычно Adobe Reader, для картинок "Программа просмотра изображений/фотоальбом", для doc это будет ваш любимый Word. Поэтому я и использую printto, что универсально. Хотя есть ограничения: если так печатать html, то окно диалога принтера будет выведено дважды. Т.е. я в идеале хочу передать the_DevMode что называется в printo и в ответственное за это приложение (я заранее не знаю какое именно), понятно что приложения разные и я не могу рассчитывать на корректное использование приложением всего набора the_DevMode, но хочется как-то таки передать текущий the_DevMode в неизвестное приложение но стандартным механизмом. Теоретически, я могу наклепать кучу затычек: например, -менять глобальную структуру the_DevMode на временную, потом делать ShellExecute и возвращать структуру назад. -запускать ShellExecute <N> раз по числу копий -вычленять отдельные страницы через GDI+/GS и т.п. -предварительно "переворачивать" в альбом через GDI+ -печатать VB+GDI (видел пример Бенедикта, но не стал смотреть даже, ибо кто-то сказал что печатает не всегда хорошо и долго...а это вполне ожидаемо в самопальных vb-конструкциях печати) Но это все детский сад типа временной подмены дефолтного принтера через Printers Это неСИСТЕМНЫЙ подход, куча рутины и куча глюков, которые себя обязательно выдадут в какой-то мелочи/частном случае. Это при километрах кода и пачках модулей. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2011, 19:26 |
|
Print Common Dialog API
|
|||
---|---|---|---|
#18+
Дмитрий77, где Копи мемори брать?? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2011, 19:57 |
|
Print Common Dialog API
|
|||
---|---|---|---|
#18+
Ципихович Эндрюгде Копи мемори брать?? Вы в своем репертуаре? Ее надо декларировать. А вообще-то в приложенном выше рабочем примере все есть +ссылки на первоисточники заметьте (где кода еще больше, но мне пока не надо). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2011, 20:43 |
|
|
start [/forum/topic.php?fid=60&tid=2158719]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
109ms |
get tp. blocked users: |
1ms |
others: | 337ms |
total: | 547ms |
0 / 0 |