Печать на указанный принтер

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Shasha
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 08.11.2005 (Вт) 15:09

Печать на указанный принтер

Сообщение Shasha » 04.07.2009 (Сб) 12:08

Всем привет!
перерыл весь инет, но так и не наше ответа... =( подскажите, как выполнить печать на:
1)указанный принтер
2)указав диапазон страниц
при этом хочу, что бы вызывалась стандартная форма печать (ctrl+p) и в ней эти параметры были бы указаны и снопка печать на этой форме сама нажималась бы или просто печать происходила в фоновом режиме.

что я собрался печатать?
содержимое отображаемое контролом.

почему я не воспользовался "printer"?
там нет возможности указать принтер, а лишь получить список.

зарание благодарен за советы =)
С Уважением,
Shasha

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Печать на указанный принтер

Сообщение iGrok » 04.07.2009 (Сб) 12:26

Shasha писал(а):там нет возможности указать принтер, а лишь получить список.

Есть такая возможность. Выбираешь из списка тот, что тебе нужен, и говоришь
Код: Выделить всё
Dim oldPrinter as Object
Set oldPrinter = Printer
Set Printer = Printers._Выбранный_Принтер_.

'печатаешь

Set Printer = oldPrinter 'возвращаешь старый принтер на место.


Главное, не забудь обратно вернуть после печати.
label:
cli
jmp label

Shasha
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 08.11.2005 (Вт) 15:09

Re: Печать на указанный принтер

Сообщение Shasha » 04.07.2009 (Сб) 12:36

iGrok писал(а):
Shasha писал(а):там нет возможности указать принтер, а лишь получить список.

Есть такая возможность. Выбираешь из списка тот, что тебе нужен, и говоришь
Код: Выделить всё
Dim oldPrinter as Object
Set oldPrinter = Printer
Set Printer = Printers._Выбранный_Принтер_.

'печатаешь

Set Printer = oldPrinter 'возвращаешь старый принтер на место.


Главное, не забудь обратно вернуть после печати.

сделать принтером по умолчаю и потом вернуть-я так делал-работает.
как пустить на печать?
форму печати я вызываю так:
DC.CmdPrint
там и есть выбранный принтер.как автоматически вбить диапазон страницы и нажать печать?
С Уважением,
Shasha

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Печать на указанный принтер

Сообщение JohnK » 04.07.2009 (Сб) 13:06

А если использовать диалог:

Код: Выделить всё
CommonDialog1.PrinterDefault = True
CommonDialog1.CancelError = True
' Set flags - no page numbers, return the selected printer
CommonDialog1.Flags = cdlPDReturnDC + cdlPDNoPageNums
If RichTextBox1.SelLength = 0 Then
    CommonDialog1.Flags = CommonDialog1.Flags + cdlPDAllPages
Else
    CommonDialog1.Flags = CommonDialog1.Flags + cdlPDSelection
End If
' Enables error handling to catch cancel error
On Error Resume Next
' display the print dialog box
CommonDialog1.ShowPrinter

If Err Then
    ' This code runs if the dialog was cancelled
    Msgbox "Dialog Cancelled"
    Exit Sub
End If
' Prints the contents of RichTextBox
RichTextBox1.SelPrint (Printer.hDC)
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Shasha
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 08.11.2005 (Вт) 15:09

Re: Печать на указанный принтер

Сообщение Shasha » 04.07.2009 (Сб) 13:13

JohnK писал(а):А если использовать диалог:

Код: Выделить всё
CommonDialog1.PrinterDefault = True
CommonDialog1.CancelError = True
' Set flags - no page numbers, return the selected printer
CommonDialog1.Flags = cdlPDReturnDC + cdlPDNoPageNums
If RichTextBox1.SelLength = 0 Then
    CommonDialog1.Flags = CommonDialog1.Flags + cdlPDAllPages
Else
    CommonDialog1.Flags = CommonDialog1.Flags + cdlPDSelection
End If
' Enables error handling to catch cancel error
On Error Resume Next
' display the print dialog box
CommonDialog1.ShowPrinter

If Err Then
    ' This code runs if the dialog was cancelled
    Msgbox "Dialog Cancelled"
    Exit Sub
End If
' Prints the contents of RichTextBox
RichTextBox1.SelPrint (Printer.hDC)

а если использовать диалог то ничего не получается..
поясню, я использую дежавю контрол и хочу выполнить печать на указаный принтер указанные страницы
С Уважением,
Shasha

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Печать на указанный принтер

Сообщение JohnK » 04.07.2009 (Сб) 14:05

Объект Printer не позволяет указать диапазон страниц для печати. Тоесть ты должен сам "выдернуть" странички и последовательно направить их на принтер. Как, это уже другой вопрос.
http://msdn.microsoft.com/ru-ru/library/microsoft.visualbasic.powerpacks.printing.compatibility.vb6.printer_members.aspx

А в диалоге есть свойства:
Код: Выделить всё
FromPage
ToPage
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Печать на указанный принтер

Сообщение JohnK » 04.07.2009 (Сб) 14:24

Если не поможет, поковыряй вот эти функции:
Код: Выделить всё
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long
Private Declare Function SetPrinter Lib "winspool.drv" Alias "SetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal Command As Long) As Long
Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As Long, pcbNeeded As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Shasha
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 08.11.2005 (Вт) 15:09

Re: Печать на указанный принтер

Сообщение Shasha » 04.07.2009 (Сб) 14:39

JohnK писал(а):Объект Printer не позволяет указать диапазон страниц для печати. Тоесть ты должен сам "выдернуть" странички и последовательно направить их на принтер. Как, это уже другой вопрос.
http://msdn.microsoft.com/ru-ru/library/microsoft.visualbasic.powerpacks.printing.compatibility.vb6.printer_members.aspx

А в диалоге есть свойства:
Код: Выделить всё
FromPage
ToPage

ну, выдернуть и распечатать я могу, хорошо, опустим этот момент.
как распечатать фоново?
С Уважением,
Shasha

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Печать на указанный принтер

Сообщение JohnK » 04.07.2009 (Сб) 16:38

А что тебе мешает печатать фоново? Ты формируешь задание - а потом выполняешь
Код: Выделить всё
Printer.EndDoc

Задание передается на принтер, начинается печать, а твоя прога продолжает выполнение алгоритма.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Печать на указанный принтер

Сообщение alibek » 04.07.2009 (Сб) 17:42

Shasha писал(а):как распечатать фоново?

Вся печать в Windows происходит фоново.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот, Yandex-бот и гости: 90

    TopList