Hej! Hej Hej Hej igen. Mitt förslag är att du helt enkelt slutar använda den global metoden Printer. Vilket är default skrivaren. Är ju bumt att ändra default skrivaren för användaren bara för att han angivit en annan skrivare än default.<br>Byta skrivare i runtime
Har någon ett förslag på hur man gör för att byta skrivare i runtime.
Har ett program där jag skall kunna välja skrivare beroende på vad jag skall skriva ut
Har lagt in alla skrivare i en combo och skall kunna välja skrivare därifrån när jag skall skriva ut. Har testat med följande kod men det har inte fungerat
Private Sub Combo1_Click()
Dim x As Printer
For Each x In Printers
If x.DeviceName = Combo1 Then
Set Printer = x
End If
Next x
End Sub
/KristerSv: Byta skrivare i runtime
Har inte möjlighet att testa tycker att det ser just ut men prova
Private Sub Combo1_Click()
Dim x As Printer
Dim pri As String
pri = Combo1.Text
DoEvents
For Each x In Printers
If x.DeviceName = pri Then
Set Printer = x
Exit For
End If
Next x
End Sub
spånar
SvenSv: Byta skrivare i runtime
har oxå haft problem med det där...
Jag har en fungerande rutin på jobbet, skall skicka den i morron
(om jag hinner)
Till vidare kan du titta på det här:
http://www.mvps.org/vbnet/index.html?code/system/defprinternt.htmSv: Byta skrivare i runtime
Lägg detta i en modul:
<code>
Public Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const HWND_BROADCAST = &HFFFF&
Public Const WM_WININICHANGE = &H1A
Public Function SetDefaultPrinter(objPrn As Printer) As Boolean
Dim x As Long, sztemp As String
sztemp = objPrn.DeviceName & "," & objPrn.DriverName & "," & objPrn.Port
x = WriteProfileString("windows", "device", sztemp)
x = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0&, "windows")
End Function
</code>Sv: Byta skrivare i runtime
<br>
Jag har två förslag.<br>
Alternativ1:
<code>
'Form: Form1
Option Explicit
Private MyPrinter as Printer
Private Sub Form_Load()
If Printer Is Nothing Then
cmdPrint.Enable = False
Else
Combo1.Text = Printer.DeviceName
Set MyPrinter = Printer
End if
End Sub
Private Sub Combo1_Click()
Dim x As Printer
Dim DeviceName
DeviceName = Combo1.Text
For Each x In Printers
If x.DeviceName = DeviceName Then
Set MyPrinter = x
Exit For
End If
Next
End Sub
Private Sub cmdPrint_Click()
MyPrinter.Print "Test"
MyPrinter.EndDoc
End Sub
</code>
<br>
Alternativ2:
<code>
'Form: Form1
Option Explicit
Private Sub Form_Load()
If Printer Is Nothing Then
cmdPrint.Enable = False
Else
Combo1.Text = Printer.DeviceName
End if
End Sub
Private Sub cmdPrint_Click()
Dim x As Printer
Dim DeviceName
DeviceName = Combo1.Text
For Each x In Printers
If x.DeviceName = DeviceName Then
DoPrint x
Exit For
End If
Next
End Sub
Public Sub DoPrint(MyPrinter as Printer)
MyPrinter.Print "Test"
MyPrinter.EndDoc
End sub
</code>