Página 3 de 7

Funçao ISPRINTER()

Enviado: 04 Out 2015 15:00
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.

Funçao ISPRINTER()

Enviado: 06 Out 2015 12:05
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.

Funçao ISPRINTER()

Enviado: 06 Out 2015 12:35
por asimoes
Mário,

Você pode gerar o arquivo e usar printfileraw

Funçao ISPRINTER()

Enviado: 06 Out 2015 12:46
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

Funçao ISPRINTER()

Enviado: 07 Out 2015 07:42
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.

Funçao ISPRINTER()

Enviado: 07 Out 2015 10:30
por asimoes
Pessoal,

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

http://problemazero.blogspot.com.br/201 ... rompt.html

Funçao ISPRINTER()

Enviado: 08 Out 2015 01:10
por fladimir
Testei a dica do Try Catch etc e aqui aparentemente tudo certo.

Funçao ISPRINTER()

Enviado: 08 Out 2015 09:44
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.

Funçao ISPRINTER()

Enviado: 03 Nov 2015 15:45
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.

Funçao ISPRINTER()

Enviado: 03 Nov 2015 16:38
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)

Funçao ISPRINTER()

Enviado: 04 Nov 2015 08:26
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.

Funçao ISPRINTER()

Enviado: 22 Jan 2016 00:33
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!!!
:% #-)

Funçao ISPRINTER()

Enviado: 22 Jan 2016 10:26
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

Funçao ISPRINTER()

Enviado: 22 Jan 2016 10:58
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.

Funçao ISPRINTER()

Enviado: 22 Jan 2016 11:59
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