Página 3 de 12

Enviado: 26 Jun 2007 15:43
por Maligno
Acho que foram +/- umas 4 mensagens. Mas dei uma olhada (+/-) nas demais threads, e não me pareceu que falta alguma coisa. Acho que foi só nesta aqui.

Enviado: 26 Jun 2007 15:44
por Maligno
MENSAGEM QUE TINHA SIDO PERDIDA
MarcosV escreveu:blz maligno... mas não deixe de dizer sua opnião... é muito valida pra mim...
Darei minha opinião. Mas só à noite (leia-se madrugada) vou testar.
antes de resolver desenvolver o USBPRINT... testei todas formas que encontrei (tenho uma pasta com dezenas de "soluções" )... mas nenhuma foi do jeito que eu precisava... o unico programa que funcionou melhor pra mim... foi o DOSPRINTER... mas é pago...
Se você gosta do que o DOSPrinter oferece, faça a mesma coisa ou algo melhor, sem se preocupar se vai demorar ou se é muito complicado. É claro que, se houver urgência em adotar uma solução pra esse problema, use o que está mais à mão. Depois, com o tempo, você desenvolve sua própria solução, talvez até melhor que o DOSPrinter. No mínimo, você vai aprender bastante.
é a tradução dos codigos das impressoras matriciais (por enquanto só aqueles do Help)... uso normal/condensado/expandido na mesma linha...
Isso até já tinha comentado com o Pablo. Particularmente eu não preciso de nada muito rebuscado. Até porque estou pra abandonar o Clipper. Em outra ferramenta eu já tenho um ótimo gerador de relatórios. Mas no WAPI eu decidi mandar para o spooler o arquivo de impressão no modo RAW mesmo. Isso porque eu penso que fica mais fácil e organizado manter uma LIB de abstração para esses comandos de de impressão. Um exemplo muito simples:

Código: Selecionar todos

Print(PRow()+1,0, _kPRT_STROKE_BOLD + "TESTE"+;
                  _kPRT_STROKE_THIN )
A função de impressão recebe a string e a direciona para um arquivo ou diretamente para LPT (se for nota fiscal). Se arquivo, poderá ir pro spooler ou pra um preview. Os símbolos de stroke bold/thin são substituídos conforme a impressora definida pelo usuário. Se LaserJet uso PCL5e. Se matricial Epson, uso ESC/P. Claro que se a impressão for pra um preview, nada será embutido na string.
Acho que esta forma de trabalho me deixa bem tranqüilo. O código fica limpo e cumpre sua finalidade perfeitamente, o que justifica não fazer tradução alguma no WAPI.

Enviado: 26 Jun 2007 15:49
por Maligno
MarcosV escreveu:blz maligno... mas não deixe de dizer sua opnião... é muito valida pra mim...
Aliás, não deu tempo pra testar. Isto é, quando fui querer fazer um teste, meus olhos não queriam abrir mais. Eram 6 da manhã. Mas testo depois. :)

Enviado: 26 Jun 2007 16:14
por Pablo César
MarcosV escreveu:Favor postar os resultados
Parabéns Marcos pelo sua decisão de compartilhar conosco a sua contribuição que ajudará a quebrar mais um dos paradigmas do Clipper...

Testei com uma Epson LX300 (não tenho impressora USB) e testei com a seguinte sintaxe:

USBPRINT TESTE.TXT /DEF /NODEL

O conteúdo do arquivo TESTE.TXT E´:

Código: Selecionar todos

☼ TESTE
♫ TESTE
↕ TESTE

☼ TESTE ♫ TESTE ↕ TESTE
O teste funcionou muito bem podendo ser perfeito a não ser pela questão que ignorou a primeira linda do arquivo (que era para ter imprimido a palavra "TESTE" condensado/comprimido, mas essa 1ª linha foi ignorada.

O que me sorprendeu, é que mesmo havendo vários comandos numa mesma linha, ele faz a impressão de acordo o comando de impressão que antecede ( CHR(15), CHR(14) E CHR(18) ) oque acho que não acontecia com o USB do Heveraldo.

Enviado: 26 Jun 2007 17:24
por MarcosV
Valew Pablo... sobre o USBPRINT... estou aberto a sugestoes... para dar uma força para quem esta com esse tipo de limitação com o clipper... o erro que comentou... é o seguinte... não foi ignorado a primeira linha... quando voce usou o CHR(14) na segunda linha... a impressao da segunda linha encobriu a primeira... nas minhas impressoes naum tive problema com isso... mas to estudando um jeito pra resolver essa questao!

USBPRINT

Enviado: 26 Jun 2007 18:34
por Maligno
Testei o programa, de acordo com o novo link que você acabou de postar. Não instalei a LX-300 que tenho aqui. Usei a HP LaserJet 1022. A saída para o spooler funcionou perfeitamente. Mas como era de se esperar, o código para "expandido" fez as letras ficarem sobrepostas. A LaserJet aceita o código, mas isso exigiria também uma redefinição das entrelinhas. Até aí normal. O programa está crescendo e a coleção de códigos de impressão vai aumentar bastante.

O que eu acho que pega é que, dependendo da combinação dos parâmetros de linha, dá o erro "Não é possível criar a impressão". Se eu definir /NODEL, obrigatoriamente tenho que informar qual impressora. Imagino que você deva ter feito o programa de forma que ele já pressupõe que os argumentos estão na ordem correta. Acho que seria uma boa idéia identificar os parâmetros. Exemplo: -P:<printer>. Se seu programa encontrar o sufixo -P:, você já sabe que uma impressora será definida. Com os demais parâmetros também. Isso não só facilita o seu trabalho de codificação, como também dá ao usuário a liberdade de informar os argumentos na ordem que quiser.

Outro detalhe: como o programa será utilizado primordialmente de dentro de outro programa, acho que as telas são desnecessárias. Acho que seria mais prático você criar uma interface qualquer que lhe permita se comunicar com o programa executor. Ou então, pelo menos, um switch a mais para "desligar" essa interface por janelas. Ou, melhor ainda: um switch que permita o usuário escolher o modo da interface: se por janela, como é agora, por texto em linha ou o "silêncio" no vídeo, com uma comunicação por outro meio (arquivos).

Enviado: 27 Jun 2007 00:10
por MarcosV
Opa... Valew pelas sugestoes Maligno... quanto a interface... fiz meio rapidão... queria ver como ia ser a aceitação e se realmente iria ajudar o pessoal aqui do forum... se realmente o pessoal se interessar... vou pegar mais com tempo para fazer algumas melhorias...

Achei muito boa sua sugestao sobre os parametros... quando estava desenvolvendo... ja imaginei que poderia confundir... uma duvida... quais as telas que vc comentou? a tela de ajuda ou a tela para selecionar impressoras? se for a tela para selecionar impressora... la tem dois parametros: o '/SEL' (que o programa assume como padrao)... nesse modo realmente abre a uma janela com as impressoras instaladas... mas vc tb pode informar como paramentro: '/DEF' (impressora Default / Padrao) ou ainda informar o nome da impressora... ai fica transparente... naum irá aparecer nenhuma tela.

Enviado: 27 Jun 2007 00:14
por Maligno
MarcosV escreveu:quais as telas que vc comentou?
Todas elas. Eu acho que elas não seriam necessárias. A não ser que você, por exemplo, colocasse o programa no tray e ali ele fosse configurado, a exemplo do que é feito em outros programas.
la tem dois parametros: o '/SEL'...
Sim, eu vi o help. Mas a idéia era fazer todas sumirem, opcionalmente. Se o usuário quiser, tudo bem.

Enviado: 27 Jun 2007 00:51
por MarcosV
Oi Maligno... agora entendi a idéia... não tinha pensado nisso... realmente vc esta certo... e tanta preocupaçao com o usuario final... que acabei me enpolgando... e naum vi o outro lado... esse programa naum sera usado pelo usuario final... vou alterar isso sim.. ou melhor vou ate usar oque vc disse... uma opcao para ligar e desligar a interface... registrado!!!

Valew

Enviado: 27 Jun 2007 02:02
por Maligno
Ótimo. Então, só pra complementar para os colegas que por ventura não tenham "pescado" a idéia, vou fazer uma analogia simples. Quando você faz uma função de programação, é normal que seja feita uma crítica sobre os argumentos de entrada. Mas você precisa saber o quão boa essa crítica precisa ser. O melhor é fazer apenas o básico senão essa crítica acabará consumindo a maior parte do seu esforço e tempo. O usuário é um programador. Ele tem que saber passar os argumentos corretamente. Isso é problema dele. Não seu.

No seu programa é a mesma coisa. O usuário é um programador. Não precisa de janela alguma. Até nem seria necessário reorganizar os parâmetros colocando nomes neles, mas isso é até bom. Primeiro que aquele que for usar o programa não precisará se lembrar da ordem desses switches. Segundo, e mais importante: nomear os parâmetros facilita bastante sua lógica de codificação.

Enviado: 27 Jun 2007 02:37
por MarcosV
Legal Maligno... fiz alguns ajustes... de uma olhada...

Correções USBPRINT:
1. parametros em qualquer ordem
2. parametro 4 - mensagens (ver ajuda)

USBPRINT

Enviado: 27 Jun 2007 03:24
por Maligno
Baixei este ZIP, mas o arquivo EXE é igual ao anterior. Não mudou nada. Tem certeza que atualizou o ZIP corretamente?

Enviado: 27 Jun 2007 03:42
por MarcosV
ué... estranho... fiz o teste aqui e baixou certinho... mas por via das duvidas atualizei denovo!!! tente novamente!!!

Enviado: 27 Jun 2007 04:21
por Maligno
Ok. Agora deu certo. Talvez seja problema no meu IE. :)

Vou dizer o que achei errado. Notei algumas falhas na interface. A primeira é o help. Ainda é uma janela. Lembre-se: o usuário é um programador. A ajuda em janela não ajuda. :) Porquê? Por um motivo bem simples. Se executo em linha de comando sem parâmetro algum, é porque esqueci do nome de um switch. Vejo a ajuda. Dou ESC e não vejo mais a ajuda. Ela desaparece. Lá vou eu acioná-la de novo. Entendeu? É um incômodo. No seu lugar eu faria essa parte em linha de comando, a exemplo do que existe na maior parte dos programas de linha de comando: BCC, TLIB, Clipper, XHarbour, etc. Ninguém faria uma janela para ver a ajuda. Ela só atrapalha.
Aliás, execute um desses programas de linha de comando e observe como sua interface é montada. Parece coisa simples, mas note que é quase um padrão em todos os programas desse tipo. E se eles fazem assim, é porque deve ser melhor. Analisando detidamente você verá que é melhor mesmo.

Outro problema: se eu digitar /XXX, que é um nome de switch inexistente, o programa prossegue normalmente, sem reclamar. Não deveria ser possível prosseguir, neste caso.

Notei que /DEL não está funcionando. Inclusive, seu help está omisso no switch que informa que o chaveamento da interface é T1, T2 ou T3. Faltou informar que tem uma barra como prefixo: /T1, /T2 ou /T3.

Depois, se puder, elimine a caixa de seleção de impressoras quando eu tiver selecionado /T3. Não havendo impressora definida, opte por silenciar ou imprimir diretamente para a impressora default.

Enviado: 27 Jun 2007 18:28
por MarcosV
Maligno... fiz mais alguns ajustes... de uma olhada...

Correções USBPRINT:
1. Parametros em qualquer ordem
2. Parametro 4 - mensagens (ver ajuda)
3. Correção no Help
4. Impressora Default como Padrao
5. Apagar Arquivo Impresso como Padrao
5. Modo Texto como Padrao

USBPRINT