FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour TdosPrn para USB
Posts: 205
Joined: Wed Sep 02, 2009 03:11 AM
TdosPrn para USB
Posted: Fri Dec 17, 2010 04:01 AM

Hola amigos

Utilizo TdosPrn para enviar facturas a impresoras de matriz pero cada vez me encuentro mas con impresoras de matriz conectadas por medio de adaptadores USB-Paralelo y no logro que TdosPrn trabaje en ese ambiente. Existe alguna actualizacion ? alguna sugerencia ?

Gracias

Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM
Re: TdosPrn para USB
Posted: Fri Dec 17, 2010 04:58 AM

Jose,

Seguramente alguien tendra algun fix a la clase que lo permita, pero por lo mientras yo hago lo siguiente :

  • Comparto la impresora (usb)

  • Instalo otra vez el driver de la impresora, pero desde un principio le indico que use LPT1

  • no la comparto
  • no la pongo como predeterminada ( en mi caso no lo necesito )
  • obviamente, le pongo un nombre diferente para evitar el xxx impresora(2)

  • Ya instalada, en propiedades/puertos creo un puerto nuevo/local port y la mapeo a la original(usb) con \nombrepc\nombreimpresora
    nombrepc = nombre del equipo donde esta instalada la impresora usb
    nombreimpresora = nombre con el cual compartiste la impresora usb

Y listo, en mi app selecciona la impresora que imprime al LPT1 pero esta al recibir la info, la redirecciona a la otra (usb)

Espero te funcione, yo no he tenido problemas con esta chapuza y lo uso ya sea local o en red.

Saludos

FWH 10.6 + xHarbour + Borland 582
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: TdosPrn para USB
Posted: Fri Dec 17, 2010 11:05 AM
Yo uso una cosa muy simple .
Instalo la impresora y la comparto con el nombre que quiera por ejemplo "miMatricial"
luego al cargar el programa pongo estas lineas para asegurarme que me conecto a la impresora :

Code (fw): Select all Collapse
local lpt:="lpt1"   // puerto que quiero usar 
local nombreprinter := "miMatricial"   // nombre de la impresora en compartida
local ordenador := "\\manuel"    // nombre del ordenador 
local cmpat:= "net use "+lpt+" "+ordenador+"\"+nombreprinter+" /persistent:yes"
winexec(cMPat)


Saludos.
Posts: 205
Joined: Wed Sep 02, 2009 03:11 AM
Re: TdosPrn para USB
Posted: Fri Dec 17, 2010 04:09 PM

Gracias por contestar...
saludos

Posts: 4
Joined: Sat Sep 11, 2010 02:55 AM
Re: TdosPrn para USB
Posted: Sun Dec 19, 2010 03:08 PM

Mira esto:
/
Modificada por Diego
Atualizacao: Suporte para Impressao USB
/

include "fivewin.ch"

include "fileio.ch"

translate nTrim(<n>) => AllTrim(Str(<n>,10,0))

define PF_BUFLEN 2048

//----------------------------------------------------------------------------//

CLASS TDosPrn

 DATA LastError
 DATA cPort, cCompress, cNormal, cFormFeed, cBuffer //    AS STRING
 DATA hDC, nRow, nCol, nLeftMargin, nTopMargin      //    AS NUMBER
 DATA lAnsiToOem                                    //    AS LOGICAL
 DATA ImpUSB                                        //    AS LOGICAL
 DATA ImpCOM                                        //    AS LOGICAL

 METHOD New(cPort,cVerUSB) CONSTRUCTOR

 METHOD End()

 METHOD StartPage()  VIRTUAL
 METHOD EndPage()

 METHOD Command(xPar1, xPar2, xPar3, xPar4, xPar5)

 METHOD SetCoors(nRow, nCol)

 METHOD NewLine()       INLINE (::cBuffer += CRLF ,;
                                ::nRow++          ,;
                                ::nCol    := 0     )

 METHOD Write(cText, lAToO) ;
        INLINE (iif(lAtoO == NIL, lAtoO := .T.,),;
                ::cBuffer += iif(lAtoO, AnsitoOem(cText), cText) ,;
                ::nCol    += len(cText)                           )

 METHOD Say(nRow, nCol, cText)

 METHOD SayCmp(nRow, nCol, cText)

 METHOD PrintFile(cFile)

ENDCLASS

//----------------------------------------------------------------------------//

METHOD New(cPort,cVerUSB) CLASS TDosPrn

 DEFAULT cPort := &quot;LPT1&quot;, cVerUSB:=.F.

 cPort := Upper(cPort)

 ::ImpUSB      := .F.
 ::ImpCOM      := .F.
 ::cCompress   := &quot;15&quot;
 ::cNormal     := &quot;18&quot;
 ::cFormFeed   := &quot;12&quot;
 ::cBuffer     := &quot;&quot;
 ::nLeftMargin := 0
 ::nTopMargin  := 0
 ::nRow        := 0
 ::nCol        := 0
 ::lAnsiToOem  := .T.
 if cVerUSB .and. upper( PrnGetPort( ) )=&quot;USB&quot; .or. cVerUSB .and. upper( PrnGetPort( ) )=&quot;COM&quot;
    ::cPort       := DirTempdoWindows()+&quot;\usb.imp&quot;
    ::ImpUSB      := .T.
    if cVerUSB .and. upper( PrnGetPort( ) )=&quot;COM&quot;
       ::ImpCOM   := .T.
    endif
 else
    ::cPort       := cPort+iif(!&quot;.&quot;$cPort,&quot;.PRN&quot;,&quot;&quot;)
 endif
 ::hDC         := fCreate(::cPort)
 ::LastError   := 0

 IF ::hDC &lt; 0
      ::LastError := fError()
 ENDIF

RETURN Self

//----------------------------------------------------------------------------//

METHOD End() CLASS TDosPrn
local thisprn, thisfile,opfile,nrow,n,oFont,arq2

 IF !empty(::nRow+::nCol)
      ::EndPage()
 ENDIF

 ::LastError := 0

 IF !fClose(::hDC)
      ::LastError := fError()
 else

    if ::ImpUSB .and. !::ImpCOM
       DEFINE FONT oFont NAME &quot;COURIER NEW&quot; SIZE 0,70
       PRINT thisprn NAME &quot;USB mode&quot;
          nrow:=20
          PAGE
             opFile:=tTxtFile():NEW(DirTempdoWindows()+&quot;\usb.imp&quot;)
             for n=1 to opFile:reccount()
                thisprn:say(nrow,00,rtrim(opFile:readline()),oFont)
                opFile:skip()
                nrow:=nrow+80
             next
             opFile:End()
          ENDPAGE
       ENDPRINT
    elseif ::ImpUSB .and. ::ImpCOM
       ferase(&quot;impcom.bat&quot;)
       arq2:=fcreate(&quot;impcom.bat&quot;)
       fwrite(arq2,&quot;copy &quot;+DirTempdoWindows()+&quot;\usb.imp &quot;+LEFT(upper( PrnGetPort( ) ),4))
       fclose(arq2)
       winexec(&quot;impcom.bat&quot;,0)
    endif
 ENDIF

RETURN NIL

//----------------------------------------------------------------------------//

METHOD EndPage() CLASS TDosPrn

 LOCAL nFor, nLen, nSec
 LOCAL lError
  • ::Command(::cFormFeed)

    ::LastError := 0

    IF fWrite(::hDC, ::cBuffer) < len(::cBuffer)
    ::LastError := fError()
    ENDIF

    ::cBuffer := ""
    ::nRow := 0
    ::nCol := 0

RETURN NIL

//----------------------------------------------------------------------------//

METHOD Command(xPar1, xPar2, xPar3, xPar4, xPar5) CLASS TDosPrn

 LOCAL cCommand, cToken, cString
 LOCAL nToken

 cString  := cValToChar(xPar1)

 IF xPar2 != NIL
      cString += &quot;,&quot;+cValToChar(xPar2)
 ENDIF

 IF xPar3 != NIL
      cString += &quot;,&quot;+cValToChar(xPar3)
 ENDIF

 IF xPar4 != NIL
      cString += &quot;,&quot;+cValToChar(xPar4)
 ENDIF

 IF xPar5 != NIL
      cString += &quot;,&quot;+cValToChar(xPar5)
 ENDIF

 cCommand := &quot;&quot;
 nToken   := 1

 DO WHILE !Empty(cToken := StrToken(cString, nToken++, &quot;,&quot;))
      cCommand += Chr(Val(cToken))
 ENDDO

 ::cBuffer += cCommand

RETURN NIL

//----------------------------------------------------------------------------//

METHOD SetCoors(nRow, nCol) CLASS TDosPrn

 nRow += ::nTopMargin
 nCol += ::nLeftMargin

 IF ::nRow &gt; nRow
      ::EndPage()
      ::StartPage()
 ENDIF

 IF nRow == ::nRow  .AND. nCol &lt; ::nCol
      ::EndPage()
      ::StartPage()
 ENDIF

 DO WHILE ::nRow &lt; nRow
      ::NewLine()
 ENDDO

 IF nCol &gt; ::nCol
      ::Write(Space(nCol-::nCol))
 ENDIF

RETURN NIL

//----------------------------------------------------------------------------//

METHOD Say(nRow, nCol, cText, lAToO) CLASS TDosPrn

 DEFAULT lAToO := ::lAnsiToOem

 ::SetCoors(nRow, nCol)
 ::Write(cText, lAToO)

RETURN NIL

//----------------------------------------------------------------------------//

METHOD SayCmp(nRow, nCol, cText, lAToO) CLASS TDosPrn

 DEFAULT lAToO := ::lAnsiToOem

 ::SetCoors(nRow, nCol)
 ::Command(::cCompress)
 ::cBuffer += iif(lAToO, AnsitoOem(cText), cText)
 ::nCol    += Int(len(cText)/1.7+.5)
 ::Command(::cNormal)

RETURN NIL

//----------------------------------------------------------------------------//

METHOD PrintFile(cFile) CLASS TDosPrn

 LOCAL hFile
 LOCAL nRead
 LOCAL cBuffer

 hFile := FOpen(cFile, FO_READ)

 IF hFile &lt; 0
      RETURN .F.
 ENDIF

 cBuffer := Space(PF_BUFLEN)

 DO
      nRead := fRead(hFile, @cBuffer, PF_BUFLEN)

      IF fWrite(::hDC, Left(cBuffer, nRead)) &lt; nRead
           ::LastError := fError()
           fClose(hFile)
           RETURN .F.
      ENDIF
 UNTIL nRead == PF_BUFLEN

 fClose(hFile)

RETURN .T.

//----------------------------------------------------------------------------//

FUNCTION WorkSheet(cPort)

 LOCAL oPrn
 LOCAL cLine
 LOCAL nFor

 cLine := &quot;&quot;

 FOR nFor := 0 TO 7
      cLine += Str(nFor,1)+Replicate(&quot;.&quot;,9)
 NEXT

 cLine := Substr(cLine,3)

 oPrn := TDosPrn():New(cPort)

 oPrn:StartPage()

 FOR nFor := 0 TO 65
      oPrn:Say(nFor,0,StrZero(nFor,2)+cLine)
 NEXT

 oPrn:EndPage()

 oPrn:End()

RETURN NIL


Function DirTempdoWindows()
Local cDir := GetEnv("TEMP")

// Se Vazio cDir Entao cDir := GetEnv("TMP")

If Right( cDir, 1 ) == "\"
cDir = SubStr( cDir, 1, Len( cDir ) - 1 )
EndIf

If !Empty(cDir)
If !lIsDir(cDir)
cDir := GetWinDir()
EndIf
Else
cDir := GetWinDir()
EndIf

Return(AllTrim(cDir))


// Classe Sysfar para Impressão Dos


CLASS SysDosPrn
DATA File,cPort,ImpUSB

 METHOD New(USB) CONSTRUCTOR

 METHOD Say(cText)

 METHOD End()

ENDCLASS


METHOD New(USB) CLASS SysDosPrn
DEFAULT USB:=.F.
::ImpUSB := .F.
if USB .and. upper( PrnGetPort( ) )="USB"
::cPort := DirTempdoWindows()+"\usb.imp"
::ImpUSB := .T.
else
::cPort := "LPT1.PRN"
endif
::File := fCreate(::cPort)
RETURN Self


METHOD Say(cText) CLASS SysDosPrn
default ctext:=""
fwrite(::File,cText+chr(13)+chr(10))
RETURN NIL


METHOD End() CLASS SysDosPrn
local thisprn, thisfile,opfile,nrow,n,oFont
fclose(::File)
if ::ImpUSB
DEFINE FONT oFont NAME "COURIER NEW" SIZE 0,70
PRINT thisprn NAME "USB mode"
nrow:=20
PAGE
opFile:=tTxtFile():NEW(DirTempdoWindows()+"\usb.imp")
for n=1 to opFile:reccount()
thisprn:say(nrow,00,rtrim(opFile:readline()),oFont)
opFile:skip()
nrow:=nrow+80
next
opFile:End()
ENDPAGE
ENDPRINT
endif
RETURN NIL


Posts: 139
Joined: Fri Nov 25, 2005 04:38 PM
Re: TdosPrn para USB
Posted: Mon Dec 20, 2010 01:21 AM

compartilhe a impressora e use no lugar da LPT1

\maquina\impressora

Ronaldo Minacapelli
Sistemas, Hospedagem e Criação de WebSites
http://www.bazevani.com.br

Continue the discussion