Funçao ISPRINTER()

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

Moderador: Moderadores

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. »

Mais uma dica, sobre a impressoras bematech. O drive de instalação tem um bug ordinário, se instalar duas cada uma em uma porta USB diferente(Bar/Cozinha), vai sempre imprimir em uma USB só. Bug horroroso que me fez perder horas, para detectar. A solução é mudar manualmente a porta para USB001,USB002... sem usar o USB001 BEMATECH... Tenho um cliente que usa essa solução aqui:
https://www.ncomputing.com/pt-br/produc ... s/overview Pense na dor de cabeça p/ setar as bematech´s na USB... Até descobrir o bug do drive...

Instale o drive que vem com o fabricante, não precisa usar a DLL para impressão ou até mesmo colocar Generic Text na USB que funciona, ai é usar printfileraw()
para cortar o papel é cComandoCorte := "chr(27)+'i'", no manual tem mais comandos.

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 »

Bom dia a todos.

Em primeiro lugar, obrigado pelas dicas. Ajuda preciosa da galera que sabe muito.

Vejam, o problema básico é o não funcionamento do IsPrinter(). Porque muitos clientes ainda usam e querem continuar usando impressão matricial.No meu sistema Clippper, molinho. Mas no HMG, não está funcionando.

Em relatórios normais, isso é o de menos, dá pro cara reimprimir e seguir a vida. O ruim é um recibo que tem um pedido de serviço que sai em uma Bematech em alguns, LX 300 em outros. O problema é que se perde o recibo, reimprimir vira um problema, pois ele é meio enrolado, uma composição que depende do serviço e acontece que não tenho uma rotina de reimpressão como a da impressão, por questões técnicas, do programa mesmo. Aí desse jeito, o operador vai ter que excluir o recibo, voltar o contador (pois não pode pular numero do recibo) e refazer. Um transtorno que quero evitar.

Se não tem nada que teste se a impressora está apta, do li acho que o melhor seria o PrintFileRaw(), pois eu geraria um arquivo .TXT de impressão e poderia botar a impressão em um loop até o operador dar ok no impresso.

Seria isso mesmo ou estou falando bobagem?

Desde já agradeço o apoio.

Saudações,
Mario.
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 »

Mário,

Você pode gerar o arquivo e usar printfileraw
►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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Funçao ISPRINTER()

Mensagem por asimoes »

Mário

Veja se ajuda.

A idéia é gerar um arquivo na lpt1 e testar

Código: Selecionar todos

try
   SET DEVICE TO PRINTER 
   SET PRINTER TO LPT1
   SET PRINT ON
catch
   Alert("Erro, impressora off-line")
end
http://stackoverflow.com/questions/3727 ... s-attached
►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
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 »

Bom dia a todos.

Asimoes, vou tentar. Será que funciona com impressoras remoto? Eu uso o atalho direto: "\\computador\impressora". Deve funcionar, não? Mas se funcionar na LPT1 já é um avanço, principalmente no uso da Bematech.

Obrigado pela dica.

Saudações,
Mario.
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 »

Pessoal,

Tem outra dica interessante, não testei mas vale apena conferir.

http://problemazero.blogspot.com.br/201 ... rompt.html
►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
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Funçao ISPRINTER()

Mensagem por fladimir »

Testei a dica do Try Catch etc e aqui aparentemente tudo certo.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
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 »

Bom dia a todos.

Fladmir, deu certo, então? Ele avisou da impressora indisponível?

Boa, vou testar amanhã no cliente, tem uma Bematech lá. Vou tentar uma impressão remoto.

Saudações,
Mario.
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 a todos.

Retomei os testes da impressão em matricial usando as dicas dos colegas, mas nada funcionou.

O PrintFileRow() dá um erro na compilação, a mensagem diz que tem uma duplicidade na chamada de GetDefaultPrinter().

O Try/Catch também, mensagem "Error E0020 Incomplete statement or unbalanced delimiters". Sendo que fiz como o colega indicou, "Try / Catch / End".

Só lembrando que uso HMG. Vi a sintaxe do PrintFileRow() em um guia do xHarbour. Será que ele não funciona em Harbour?

Quem tiver uma dica, agradeço.

Saudações,
Mario.
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 »

Mário,

Para usar o try..catch..end

use:

#include "hbcompat.ch"

O correto é PrintFileRaw() ou Win_PrintFileRaw() (harbour versão 3.2/3.4)
►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
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 »

Bom dia a todos.

Asimoes, vou tentar assim. Não sabia que tinha que carregar um .ch pra usar o Try/Catch. Olha que busquei a literatura disponível e nada li sobre.

O PrintFileRaw() acho que é do xHarbour, vou tentar o Win_PrintFileRow(). De novo procurando a literatura de referência, não achei essa função.

Se não fosse vocês, tava ferrado.

Saudações,
Mario.
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Funçao ISPRINTER()

Mensagem por microvolution »

então pessoal, passando por aqui para dar minha contribuição e para enriquecer este tópico.
- bom, antes de migrar para o harbour (que aconteceu em janeiro/2015) usando a função ISPRINTER() se a impressora LPTx (no caso dos meus clientes EPSON LX300), tanto no win 9x quanto no xp 32 bits, a função funcionava corretamente.

Aí migrei usando HMG e agora há 2 meses estou aprendendo a migrar no braço (usando .BAT .HBC. HBP) e lib GTWVG.
Também estou compilando usando harbour 3.4.x (x = não sei qual final exatamente).
Tenho 2 sistemas windows aqui em minha máquina do laboratório:
- um deles o Win XP 32 bits (é claro);
- e o outro o mais atual -> win 10 64 bits (é claro também rsrs).

Então, descobri 2 coisas sem querer:
*** 1ª a isprinter() ou ft_isprint() (não sei qual diferença) no windows 10 reconhece perfeitamente os comandos e detectam se tem uma impressora LPT ligada. Se não houver alguma ligada, fiz até uma rotina assim:

Código: Selecionar todos

do while .not. lastkey() = CHR(27) .and. .not. isprinter()
   if .not. isprinter()
      if confirma("deseja usar outras impressoras do windows (usb, rede, wi fi, etc)",1,"Escolha outra impressora")==1
         ...
         // comandos para Win_Prn()
         exit
      endif
   endif 
enddo
Perdoem-me se o código acima houver falhas, pois não estou no meu laboratório e, sim num cliente em que percebi o problema... então fiz a função acima meio que no chutômetro, mas, a intenção é apenas didático.
Então professores, no caso acima, se as máquinas tiverem windows 10 64 bits (não testei em 32 bits - se existir), e vou testar num cliente que tem windows 7 32 bits.
Enfim, no win xp as linhas acima, passam desapercebidas como se a impressora LPTx estivesse ligada e, antes, tenho certeza que isso não era assim e, agora não sei o porquê que não está mais funcionando e no windows 10 funciona.
*** a 2ª coisa, perdoem-me (não tem nada a ver com este tópico) pois é apenas didático também:
- criei uma função/rotina em que o usuário pode modificar as fontes do meu sistema (não ficar preso às fontes de varredura - consolas, etc) e também escolher se quer fechar o sistema pelo X da janela e ainda, usar tela maximizada e usar o antigo alt+enter (no win 10 e tudo mais);
- então, no win xp todas as opções de configuração que relatei estão funcionando perfeitamente;
- já no windows 10 todas, execeto uma: a de maximização. isso não pega de jeito nenhum, ou melhor, só funciona se o usuário clicar no botão maximizar. E, isso, toda vez que ele entra no sistema tem que fazer o mesmo procedimento de clicar no botão maximizar - se quiser a tela maximizada.
Volto a repetir: no win xp funciona esta configuração perfeitamente e no win 10 não funciona.
- Então, fiz esse paralelo só pra dizer que o que funcionava no win xp, agora não está funcionando mais (isprinter());
- E, o que pensei que não funcionaria no win xp está funcionando corretamente (maximizar).
Finalmente, e, voltando ao tópico em questão...
Alguém conseguiu uma solução para o ISPRINTER() ou o mesmo FT_ISPRINT() voltar a funcionar no win xp (dizer se a impressora está ligada ou não?) ?

vlw e bom dia/tarde/noite/madrugada!!!
:% #-)
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
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 »

Na minha opinião, existem outras alternativas em relação a isprinter, e um detalhe importante o XP foi descontinuado, a microsoft não dá mais suporte, ou seja os bug´s que ainda existem não serão resolvidos.

O melhor teste que eu vejo é usando try..catch..end

Código: Selecionar todos

Try
   SET DEVICE TO PRINTER 
   SET PRINTER TO LPT1
   SET PRINTER ON
   ? "TESTANDO IMPRESSORA"
Catch
   Alert("Erro na impressora: offline, desligada ou desconectada")
End
►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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Funçao ISPRINTER()

Mensagem por asimoes »

Na internet você vai achar vários exemplos em c++ testando a lpt, as funções que eu vi tem tratamanto de erro, ou seja usam um try..catch
Então fica mais simples usar o exemplo que eu postei.
►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
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 não tenho impressora matricial para testar

Mas esse código deve ajudar:

Código: Selecionar todos

nHandle := fCreate("lpt1:")
IF FError() <> 0
    ? "Error while creatingg a file:", FError()
    Inkey(0)
ENDIF
►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)
Responder