Εκτυπωση σε συγκεκριμενο εκτυπωτη (οχι τον default)

Συζητήσεις για τις γλώσσες του dot Net και για του Visual Studio της Microsoft

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
brakos
Δημοσιεύσεις: 34
Εγγραφή: 27 Δεκ 2001 01:00
Τοποθεσία: Thessaloniki,Greece
Επικοινωνία:

Εκτυπωση σε συγκεκριμενο εκτυπωτη (οχι τον default)

Δημοσίευση από brakos » 23 Ιουν 2003 13:21

Πως μπορω να στειλω εκτυπωση με τη μεθοδο form1.printform
σε συγκεκριμενο εκτυπωτη και οχι στον default ?

Εστω οτι εχω 3 εκτυπωτες συνδεδεμενους ο ενας τοπικος (matrix), o
αλλος
inkjet (HP 845) μεσω δικτυου και ο τριτος τοπικος (SATO) για
barcodes. Η φαση ειναι οτι χρησιμοποιω την εντολη form2.printform
για να εκτυπωσω κατι και δουλευει μια χαρα και δεν εχω προβλημα
(για τα barcodes). Απλα καθε φορα πρεπει πριν δωσω εκτυπωση
να αλλαζω απο default τον HP στον SATO και ξανα αναποδα οταν
θελω να εκτυπωσω στον HP και κατανταει κουραστικο.

Ονοματα εκτυπωτων (οπως φαινονται στα Control Panel -> Printers)

hp deskjet 845c
SATO M-8400RV
Epson9 (Greek)

Ευχαριστω για το χρονο σας

Άβαταρ μέλους
agrippas
Script Master
Δημοσιεύσεις: 494
Εγγραφή: 18 Ιούλ 2002 14:52
Τοποθεσία: Υπερπέραν
Επικοινωνία:

Εκτυπωση σε συγκεκριμενο εκτυπωτη (οχι τον default)

Δημοσίευση από agrippas » 23 Ιουν 2003 14:50

Αν εκτυπώσεις με το Common Dialog δε θα έχεις πρόβλημα. Θα διαλέγεις εκτυπωτή την ώρα της εκτέλεσης.

Πάρε παράδειγμα:

Κώδικας: Επιλογή όλων

Private Sub Command1_Click()
  On Error GoTo CancelPrinting
  
  With CommonDialog1
    .CancelError = True
    .ShowPrinter
  End With
    
    Printer.ScaleMode = vbCentimeters
    Printer.CurrentX = 2
    Printer.Print "" & vbCrLf & vbCrLf
    Printer.CurrentX = 2
    Printer.Print "f(x) = " & txtFunction.Text
    Printer.PaintPicture picture1.Image, 2, 2
    Printer.EndDoc
  
CancelPrinting:

End Sub
κάτι που έφτιαξα παλιότερα για να εκτυπώνω το όνομα μιας συνάρτησης και τη γραφική της παράσταση. Εσύ μπορείς να εκτυπώσεις τη φόρμα. ;-) Εννοείται ότι θα έχεις ρίξει στη φόρμα ένα Common dialog active-x control (ctrl+T και ψάξε βρες το).

Άβαταρ μέλους
Valerov
Δημοσιεύσεις: 231
Εγγραφή: 13 Ιαν 2003 09:36
Τοποθεσία: Πάτρα

Εκτυπωση σε συγκεκριμενο εκτυπωτη (οχι τον default)

Δημοσίευση από Valerov » 24 Ιουν 2003 13:51

Loipon. Exeis treis ektipotes etsi? Tha kaneis stin arxi enan elegxo gia na deis tous ektipotes sou kai tin thesi tous:

Private Sub Command1_Click()
Dim prnPrntr As Printer
For Each prnPrntr In Printers
Form1.Print prnPrntr.DeviceName
Next
Set Printer = Printers(2)
End Sub


Auto tha sou tiposei stin forma 3 onomata ektipoton p.x:
Hp Deskjet 840c
Cannon
Epson

Se periptosi pou theleis na tiposeis me ton cannon kaneis to ekseis:

Private Sub command2_click()
set printer = Printers(2)
form1.printform
end sub


Kai eisai etoimos. An theleis me ton HP tote bazeis Printers(1) kai paei legontas..Dokimase to kai pes mou an doulepse (se mena pantos epiase:P)
:: Always Dive With A Partner ::

Άβαταρ μέλους
Valerov
Δημοσιεύσεις: 231
Εγγραφή: 13 Ιαν 2003 09:36
Τοποθεσία: Πάτρα

Εκτυπωση σε συγκεκριμενο εκτυπωτη (οχι τον default)

Δημοσίευση από Valerov » 24 Ιουν 2003 13:53

Opa iparxei ena lathos ston proto kodika pou elegxeis tous ektipotes. to Set Printer=printers(2) den to bazeis svisto:P
:: Always Dive With A Partner ::

brakos
Δημοσιεύσεις: 34
Εγγραφή: 27 Δεκ 2001 01:00
Τοποθεσία: Thessaloniki,Greece
Επικοινωνία:

Εκτυπωση σε συγκεκριμενο εκτυπωτη (οχι τον default)

Δημοσίευση από brakos » 24 Ιουν 2003 15:52

Παιχτη θα το δοκιμασω διοτι η φαση γινεται σε αλλο ΗΥ και οχι στου γραφειου. ΕΥΧΑΡΙΣΤΩ!!! :pint:

brakos
Δημοσιεύσεις: 34
Εγγραφή: 27 Δεκ 2001 01:00
Τοποθεσία: Thessaloniki,Greece
Επικοινωνία:

Εκτυπωση σε συγκεκριμενο εκτυπωτη (οχι τον default)

Δημοσίευση από brakos » 24 Ιουν 2003 16:06

COOOL. Δουλεψε μια χαρα...ΧΙΛΙΑ ΕΥΧΑΡΙΣΤΩ... :kaloe:

Άβαταρ μέλους
Valerov
Δημοσιεύσεις: 231
Εγγραφή: 13 Ιαν 2003 09:36
Τοποθεσία: Πάτρα

Εκτυπωση σε συγκεκριμενο εκτυπωτη (οχι τον default)

Δημοσίευση από Valerov » 25 Ιουν 2003 00:06

tipota file xarika pou edosa kai ego boitheia :)
:: Always Dive With A Partner ::

Άβαταρ μέλους
Bugman
Δημοσιεύσεις: 362
Εγγραφή: 01 Ιούλ 2003 20:39
Τοποθεσία: Πρέβεζα
Επικοινωνία:

Εκτυπωση σε συγκεκριμενο εκτυπωτη (οχι τον default)

Δημοσίευση από Bugman » 02 Ιούλ 2003 15:14

Από τον κατασκευαστή της Μ2000:
Πρώτα πρέπει κάποιος να δει αν υπάρχει εκτυπωτής - διότι αν δεν υπάρχει δεν μπορείς να ζητήσεις ονόματα εκτυπωτών!
σου βάζω όπως το έχω εγώ (σε ένα module)
' module isprinter there!
' Get information about all of the local printers using structure 1. Note how
' the elements of the array are loaded into an array of data structures manually. Also
' note how the following special declares must be used to allow numeric string pointers
' to be used in place of strings:
Private Declare Function lstrcpy Lib "kernel32.dll" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Long) As Long
Private Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" (ByVal lpString As Long) As Long
Private Declare Function EnumPrinters Lib "winspool.drv" Alias "EnumPrintersA" (ByVal flags As Long, ByVal name As String, ByVal Level As Long, pPrinterEnum As Long, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Const PRINTER_ENUM_LOCAL = &H2
Private Type PRINTER_INFO_1
flags As Long
pDescription As String
pName As String
pComment As String
End Type
Function IsPrinter() As Boolean
'KPD-Team 1999
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
Dim longbuffer() As Long ' resizable array receives information from the function
Dim printinfo() As PRINTER_INFO_1 ' values inside longbuffer() will be put into here
Dim numbytes As Long ' size in bytes of longbuffer()
Dim numneeded As Long ' receives number of bytes necessary if longbuffer() is too small
Dim numprinters As Long ' receives number of printers found
Dim c As Integer, retval As Long ' counter variable & return value
' Get information about the local printers
numbytes = 3076 ' should be sufficiently big, but it may not be
ReDim longbuffer(0 To numbytes / 4) As Long ' resize array -- note how 1 Long = 4 bytes
retval = EnumPrinters(PRINTER_ENUM_LOCAL, "", 1, longbuffer(0), numbytes, numneeded, numprinters)
If retval = 0 Then ' try enlarging longbuffer() to receive all necessary information
numbytes = numneeded
ReDim longbuffer(0 To numbytes / 4) As Long ' make it large enough
retval = EnumPrinters(PRINTER_ENUM_LOCAL, "", 1, longbuffer(0), numbytes, numneeded, numprinters)
If retval = 0 Then ' failed again!
Debug.Print "Could not successfully enumerate the printes."
IsPrinter = False
Exit Function
End If
End If

' Convert longbuffer() data into printinfo()
IsPrinter = numprinters <> 0
End Function

Αν σε ένα νέο υπολογιστή δεν έχει οριστεί κανένας εκτυπωτής τότε η συυνάρτηση μας είναι FALSE. Προσοχή δεν σημαίνει ότι υπάρχει εκτυπωτής. Δηλαδή θα μπρούσαμε να είχαμε δηλώσει έναν εκτυπωτή που δεν έχουμε και τότε θα είχαμε false.
(θα στήλω την λύση κομμάτι κομμάτι!)
Τελευταία επεξεργασία από το μέλος Bugman την 02 Ιούλ 2003 15:29, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
Bugman
Δημοσιεύσεις: 362
Εγγραφή: 01 Ιούλ 2003 20:39
Τοποθεσία: Πρέβεζα
Επικοινωνία:

Εκτυπωση σε συγκεκριμενο εκτυπωτη (οχι τον default)

Δημοσίευση από Bugman » 02 Ιούλ 2003 15:26

σε μια Form_Load()
For Each X In Printers
Combo1.AddItem X.DeviceName + " (" + X.Port + ")"
Next X
For i = 0 To Combo1.ListCount - 1
If Printer.DeviceName + " (" + Printer.Port + ")" = Combo1.List(i) Then Combo1.ListIndex = i
Next i
Printer.TrackDefault = False

σε μια Combo1_click
Dim X As Printer, i As Integer
i = InStr(Combo1, " (")
pName = Left$(Combo1, i - 1)
Port = Mid$(Combo1, i + 2, InStr(i + 2, Combo1, ")") - i - 2)
For Each X In Printers
If X.DeviceName = pName And X.Port = Port Then Set Printer = X
Next X


Για να τυπώσουμε, στο module που είμαστε (η σε φόρμα) πρέπει να χρησιμοποιήσουμε τα pName και Port (global μεταβλητες) και να κάνουμε:

For Each X In Printers
If X.DeviceName = pName And X.Port = Port Then Set Printer = X
Next X
Γιατί όλα αυτά, διότι αν δεν κάνουμε πριν την εκτύπωση αυτή την κίνηση ο handler του εκτυπωτή αλλάζει (από φόρμα σε φόρμα, και από ώρα σε ώρα!) και έτσι στέλνουμε μηνύματα στο πουθενά (όλες οι διεργασίες στα windows είναι με μηνύματα τα οποία έχουν τον κάποιον handler αποδέκτη!

brakos
Δημοσιεύσεις: 34
Εγγραφή: 27 Δεκ 2001 01:00
Τοποθεσία: Thessaloniki,Greece
Επικοινωνία:

Εκτυπωση σε συγκεκριμενο εκτυπωτη (οχι τον default)

Δημοσίευση από brakos » 02 Ιούλ 2003 23:49

Μαγκες ειστε απαιχτοι, ειλικρινα με ΥΠΕΡΚΑΛΥΨΑΤΕ.
Θα τα δοκιμασω αν και πιστευω οτι ειμαι πλεον ανετος. Δουλεψε :)

Ευχαριστω παρα πολυ!

Απάντηση

Επιστροφή στο “dot Net και Visual Studio”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες