Funçao ISPRINTER()

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Funçao ISPRINTER()

Mensagem por rochinha »

Amiguinho,

Código: Selecionar todos

IsPrint( "LPT1" )
...
IsPrint( "LPT2" )
...
IsPrint( "COM1" )
...
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Funçao ISPRINTER()

Mensagem por porter »

erro de compilação nessa linha:

Código: Selecionar todos

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

xHarbour
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Funçao ISPRINTER()

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Funçao ISPRINTER()

Mensagem por porter »

Mas eu estou compilando no xHarbour
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Funçao ISPRINTER()

Mensagem 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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Funçao ISPRINTER()

Mensagem 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
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Funçao ISPRINTER()

Mensagem 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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Funçao ISPRINTER()

Mensagem 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
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Funçao ISPRINTER()

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Funçao ISPRINTER()

Mensagem 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.
rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Funçao ISPRINTER()

Mensagem 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.
mixsistemas@gmail.com
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Funçao ISPRINTER()

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Funçao ISPRINTER()

Mensagem por Nascimento »

so a titulo de curiosidade estou usando o printfileraw()

posso usar o startdoc() e o enddoc() so pra acionar a guilhotina ??
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Funçao ISPRINTER()

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Funçao ISPRINTER()

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Responder