Prezados, mais uma informação, ou melhor algumas.
No chutômetro, pesquisei no site oficial do professor JQuintas (
harbourdoc.com.br) tudo que tinha na pesquisa como "print". Achei várias funções. Resolvi testar as seguintes:
Código: Selecionar todos
setcolor('r/n')
@ 05,10 SAY "os"
? OS()
? "isprinter()",isprinter()
? "ft_isprint()",ft_isprint()
? "hb_IsPrinter()",hb_IsPrinter()
? "isprint()",isprint() // funcionou no win xp
? "sprintf()",sprintf()
? "PrintReady(1)",PrintReady(1) // 1= lpt1 - 2= lpt2 - 3= lpt3
// @ 14,10 say PrintStatus()
? "PrinterExists()",PrinterExists() // funcionou no win xp
? "PrinterPortToname()",PrinterPortToname()
? "XIsPrinter()",XIsPrinter()
// ? "ERR_print_errors(BIO_new_fd( 1, HB_BIO_NOCLOSE ))",ERR_print_errors(BIO_new_fd( 1, HB_BIO_NOCLOSE ))
? "NetPrinter()",NetPrinter() // funcionou no win xp
wait "impressão teste fim... ENTER"
As linhas acima, ao compilar deu tudo certo. Então os resultados foram os seguintes:
- as 2 linhas comentadas, pra funcionar tive que adicionar as libs "
hbfoxpro.hbc e hbssl.hbc";
- no windows 10 (64 bits) todas as linhas se comportaram corretamente, ou seja, apresentaram que não tinha nenhuma impressora paralela ligada no momento (.f. ou nil ou 0);
- no win xp (32 bits) a maioria apresentou um falso-positivo, ou seja, deu como resultado que tinha uma impressora paralela ligada (.t.);
- as funções abaixo:
Código: Selecionar todos
? "isprint()",isprint() // funcionou no win xp
? "PrinterExists()",PrinterExists() // funcionou no win xp
? "NetPrinter()",NetPrinter() // funcionou no win xp
por sua vez, apresentaram como .f., ou seja, retornaram como não haviam impressoras paralelas ligadas no momento.
Com isso, optei e fiz o teste final com apenas uma das 3, e, foi a que leva o nome mais aproximado (por coincidência ou não) da antiga função ISPRINTER() que é a primeira desta última lista: "
ISPRINT()";
- Então, fiz a modificação em meu código e DEU TUDO CERTO.
Agora só pra finalizar minha participação (por enquanto) neste tópico:
- 1ª ) uma das libs no windows 10 funcionou também corretamente, mas, no win xp, foi necessário colocar na pasta de instalação do meu sistema a lib
"libeay32.dll" da pasta hb34\bin, pois senão o aplicativo (.exe) não executava e apresentava uma mensagem de erro. Então, preferi eliminar esta função, diante de várias que usei;
- 2ª ) para não ter que ficar incomodando o usuário final do meu sistema, fiz algumas linhas que, se houver uma impressora lptx instalada (matricial) ligada a impressão vai direto pra ela numa boa. Mas, se a impressora estiver desligada, enquanto não ligar a impressora ou o usuário manualmente não responder à seguinte pergunta com a resposta NÃO, o sistema fica em loop:
"A impressora matricial está desligada ? SIM/NÃO?"
... então Se o usuário responder com não, aí sim é feita nova pergunta:
"Deseja usar impressora alternativa (usb, wi fi, rede, etc) ?"
Com a resposta NÃO, a impressão é realmente cancelada, mas, se a resposta for SIM, aí sim abre-se uma tela, ou melhor, um browse (achoice) com as impressoras usb ou da rede instaladas, e, o usuário pode optar por uma delas ou ainda o CutePDF (tudo através do WIN_PRN).
Bom, resumindo...
Quem está com problemas no ISPRINTER() dando falso-positivo como eu, no windows XP, substituam pela função:
ISPRINT()
Abraços!
Não foi necessário o google, no site
harbourdoc.com.br do nosso amigo, colaborador e professor JQuintas foi o suficiente. O google está aí pra todos nós, e, graças a Deus, temos aqui o
PCTOLEDO.COM.BR/FORUM com quase tudo que precisamos, incluindo os melhores professores, colaboradores, no clipper no Brasil...
viva o nosso barco no porto seguro: clipper/harbour!

)