Página 2 de 7

Funçao ISPRINTER()

Enviado: 14 Out 2014 11:45
por rochinha
Amiguinho,

Código: Selecionar todos

IsPrint( "LPT1" )
...
IsPrint( "LPT2" )
...
IsPrint( "COM1" )
...

Funçao ISPRINTER()

Enviado: 14 Out 2014 13:08
por porter
erro de compilação nessa linha:

Código: Selecionar todos

DEFAULT QuePrinter := "LPT1:"
syntax error at "QUEPRINTER"

xHarbour

Funçao ISPRINTER()

Enviado: 14 Out 2014 13:41
por Itamar M. Lins Jr.
Ola!
Vamos olhar o Changelog do Harbour ?

Código: Selecionar todos

2007-10-16 09:29 UTC+0100 Viktor Szakats (vszakats.net/harbour)
   * include/hbextern.ch
   * source/rtl/gete.c
     + Added HB_GETENV(). There you have a 2nd parameter
       which will be returned in case the requested
       envvar doesn't exist. This extensions is still present
       in GETE[NV](), but we'd better remove it.

   * include/hbextern.ch
   * source/rtl/isprint.c
     + Added HB_ISPRINTER() with support for extra parameter
       printer port name. This parameter also currently has
       support for Win32 printers. Win32 printer name support
       was removed from ISPRINTER() to keep compatibility.
       ISPRINTER() extra parameter is enabled with HB_COMPAT_XPP
       (which is the default).

2010-06-03 09:47 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
  * harbour/contrib/hbnf/ftisprn.c
    ! fixed HB_ISPRINT() -> HB_ISPRINTER()

2010-02-20 04:48 UTC+0100 Viktor Szakats (vszakats.net/harbour)
  * src/rtl/isprint.c
    - Deleted dirty Xbase++ extension of ISPRINTER(). Now it's
      purely Clipper compatible in default build.
      INCOMPATIBLE. For Xbase++ version, use XPP_ISPRINTER()
      (or HB_ISPRINTER() which is the exact same).

2009-11-24 10:57 UTC+0100 Viktor Szakats (vszakats.net/harbour)
  * contrib/hbwin/Makefile
  * contrib/hbwin/win_prn2.c
  * contrib/hbwin/win_prn3.c
  + contrib/hbwin/legacycp.c
    + Added new names for Windows printer support functions:
        WIN_PRINTEREXISTS()     (old name: PRINTEREXISTS())
        WIN_PRINTERSTATUS()     (old name: XISPRINTER())
        WIN_PRINTERPORTTONAME() (old name: PRINTERPORTTONAME())
        WIN_PRINTERLIST()       (old name: GETPRINTERS())
        WIN_PRINTERGETDEFAULT() (old name: GETDEFAULTPRINTER())
        WIN_PRINTERSETDEFAULT() (old name: SETDEFAULTPRINTER())
        WIN_PRINTFILERAW()      (old name: PRINTFILERAW())

    ; Old names still work, and they are guarded with HB_WIN_LEGACY_LEVEL_OFF
      macro, in case someone would like to disable them.
    ; Please use new names, old ones will be deleted enventually.

Código: Selecionar todos

C:\>hbmk2 -find isprinter
N├║cleo Harbour (instalado):
   IsPrinter()
   hb_IsPrinter()
xhb.hbc (instalado):
   XIsPrinter()
Então de acordo, com o Changelog temos n funções novas para trabalhar no windows.
WIN_PRINTEREXISTS() (old name: PRINTEREXISTS())
WIN_PRINTERSTATUS() (old name: XISPRINTER())
WIN_PRINTERPORTTONAME() (old name: PRINTERPORTTONAME())
WIN_PRINTERLIST() (old name: GETPRINTERS())
WIN_PRINTERGETDEFAULT() (old name: GETDEFAULTPRINTER())
WIN_PRINTERSETDEFAULT() (old name: SETDEFAULTPRINTER())
WIN_PRINTFILERAW() (old name: PRINTFILERAW())
Exemplo para saber o status da impressora e se ela existe.

Código: Selecionar todos

/* Copyright 2009 Viktor Szakats (vszakats.net/harbour) */

#require "hbwin"

#include "simpleio.ch"

PROCEDURE Main()

   Dump( win_printerList( .F., .F. ) )
   Dump( win_printerList( .F., .T. ) )
   Dump( win_printerList( .T., .F. ) )
   Dump( win_printerList( .T., .T. ) )

   ? "win_printerGetDefault():", ">" + win_printerGetDefault() + "<"
   ? "win_printerStatus():", hb_ntos( win_printerStatus() )

   RETURN

STATIC PROCEDURE Dump( a )

   LOCAL b, c

   ? "==="
   FOR EACH b IN a
      ?
      IF HB_ISARRAY( b )
         FOR EACH c IN b
            ?? c:__enumIndex(), c
            IF c:__enumIndex() == 2
               ?? "", ;
                  ">>" + win_printerPortToName( c ) + "<<", ;
                  "|>>" + win_printerPortToName( c, .T. ) + "<<|"
            ENDIF
            ?
         NEXT
         ? "---"
      ELSE
         ? b, win_printerExists( b ), win_printerStatus( b )
      ENDIF
   NEXT

   RETURN
Saudações,
Itamar M. Lins Jr.

Funçao ISPRINTER()

Enviado: 14 Out 2014 14:33
por porter
Mas eu estou compilando no xHarbour

Funçao ISPRINTER()

Enviado: 14 Out 2014 16:08
por rochinha
Amiguinho,
erro de compilação nessa linha:

Código: Selecionar todos

     DEFAULT QuePrinter := "LPT1:"
syntax error at "QUEPRINTER"

xHarbour
Tira a linha, desabilita.
Mas eu estou compilando no xHarbour
Olhe atentamente a mensagem do Itamar M. Lins Jr.

Funçao ISPRINTER()

Enviado: 15 Out 2014 11:23
por porter
o erro agora é nessa linha, e não posso desabilita-la senão a rotina não executa:

Código: Selecionar todos

nStatus := PrnStatus( QuePrinter )
Unresolved external '_HB_FUN_PRNSTATUS'

xHarbour

Funçao ISPRINTER()

Enviado: 15 Out 2014 16:52
por rochinha
Amiguinho,

Se esta função não existir para o xHarbour, devido a sua idade, melhor verificar as dicas do Itamar M. Lins Jr. sobre a função xIsPrint().

As opções estão ai, teste todas.

Funçao ISPRINTER()

Enviado: 16 Out 2014 20:16
por Nascimento
ainda sem soluçao
pq eu nao adiciono impressora no windows modo generic/text
mando diretamente pra lpt1
quando a impressora ta ligada e conectada vai bunitinho , mais se enganchar um papel ou se estiver desligada trava o sistema na hora
obs: estou falando dessas impressoras termicas NF

Funçao ISPRINTER()

Enviado: 16 Out 2014 22:42
por Itamar M. Lins Jr.
Mas rapaz...
Use o windows p/ controlar instale a impressora normalmente usando o drive dela!
Use os comandos do windows p/ detectar se a impressora está on line ou não etc...
Se for impressora velha talvez não funcione mesmo.

Da sua maneira, você vai precisa reinventar a roda e detectar pelo cabo paralelo RS232 os sinais RX,TX... voltar lá para o mundo das cavernas!!!!

Saudações,
Itamar M. Lins Jr.

Funçao ISPRINTER()

Enviado: 02 Out 2015 16:59
por Mario Mesquita
Boa tarde.

Levantei o tópico poer que também estou com problemas com o IsPrinter().

No meu caso a impressora matricial está cadastrada no Windows, mas algo estranho acontece:

No meio da semana, testei em um cliente e ele funcionou corretamente. Hoje, em outro, não.

Pior, ele está dando .T. para uma máquina \ impressora que nem existe aqui. Pois uso um string "\\computador\impressora" para o teste.

Li o tópico, mas fiquei confuso. Há alguma alternativa ao IsPrinter() ?

Muitos clientes usam impressoras matriciais, principalmente Epson LX e Bematech, aquela impressora fiscal.

Qualquer dica, desde já agradeço.

Saudações,
Mario.

Funçao ISPRINTER()

Enviado: 02 Out 2015 22:18
por rbonotto
Ola Mario Mesquita,

A solução poderá ser atravéz do WIN32PRN(), até o prinfileraw() joga no spool e fica lá como pendente.

De uma olhada neste tópico:
viewtopic.php?f=4&t=16561

*** no seu .PRG de impressão coloque:
#define DMPAPER_A5 11 && A5 148X210mm
#define DMPAPER_A5_TRANSVERSE 61 && A5 Transverse 148 x 210 mm


Usando o win32prn() talvez tenha uma solução para seu problema. Mas o caminho é um tanto "tortuoso" e acho eu
que para impressão em bobina não da certo pois ele tem um comando EJECT por vontade própria após a impressão.

Mande um feedback de sua experiencia.
Abraços.

Funçao ISPRINTER()

Enviado: 03 Out 2015 17:01
por Itamar M. Lins Jr.
Ola!
Usado o drive da Bematech/Epson para as impressoras de bobina, o EndDoc() corta o papel o eject e chr()'s se usarmos win_prn() não tem efeito.
Usando o Win_prn(), podemos usar as fontes de letras do windows.(algumas)


Saudações,
Itamar M. Lins Jr.

Funçao ISPRINTER()

Enviado: 03 Out 2015 18:36
por Nascimento
so a titulo de curiosidade estou usando o printfileraw()

posso usar o startdoc() e o enddoc() so pra acionar a guilhotina ??

Funçao ISPRINTER()

Enviado: 03 Out 2015 18:41
por asimoes
eu conheço as impressoras térmicas da bematech, qual o modelo que você está usando a USB, COM ou LPT?

Em qualquer um dos casos tem que instalar os drivers da impressora. Se for USB a comunicação é feita por dll MP2032.DLL

Funçao ISPRINTER()

Enviado: 03 Out 2015 22:13
por Itamar M. Lins Jr.
Ola!
posso usar o startdoc() e o enddoc() so pra acionar a guilhotina ??
Não pode. Só usando a classe win_prn().
Não uso a DLL da bematech, uso assim:

Código: Selecionar todos

**********************************
Function PrintCozinha(cArq,cPrint)
**********************************
*
*
Local oPrn, aPrn:=WIN_PRINTERLIST(), n := 0

hb_default(@cPrint,win_PrinterGetDefault())

if empty(aPrn)
   hwg_Msginfo('Não há impressoras instaladas')
   return .f.
endif
If cPrint == Nil
 cPrint := win_PrinterGetDefault()
EndIf

cText := memoread(cArq)
nLinh := mlcount(cText)
nTL   := (nLinh/5)
oPrn  := win_prn():New(cPrint)
oPrn :LandScape   := .F.
oPrn :FormType    := WIN_DMPAPER_USER
oPrn :PaperLength := 8.5*25.4*nTL
oPrn :PaperWidth  := 3*25.4*10
oPrn :Copies      := 1

if !oPrn:Create()
    hwg_Msginfo("Não foi criado documento.")
    Return nil
EndIf
if !oPrn:StartDoc("Cozinha: "+cArq)
   hwg_Msginfo("Erro na Impressora.")
   Return nil
EndIf

oPrn:SetColor( HB_WIN_RGB_BLACK )
oPrn:SetFont( "Lucida Console", 15, { 4, -70 } ) //escolha uma fonte!! pode mudar esse exemplo e diagramar o texto todo.

  For n := 1 to nLinh
      oPrn:Textout(memoline(cText,,n),.t.)
  Next
  oPrn:NewLine() //isso aqui não tem efeito :-( porque o tamanho do papel(comprimento) já foi setado antes lá em cima !!!
  oPrn:EndDoc()

Return .T.
Pode mandar imprimir no microsoft xps e ver o resultado!
No caso cArq é:

Código: Selecionar todos

       ASSOCIACAO XYZ        
Garçon.: MICK                    
Mesa...: 002
Setor..: 02  Comanda: 000014679
Fone...: (99) 9999-9999
27 de Setembro de 2015 12:14:19 am
================================================
Descrição-------------------Qtd---Unit-----Total
================================================
FRANGO PARMEGIANA "RF        1    42,00    42,00

Sub Total.....................:       42,00
                                       0,00
Forma Pgto: DINHEIRO                  42,00                                     
                                _____________
Total.........................:       42,00
            Obrigado! Volte Sempre!             
Inclusive imprime as letras acentuadas.

Saudações,
Itamar M. Lins Jr.