Определить принтер по умолчанию

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

Определить принтер по умолчанию

Сообщение Чудик » 31.03.2005 (Чт) 21:00

Как?

И еще вопрос:
использую для печати объект Printer. Как распечатать документ на определенный, нужный мне принтер? Если имеется несколько доступных принтреров.
Век живи - век учись!
www.detal-plast.narod.ru

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 31.03.2005 (Чт) 23:02

Ну если ты заранее знаешь, какой принтер тебе нужен, то можно так :
Код: Выделить всё
Dim objPrinter as Printer

For Each objPrinter in Printers
   If objPrinter.DeviceName=sPrintersName then
      ...
      Exit For
   End If
Next objPrinter


Ну а так, как скорее всего не знаешь, то используй контрол CommonDialog

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 31.03.2005 (Чт) 23:31

ОК! Мысль понял!
Но как быть с определением принтера по умолчанию?
Век живи - век учись!
www.detal-plast.narod.ru

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 31.03.2005 (Чт) 23:42

Т.е. ты хочешь ИЗМЕНИТЬ принтер по умолчанию? Или ОПРЕДЕЛИТЬ, какой из принтеров есть по умолчанию? Если второе, то не знаю, как корректно, а некорректно так:
Код: Выделить всё
For Each objPrinter in Printers
   sDefaultPrintersName=objPrinter.DeviceName
   Exit For
Next objPrinter
Т.е. первым из коллекции тебе вернется принтер по умолчанию... Но за такой код мне щаз ... :cry: всем форумом :) А смотреть мне некогда, я прямо щаз сам проект пишу и в форум поглядываю ...

Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Сообщение Inferno » 01.04.2005 (Пт) 2:15

Код: Выделить всё
Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long


public Function GetDefaultPrinter() as string
  Dim Default_Printer_Name As String
  Default_Printer_Name = String(1024, Chr(0))
  GetProfileString "Windows", "Device", "", Default_Printer_Name, Len(Default_Printer_Name)
  Default_Printer_Name = Replace(Default_Printer_Name, Chr(0), "")
  If Len(Default_Printer_Name) > 0 Then Default_Printer_Name = Left(Default_Printer_Name, InStr(1, Default_Printer_Name, ",") - 1)
  GetDefaultPrinter = Default_Printer_Name
end function


Arcanoid
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 01.01.2005 (Сб) 15:44

Сообщение Arcanoid » 01.04.2005 (Пт) 16:05

Чудик писал(а):...Но как быть с определением принтера по умолчанию?

Так вроде объект Printer и ссылается на принтер по умолчанию.. :roll:

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 02.04.2005 (Сб) 12:07

Код: Выделить всё
Private Sub Form_Load()
Dim objPrinter As Printer

    For Each objPrinter In Printers
        If objPrinter.DeviceName = frmPrint.cmbPrint(1).Text Then
ToUp:
            DrawPreview
            On Error GoTo errHandler
       
            If frmPrint.chkPrint(0).value = 1 Then
                If MyOrientation = 0 Then
                    objPrinter.Orientation = 0
                Else:
                    objPrinter.Orientation = 1
                End If
            Else:
                objPrinter.Orientation = PaperOrientation
            End If
           
            objPrinter.PaperSize = PaperFormat
            objPrinter.PrintQuality = 300
            objPrinter.ColorMode = TypePrint
           
            objPrinter.PaintPicture Me.Picture1.Image, 0, 0
   
   
            If MyOr = 1 Then objPrinter.NewPage: GoTo ToUp
            If MyOr = 2 Then objPrinter.NewPage: GoTo ToUp
   
            np = 0
            objPrinter.EndDoc
           
            Exit For
        End If
    Next objPrinter
   
    Unload Me
    Exit Sub
   
errHandler:
    MsgBox "Íà ïîëó÷èëîñü ðàñïå÷àòàòü äîêóìåíò, îáëîì!", vbOKOnly, "Cancel"
    Unload Me
    np = 0
End Sub

При выполнении строки с objPrinter выскакивает ошибка(383 - свойство только для чтения). Чего-то не понимаю?
Век живи - век учись!
www.detal-plast.narod.ru

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 03.04.2005 (Вс) 9:47

Решение:
Код: Выделить всё
Private Sub Form_Load()
Dim objPrinter As Printer

    For Each objPrinter In Printers
        If objPrinter.DeviceName = frmPrint.cmbPrint(1).Text Then
            Set Printer = objPrinter
        End If
    Next objPrinter
   
ToUp:
            DrawPreview
            On Error GoTo errHandler
       
            If frmPrint.chkPrint(0).value = 1 Then
                If MyOrientation = 0 Then
                    Printer.Orientation = 1
                Else:
                    Printer.Orientation = 2
                End If
            Else:
                Printer.Orientation = PaperOrientation
            End If
           
            Printer.PaperSize = PaperFormat
            Printer.PrintQuality = 300
            Printer.ColorMode = TypePrint
           
            Printer.PaintPicture Me.Picture1.Image, 0, 0
   
   
            If MyOr = 1 Then Printer.NewPage: GoTo ToUp
            If MyOr = 2 Then Printer.NewPage: GoTo ToUp
   
            np = 0
            Printer.EndDoc
           
   
    Unload Me
    Exit Sub
   
errHandler:
    MsgBox "Íà ïîëó÷èëîñü ðàñïå÷àòàòü äîêóìåíò, îáëîì!", vbOKOnly, "Cancel"
    Unload Me
    np = 0
End Sub
Век живи - век учись!
www.detal-plast.narod.ru


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 190

    TopList