Hast du Druckersteuerzeichen in der Datei oder ist sie nur OEM/ANSI Text, der auf den Drucker muss ?
bei ersterem müssen die raus wenn du GraStringAt() nutzen willst.
Ansonsten kann ich dir auch meine Druckerklasse empfehlen, dort habe ich neben :PrintText() auch :say(...) als Methode eingebaut,
mit der man @ say Druckausgaben einfach umstellen kann. Hier das Druckbeispiel, das man leicht ändern könnte um z.B.
Die Datei Zeilenweise einzulesen und auszudrucken:
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