Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Печать ДОКУМЕНТА на заданный принтер С ПАРАМЕТРАМИ печати. / 1 сообщений из 1, страница 1 из 1
14.05.2011, 00:26
    #37260315
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать ДОКУМЕНТА на заданный принтер С ПАРАМЕТРАМИ печати.
Задача:
есть Document -файл, известный системе, т.е. система понимает, каким приложением его печатать
Хочу распечатать на ЗАДАННЫЙ ПРИНТЕР и задать ПАРАМЕТРЫ ПЕЧАТИ.
А вот чего система будет делать с параметрами, это НЕ МОЕ (с километровыми модулями и примитивными бейсиками) а СИСТЕМНОЕ дело.

Чтобы на заданный принтер , делаю так:
Код: plaintext
 ShellExecute  0 , "printto", FileName, Chr( 34 ) & PrinterName & Chr( 34 ),  0 , SW_SHOWNORMAL

С диалоговым окном принтера более менее разобрался.
Кроме имени принтера я получаю структуру DEVMODE
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Private Type DEVMODE
...
    dmOrientation As Integer
    dmPaperSize As Integer
    dmPaperLength As Integer
    dmPaperWidth As Integer
.......
    If PrintDialog(the_PrintDlg) <>  0  Then
        '
        ' Mike's amendment to handle long printer names
        CopyMemory the_DevName, ByVal lpDevName, Len(the_DevName)
        LongPrinterName = Mid$(the_DevName.extra, _
          the_DevName.wDeviceOffset - the_DevName.wDriverOffset +  1 )
        LongPrinterName = Left$(LongPrinterName, _
          InStr(LongPrinterName, Chr$( 0 )) -  1 )
          
        lpDevName = GlobalLock(the_PrintDlg.hDevNames)
        CopyMemory the_DevName, ByVal lpDevName,  45 
        bReturn = GlobalUnlock(lpDevName)
        GlobalFree the_PrintDlg.hDevNames
        
        lpDevMode = GlobalLock(the_PrintDlg.hDevMode)
        CopyMemory the_DevMode, ByVal lpDevMode, Len(the_DevMode)
        bReturn = GlobalUnlock(the_PrintDlg.hDevMode)
        GlobalFree the_PrintDlg.hDevMode
        
        MsgBox LongPrinterName & vbCrLf & _
          "dmCopies=" & the_DevMode.dmCopies & vbCrLf & _
          "dmOrientation=" & the_DevMode.dmOrientation & vbCrLf & _
          "dmPrintQuality=" & the_DevMode.dmPrintQuality & vbCrLf & _
          "dmYResolution=" & the_DevMode.dmYResolution & vbCrLf & _
          "dmPaperSize=" & the_DevMode.dmPaperSize
          
        ShellExecute  0 , "printto", App.Path & "\test.tif", CStr(Chr( 34 ) & LongPrinterName & Chr( 34 )),  0 , SW_SHOWNORMAL

Усе круто и замечательно, но ShellExecute 0, "printto
плюет на полученные dmOrientation и dmPrintQuality
Оно в общем понятно, не совсем дурак.

А вот как передать выбранную the_DevMode на печать.
Я понимаю, что я могу извращаться с объектом Printer, вырисовывать через GDI +
Но я ничего этого не хочу.
Я хочу чтобы система, которая знает кто ответственный за печать данного типа, сделала всю работу за меня.
Т.е. например
1) Хочу напечатать 2-ю страницу
2) Хочу альбом, а не портрет.
3) Хочу В5 вместо A4
ну и т.п.
Структура the_DevMode, вот она готовая.
Как ее засунуть в тек. процесс print(to)?
Или это невозможно?
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Печать ДОКУМЕНТА на заданный принтер С ПАРАМЕТРАМИ печати. / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]