powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Печать ДОКУМЕНТА на заданный принтер С ПАРАМЕТРАМИ печати.
1 сообщений из 1, страница 1 из 1
Печать ДОКУМЕНТА на заданный принтер С ПАРАМЕТРАМИ печати.
    #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
1 сообщений из 1, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Печать ДОКУМЕНТА на заданный принтер С ПАРАМЕТРАМИ печати.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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