Epson Nadeldrucker ... im Grafikmodus oder im Text Modus ?
Im Grafikmodus sind die sehr langsam (aus dem Gedächtnis ... ist lange her), verhalten sich aber wie Windowsdrucker.
Für Xbase++ Grafikdruck braucht man ein Windows Drucker Objekt.
Wenn es ein Windowsdruckerobjekt gibt, kann man es mit XbpPrinter() oder XbpPrinterDialog() ansprechen bzw. auswählen.
Meine Druckerklasse ist in der Wissensbasis zu finden, mit Beispielen, aber natürlich muss man in beiden Fällen dazu lernen.
Wo ein Netzwerkdrucker ist kann man normal auch ein lokales Windowsdruckerobjekt hinzufügen (über den Druckerserver)
Wenn die Freigabe über einen Windows Rechner (bis 7) erfolgt, nimmt man
NET USE \\Rechnername\Druckerfreigabename ... (NET USE /? zeigt die Parameter an)
Ob das unter Windows 8 und 10 noch geht kann ich nicht sagen.
Ich habe alle meine Programme vor Jahren auf grafischen Druck umgestellt.
Hier ein einfaches Beispiel wie man mit der Methode SAY druckt (für einfache Druckausgaben):
Code: Alles auswählen
*#### ANSI .t. äöü ÄÖÜ ß !!!!
#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
#include "Appevent.ch"
#include "Font.ch"
#include "xbpdev.ch"
*---------------- Fonts nur einmal erzeugen - create fonts only once ------
procedure main
local oHBPrinter, nRow, nCol, nCPI, nFont
SET CHARSET TO ANSI
* nur für Tests - only for debugging
#ifdef __WIN32__
set alternate to log.txt
#else
set alternate to log2.txt
#endif
set alternate on
? "Test_SAY.EXE - Printertest"
oHBPrinter := HBPrinter():New():create()
if oHBPrinter:IsPrinterError() // Fehler verhindern, avoid errors
?
? "Standarddrucker ist nicht verfügbar !"
? "Standardprinter is not ready !"
?
? "Status: ",oHBPrinter:printerStatus(),"=",cPrinterStatus(oHBPrinter:printerStatus())
?
?
wait
else
nFont := 1
nCPI := { 10, 12, 17, 10 }[nFont]
// The fonts are not exactly the same size, and may depend on the printer
// or printersetting (:setFontMode( [<nMode>] )
// Die Fontgröße sind nicht genau gleich. Außerdem können Sie vom
// Druckermodell bzw. der Druckereinstellung abhängen (:setFontMode( [<nMode>] )
// oHBPrinter:setFontMode(XBPPRN_FONTMODE_GRAPHIC)
oHBPrinter:addFont("12.Courier New" ) // -> 10CPI
oHBPrinter:addFont("10.Courier New" ) // -> 12CPI
oHBPrinter:addFont(" 7.Courier New" ) // -> 17CPI
oHBPrinter:addFont("12.Verdana" ) // why not, but don't use Blanks to format.
oHBPrinter:SetFont(nFont)
oHBPrinter:StartDoc("SAY Print")
for nRow := 1 to 70
do case
case nRow == 7
for nCol := 1 to 9
oHBPrinter:say(nRow,nCol*10,nCol,,10)
next
case nRow == 8
oHBPrinter:say(nRow,1," 1 2 3 4 5 6 7 8 9",,nCPI)
case nRow == 9
for nCol := 1 to 9
oHBPrinter:say(nRow,nCol*10,nCol,,nCPI)
next
case nRow == 10
oHBPrinter:say(nRow,1,"123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-",,nCPI)
otherwise
oHBPrinter:say(nRow,11,"Zeile / Row: "+str(nRow,3),,nCPI)
endcase
next
oHBPrinter:say(15,30,oHBPrinter:DevName)
oHBPrinter:say(16,30,"iiiii")
oHBPrinter:say(17,30,"mMmmm")
oHBPrinter:say(19,30,":compoundname")
oHBPrinter:say(20,30,":nominalPointSize")
oHBPrinter:say(21,30,":fixed")
oHBPrinter:say(19,50,oHBPrinter:SetFont():compoundname)
oHBPrinter:say(20,50,oHBPrinter:SetFont():nominalPointSize)
oHBPrinter:say(21,50,oHBPrinter:SetFont():fixed)
oHBPrinter:newPage()
oHBPrinter:say(15,30,"NewPage()")
for nRow := 1 to 70
do case
case nRow == 9
oHBPrinter:say(nRow,1," 1 2 3 4 5 6 7 8 9")
case nRow == 10
oHBPrinter:say(nRow,1,"123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-")
otherwise
oHBPrinter:say(nRow,11,"Zeile / Row: "+str(nRow,3))
endcase
next
oHBPrinter:EndDoc()
endif
? "END"
inkey(5)
quit
return
und hier mit den normalen auf 1/10 mm basierenden Auflösungen druckt (mischen ist kein Problem):
Code: Alles auswählen
*#### ANSI .t. äöü ÄÖÜ ß !!!!
#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
#include "Appevent.ch"
#include "Font.ch"
#include "XBPDEV.ch"
*---------------- Fonts nur einmal erzeugen - create fonts only once ------
procedure main
local oHBPrinter,getlist := {} , cEAN13_Nr := space(13)
SET CHARSET TO ANSI
cls
@1,1 say "len()=12 -> will calculate 13. position; len()=13 -> no change"
@3,1 say "EAN13-Nr.: " get cEAN13_Nr picture "9999999999999"
set cursor on
set confirm on
read
if empty(cEAN13_Nr)
quit
endif
? "-"+curdrive()+"-"+curdir()+"- Vor Create"
oHBPrinter := HBPrinter():New():create() // Bei Netzwerkdruckern kann es vorkommen, dass
// diese nicht verfügbar sind, dann fehlen alle
// Infos zum Drucker und es kommt zu Laufzeitfehlern
// if your network printer is not available
// there will be runtime errors
? "-"+curdrive()+"-"+curdir()+"- Nach Create"
if oHBPrinter:IsPrinterError() // Fehler verhindern, avoid errors
? "-"+curdrive()+"-"+curdir()+"- Nach ERROR"
?
? "Drucker ist nicht verfügbar !"
? "Printer is not ready !"
?
? "Status: ",oHBPrinter:printerStatus(),"=",cPrinterStatus(oHBPrinter:printerStatus())
else
oHBPrinter:addFont("10.Arial")
oHBPrinter:setFont(1)
?
? "Printer name: ",oHBPrinter:devName
? "Printer comment: ",oHBPrinter:comment
? "Printer port: ",oHBPrinter:devPort
? "Printer location: ",oHBPrinter:location
?
? "-"+curdrive()+"-"+curdir()+"- Vor StartDoc"
oHBPrinter:StartDoc()
? "-"+curdrive()+"-"+curdir()+"- Nach StartDoc"
oHBPrinter:PrintText(200,200,"Testdruck für Barcode")
oHBPrinter:PrintBarCodeEan13(200,500,cEAN13_Nr)
? "-"+curdrive()+"-"+curdir()+"- Vor EndDoc"
oHBPrinter:EndDoc()
? "-"+curdrive()+"-"+curdir()+"- Nach EndDoc"
endif
? "Ende"
wait
return