Página 5 de 7

Imprimir condensado usando WIN_PRN

Enviado: 10 Dez 2015 12:45
por microvolution
Toledo escreveu: Amigo, quando falei que era para trocar PDFCreator por cPrint, eu presumi que a sua variável cPrint já tinha o nome da impressora.
Perdão prezado professor, como disse, o cansaço mental e físico é muito grande, pois fico a manhã toda, almoço, tarde, noite e madrugada às vezes pra tentar fazer uma coisa que pra muitos é muito fácil e pra mim tá sendo difícil, pois é um mundo novo, ainda mais, resolvi já pular de winXP pra win10... e com HMG 3.0.46 e já estou tentando instalar e entender (vagamente) a HMG 3.4.2.
Então, realmente no caso da cPRINT eu não tinha percebido (por causa da confusão mental que já estou).
Bom, o seu exemplo funcionou perfeitamente, mas, queria entender o porquê que no seu simples exemplo imprime nas cores mandadas pra impressora e no nosso laboratório (vida real) não dá certo.
Compilei e executei o exemplo seu no braço e funcionou perfeitamente (como já disse)...
na HMG tive que trocar as variáveis do SETCOLOR(HB_WIN_RGB_RED) para simplesmente (RGB_RED), vejam a modificação no código do exemplo do Toledo:

Código: Selecionar todos

#include "hbwin.ch"

Function Main()

 cPrint:=WIN_PRINTERGETDEFAULT()
 oPrinter:=Win_Prn():new( cPrint )
 oPrinter:Create()
 oPrinter:StartDoc("Teste")
 // oPrinter:SetColor( HB_WIN_RGB_RED ) // não funciona com a HMG
 oPrinter:SetColor( RGB_RED ) // não funciona com HBMK2

 oPrinter:newline()

 oPrinter:setfont('Courier New')
 oPrinter:TextOut("IMPRIMINDO NA COR VERMELHA")
 // oPrinter:SetColor( HB_WIN_RGB_BLUE ) // não funciona com a HMG
 oPrinter:SetColor( RGB_BLUE ) // não funciona com HBMK2
 oPrinter:TextOut("IMPRIMINDO NA COR AZUL")
 // oPrinter:SetColor( HB_WIN_RGB_GREEN ) // não funciona com a HMG
 oPrinter:SetColor( RGB_GREEN ) // não funciona com HBMK2
 oPrinter:TextOut("IMPRIMINDO NA COR VERDE")
 // oPrinter:SetColor( RGB_YELLOW )
 // oPrinter:TextOut("IMPRIMINDO NA COR AMARELA")

 oPrinter:EndDoc()
 oPrinter:Destroy()
 
 wait
Return Nil
Também tentarei entender o que está errado com meu código, que usa as seguintes condições pra que imprima:

Código: Selecionar todos

***********************************************************************************
************* FUNÇÃO PARA IMPRIMIR EM USB através da WIN_PRN() 6/12/15w beta ******
Function PrintWinPrn( cArq, cPrint )
 Local oPrn, aPrn := WIN_PrinterGetDefault(), n := 0
 // Local oPrn, aPrn := GetPrinters(), n := 0  // esta linha deu mensagem de erro na compilação com HMG (tipo duplicidade) // aí modifiquei pela linha acima.

 oPrn:=Win_Prn():New(cPrint)
 // oPrn :SetColor( HB_WIN_RGB_RED )
 oPrn:SetColor( HB_WIN_RGB_YELLOW, HB_WIN_RGB_BLUE )
 oPrn:SetPen( WIN_PS_SOLID, 1, HB_WIN_RGB_RED )
 oPrn:Copies := 1
 oPrn:CharSet(255)

 if DCI10999->TP_RECIBO=1 .or. DCI10999->TP_RECIBO=2 // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
   // ?'recibo 1 ou 2 ->',DCI10999->TP_RECIBO
   // wait
   oPrn:SetFont('courier new' , 17, { 1, 17 }, 0, .F., .F.)
   // oPrn :SetFont( "Courier New", 12, { 1, 17 }, 0, .F., .F. )
 else // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
   // ?'recibo 3 ou outro ->',DCI10999->TP_RECIBO
   // wait
   oPrn:SetFont( "Lucida Console", 8, { 3, -50 } )
 endif // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
 // ? 'após o oPrn - dentro de PrintWinPrn'
 // wait
 If !oPrn:Create()
  Alert("Nao foi criado o documento de Impressao")
  Return nil
 EndIf

 If !oPrn:StartDoc("Imprimindo Documento")
  Alert("Erro na Impressora")
  Return nil
  // else // acrescentado para mostrar na tela que a impressão foi p/USB 7/12/15w
  // Alert("Imprimindo na Impressora (multifuncional/laser) USB") // acrescentado para mostrar na tela que a impressão foi p/USB 7/12/15w
 EndIf

 // HB_CDPSelect("PT850")

 SetPrc(0,0)
 cText := MemoRead( cArq ) 
 nLinh := MlCount( cText )
 For n := 1 to nLinh
  oPrn:TextOut(HB_AnsiToOem(MemoLine(cText,,n)),.t.)
  // ? nLinh
  // wait
 Next
 oPrn:EndDoc()
 oPrn:Destroy()

 // HB_CDPSelect( "PTISO")

Return .t.
************* FUNÇÃO PARA IMPRIMIR EM USB através da WIN_PRN() 6/12/15w beta ******
***********************************************************************************
A diferença que observei (talvez possa ser isso) é que não existe as duas linhas do exemplo do Toledo:

Código: Selecionar todos

 oPrinter:Create()
 oPrinter:StartDoc("Teste")
Será que é preciso colocar essas 2 linhas? minhas perguntas parecem ou realmente são "idiotas" e infantis, mas, se de harbour eu não entendo ainda este novo universo, da WinPrn aí que não entendo mesmo... tá tudo muito estranho ainda pra mim (sou como um bebê que ainda usa fraudas).

Att...

Imprimir condensado usando WIN_PRN

Enviado: 10 Dez 2015 13:30
por Jairo Maia
microvolution escreveu:A diferença que observei (talvez possa ser isso) é que não existe as duas linhas do exemplo do Toledo: [...] Será que é preciso colocar essas 2 linhas?
Sem dúvida nenhuma. É preciso.

Imprimir condensado usando WIN_PRN

Enviado: 10 Dez 2015 13:41
por Toledo
microvolution escreveu:Será que é preciso colocar essas 2 linhas?
Como já lhe disse, preste atenção, veja as linhas 26 e 31 do seu código.

Abraços,

Imprimir condensado usando WIN_PRN

Enviado: 10 Dez 2015 14:37
por microvolution
mas que coisa não?
não funciona de jeito nenhum...
quando digo não funciona, digo referente a mudar de cor, pois no preto está imprimindo perfeitamente (só que a impressora tá com pouca tinta e não dá pra ler corretamente... mas imprimindo está.).
Outro detalhe, parece que nada dos objetos estão pegando, por exemplo resolvi mudar a fonte, mas, está saindo a padrão...
será que isso está relacionado com a pré-impressão ser assim:

Código: Selecionar todos

         vendas := StrZero(mCDCLIENTE,4)+".TMP"
         MemoWrit( "&vendas", cCupom )
         While nPrn != 0
            @ 1, 0 SAY "Selecione a impressora:"
            @ 2, 0 TO MaxRow(), MaxCol()
            nPrn := AChoice( 3, 1, MaxRow() - 1, MaxCol() - 1, aPrn, .T.,, nPrn )
            IF nPrn != 0
               PrintWinPrn( "&vendas", aPrn[ nPrn ] )
               MsgInfo ('Extrato direcionado com sucesso p/ impressora USB','SiCCA - extrato')
               exit
            Endi
         EndDo
As linhas acima, chamam a função PRINTWINPRN.
Então, será que o arquivo que foi criado com base no cCUPOM (vejam como o ARRAY cCUPOM é criado) é que está com problema?

Código: Selecionar todos

     mCABECALHO [01] := dtoc (date ()) +;
                        space (046) +;
                        time ()
     mCABECALHO [02] := space (022) +;
                        'VENDAS' +;
                        space (001) +;
                        'POR' +;
                        space (001) +;
                        'CLIENTE'
     mCABECALHO [03] := replicate ('-',064)
     mCABECALHO [04] := '&NM_EMPRESA'

               cCupom := 'Nao Vale Como Cupom Fiscal' + eol  // imprimir USB usando WIN_PRN 6/12/15w
               cCupom += mCABECALHO [01] + eol  // imprimir USB usando WIN_PRN 6/12/15w
               cCupom += mCABECALHO [02] + eol  // imprimir USB usando WIN_PRN 6/12/15w
               cCupom += mCABECALHO [03] + eol  // imprimir USB usando WIN_PRN 6/12/15w
               cCupom += mCABECALHO [04] + eol  // imprimir USB usando WIN_PRN 6/12/15w
Mais uma vez, repito, a impressão está acontecendo, só que não aceita mudanças de cor ( :setcolor)e também não está pegando o ":setfont", mesmo, com ou sem as linhas que...
Jairo Maia escreveu:Sem dúvida nenhuma. É preciso.
?

Meus neurônios estão totalmente fora do lugar de tanta "paulada" :% na cabeça e estou "tontin" :-o
rsrs

Imprimir condensado usando WIN_PRN

Enviado: 10 Dez 2015 17:13
por Jairo Maia
Olá microvolution,

Penso que você está tentando (parece certo isso) setar configuração de impressora antes de iniciá-la corretamente. Com base em seu exemplo, e como foi dito pelo Toledo, remova o bloco iniciado pela linha 26 e o bloco iniciado pela linha 31, e mova-os para imediatamente abaixo da linha 7 de seu exemplo que é esta:

Código: Selecionar todos

oPrn:=Win_Prn():New(cPrint)

Imprimir condensado usando WIN_PRN

Enviado: 10 Dez 2015 17:54
por Toledo
microvolution escreveu:será que isso está relacionado com a pré-impressão ser assim:
vendas := StrZero(mCDCLIENTE,4)+".TMP"
MemoWrit( "&vendas", cCupom )
...
PrintWinPrn( "&vendas", aPrn[ nPrn ] )
...
Amigo, você está com dificuldade de entender como gravar o arquivo... dei vários exemplos, mas você não compreendeu.

O correto neste seu código é o seguinte:

Código: Selecionar todos

         cVendas := StrZero(mCDCLIENTE,4)+".TMP"
         MemoWrit( cVendas , cCupom )
         While nPrn != 0
            @ 1, 0 SAY "Selecione a impressora:"
            @ 2, 0 TO MaxRow(), MaxCol()
            nPrn := AChoice( 3, 1, MaxRow() - 1, MaxCol() - 1, aPrn, .T.,, nPrn )
            IF nPrn != 0
               PrintWinPrn( cVendas , aPrn[ nPrn ] )
               MsgInfo ('Extrato direcionado com sucesso p/ impressora USB','SiCCA - extrato')
               exit
            Endi
         EndDo
As linhas alteradas foram a 1, 2 e 8

Abraços,

Imprimir condensado usando WIN_PRN

Enviado: 11 Dez 2015 16:19
por microvolution
olá pessoal!!!
bom, descobri outra coisa estranha aqui em meu código, e, mesmo usando as HMG 3.0.xx ou até mesmo a GTWVG para compilar, acontece esse "troço" esquisito. Vejam o código abaixo:

Código: Selecionar todos

          IMPRIME_CAB ()
          fCDCLIENTE ()
          ? 'após o fCDCLIENTE'
          wait
          select ('DCI10016')
          set order to 1

          * Contas a Receber
          select ('DCI10002')
          sVRJUROS := 0
          IMP_SUBCAB := .t.
          do while lastkey () <> K_ESC .and. .not. NAO_HA_CONREC
               if IMP_SUBCAB
                    IMP_SUB_CAB ()
                    IMP_SUBCAB := .f.
               endif

               * Verifica se usou a m‚dia

               mNU_VENDA  := val (NUTITULO)
               mQT_DIATO1 := mQT_DIATOL

               select ('DCI10016')
               if EXISTE (str (mNU_VENDA,06)) .and. CDCLIENTE = DCI10002->CDCLIENTE .and.;
                  DT_VENDA = DCI10002->DT_VENDA
               
                    if LO_MEDIA = 'S'
                         mQT_DIATO1 := 0
                    endif
               endif
               select ('DCI10002')
               
               mVRJUROS  := 0
               mQT_DIAS  := ''
               if DT_VENCTO < date ()
                    sFVR_TOTAL [01] += VRTITUTLO
                    mQT_DIAS  := str (date()-DT_VENCTO,4)
                    
                    if val (mQT_DIAS) > mQT_DIATO1
                         mVRJUROS := VRTITUTLO * ((mVR_TX_JD * val(mQT_DIAS))/100)
                    endif
                    sVRJUROS += mVRJUROS
               else
                    sFVR_TOTAL [02] += VRTITUTLO
               endif
               sFVR_TOTAL [03] += VRTITUTLO + mVRJUROS

               mNU_VENDA := val (left (NUTITULO,06))

               select ('DCI10016')
               mNMCOMPRAD := '' 
               if EXISTE (str (mNU_VENDA,6)) .and. CDCLIENTE = DCI10002->CDCLIENTE .and.;
                    DT_VENDA = DCI10002->DT_VENDA

                    mNMCOMPRAD := NMCOMPRAD
               endif
               
               select ('DCI10002')
               if empty (mNMCOMPRAD)
                    mNMCOMPRAD := DSHISTORI
               endif

               mDETALHE [01] := transform (DCI10002->NUTITULO,pNUTITULO) +;
                                space (001) +;
                                transform (DCI10002->DT_VENDA,pNUTITULO) +;
                                space (001) +;
                                left (mNMCOMPRAD,10) +;
                                space (001) +;
                                transform (DCI10002->VRTITUTLO,'@KREZ 99,999.99') +;
                                space (001) +;
                                transform (DCI10002->DT_VENCTO,pDT_VENCTO) +;
                                transform (mQT_DIAS,pQT_DIAATR) +;
                                space (001) +;
                                transform (mVRJUROS,'@KREZ 999.99')
               if DCI10999->TP_RECIBO=1
                    // ?'APÓS fCDCLIENTE TP RECIBO1'
                    // wait
                    @ prow()+1,00 say mDETALHE [01]
                    cCupom += mDETALHE [01] + eol  // imprimir USB usando WIN_PRN 6/12/15w
               endif
               select ('DCI10002')
               skip
               if eof () .or. CD_SITTIT<>'A'.or. CDCLIENTE <> mCDCLIENTE .or. DT_VENCTO > fDT_VENDA 
                    gCDCLIENTE ()
                    exit
               endif
          enddo
     endif
     RESET_IMPRESSORA ()
     if mUSB
         vendas := StrZero(mCDCLIENTE,4)+".TMP"
         MemoWrit( "&vendas", cCupom )
         While nPrn != 0
            @ 1, 0 SAY "Selecione a impressora:"
            @ 2, 0 TO MaxRow(), MaxCol()
            nPrn := AChoice( 3, 1, MaxRow() - 1, MaxCol() - 1, aPrn, .T.,, nPrn )
            IF nPrn != 0
               PrintWinPrn( "&vendas", aPrn[ nPrn ] )
               MENSAGEM ('Extrato direcionado com sucesso p/ impressora USB','SiCCA - extrato')
               inkey(3)
               exit
            Endi
         EndDo
     endif
ESTRANHO MESMO... observem as linhas 3/4 que possuem os comandos "?" e "wait". Se eu os comentar, todo o conteúdo abaixo dele da linha 003 até na linha do 088 (RESET_IMPRESSORA ()) não funciona...
com isso, o relatório que deveria imprimir do FONE do cliente até o fim não imprime (prestações em aberto), pois não executa as linhas...

alguém sabe dizer se é bug, ou outra coisa?

Imprimir condensado usando WIN_PRN

Enviado: 11 Dez 2015 16:29
por microvolution
mais informações sobre o "pobrema" acima:

Nao Vale Como Cupom Fiscal
Nao Vale Como Cupom Fiscal
11/12/2015 16:20:56 11/12/2015 16:20:56
VENDAS POR CLIENTE VENDAS POR CLIENTE
---------------------------------------------------------------- ----------------------------------------------------------------
Microvolution Inform tica - Studio - Consultoria - R.LOENDRO, 47 Microvolution Inform tica - Studio - Consultoria - R.LOENDRO, 47
================================================================ ================================================================
Cliente : 0001 - WAL Cliente : 0001 - WAL
Endereco: RUA DESC, 111 - DESC Endereco: RUA DESC, 111 - DESC
Fone : ( ) - Fone : ( ) -
================================================================ ================================================================
Num.Docum. Data Venda Comprador Valor Vencto Atso Juros Num.Docum. Data Venda Comprador Valor Vencto Atso Juros
---------------------------------------------------------------- ----------------------------------------------------------------
000013/A 04/12/2015 WAL 346,50 03/01/2016 000013/A 04/12/2015 WAL 346,50 03/01/2016
---------------------------------------------------------------- ----------------------------------------------------------------
Total em atraso.................................... 0,00 Total em atraso.................................... 0,00
Total a vencer..................................... 346,50 Total a vencer..................................... 346,50
Total Geral........................................ 346,50 Total Geral........................................ 346,50
================================================================ ================================================================
MVinfo Sistemas & Automa‡ão MVinfo Sistemas & Automa‡ão
Sistemas: USBController v2.2(bloqueio das portas USB) Sistemas: USBController v2.2(bloqueio das portas USB)
SiCCA v3.42 (Sistema de Controle Comercial Avan‡ado) SiCCA v3.42 (Sistema de Controle Comercial Avan‡ado)
empresas: lojas roupas,materiais constru‡ão, Oficinas empresas: lojas roupas,materiais constru‡ão, Oficinas


Os dados acima são com as linhas 3/4 acionadas.
Já as linhas do relatório abaixo, são com o problema. Ao comentar as linhas 3/4 (da minha postagem anterior) não se completa o relatório:

Nao Vale Como Cupom Fiscal
Nao Vale Como Cupom Fiscal
11/12/2015 16:27:22 11/12/2015 16:27:22
VENDAS POR CLIENTE VENDAS POR CLIENTE
---------------------------------------------------------------- ----------------------------------------------------------------
Microvolution Inform tica - Studio - Consultoria - R.LOENDRO, 47 Microvolution Inform tica - Studio - Consultoria - R.LOENDRO, 47
================================================================ ================================================================
Cliente : 0001 - WAL Cliente : 0001 - WAL
Endereco: RUA DESC, 111 - DESC Endereco: RUA DESC, 111 - DESC
Fone : ( ) - Fone : ( ) -


BOM ou mau, alguém sabe dizer por que isto acontece?
ps: lembrando que testei tanto com a HMG 3.0.35, HMG 3.0.46 e até mesmo com harbour puro no "braço" usando HBMK2 GTWVG (com a ajuda do "asimoes" e "josequintas"

Imprimir condensado usando WIN_PRN

Enviado: 11 Dez 2015 19:26
por microvolution
Oiiiiimmmm...
Gente, só pra desencargo e consciência e seguindo também a orientação dos professores "jquintas" e "asimoes" deixei de compilar (talvez temporariamente) com a HMG e aprendi a usar o braço-a-braço (acho que finalmente aprendi a usar :)) ) com o HBMK2 (v3.2) usando a lib GTWVG pelo CMD (administrador), só pra testar algumas ziguiziras (ou do meu código ou do harbour ou da HMG).
Agora a impressão está saindo COLORida e nos exemplos, está também imprimindo condensado pela seguinte linha (que está no código bem acima já reportado por várias vezes):

Código: Selecionar todos

   oPrn:SetFont('courier new' , 17, { 1, 17 }, 0, .F., .F.)
Agora, apresentou outra coisa estranha:
1 - no arquivo que é gerado através da ARRAY cCUPOM (vejo no windows explorer e abro-o com o notepad) a impressão parece que ao chegar em 80 colunas o restante não é impresso (é como se estivéssemos usando um limitador de quantidade de caracteres por linha a ser impresso).

2 - existe algum tipo de objeto do [OPRN:setalgumacoisa] que diz assim: se for fonte pequena pode imprimir em 160 colunas, se for fonte grande, imprima somente 80 colunas?

bom, além desta dúvida (acho que falta de conhecimento de minha parte mesmo - e não um problema em si), tem a última que postei sobre a falha na compilação do código após o fCDCLIENTE() que não executa o restante das linhas...

vlw... :%

Imprimir condensado usando WIN_PRN

Enviado: 11 Dez 2015 22:43
por Eolo
de Paula,

Me perdoe a franqueza, mas eu tava observando os seus posts e, pra ir direto ao ponto, a coisa já nasceu errada, desde o título do seu tópico, que diz “Imprimir condensado usando Win_Prn”.

A Win_Prn não foi criada pra “imprimir condensado ou normal”. isso é coisa do SET PRINT TO LPT1, do tempo que a Epson LX300 reinava, quando ela tinha meia dúzia de fontes pré-programadas na sua eprom...

Você tá tentando usar a Win_Prn, atirando pra tudo que é lado, com o pensamento preso em linhas e colunas do Clipper e nas fontes nativas da LX300, mas a Win_Prn é outra coisa, completamente diferente. É tudo em pixels, padrão Windows.

É óbvio que a Win_Prn tem o lance de COMPATIBILIDADE com o Clipper (desde o Summer 87), dá até pra adaptar, mas vc precisa aprender, antes de tudo, o que é a Win_Prn e como ela conversa com linhas x colunas (leia-se PIXELS), pra depois poder tentar adaptar.


Alguns dos seus comentários, pra resumir:
se for fonte pequena pode imprimir em 160 colunas, se for fonte grande, imprima somente 80 colunas
Isso é papo da LX300 (e suas fontes nativas). Fonte pequena? O que é uma fonte “pequena” pra Win_Prn? Quantos pixels essa fonte “pequena” usa para cada letra (fonte de tamanho fixo ou variável?) em relação ao tamanho em pixels da folha virtual criada pela Win_Prn? É A4 ou A3? É rascunho ou normal?

Você tem noção que “fonte”, pra Win_Prn, não tem nada a ver com as fontes nativas da LX300, mas sim com qualquer fonte instalada no Windows?
oPrn:SetFont('courier new' , 17, { 1, 17 }, 0, .F., .F.)
Você tem alguma noção do que os argumentos acima querem dizer? { 1, 17 }, por exemplo, o que quer dizer? Já ouviu falar em Kerning?

Dica: baixe e instale o Photoshop, qualquer versão, 30 dias grátis. Dê uma boa estudada em pixels, Depois volte pro Harbour.

Repito, me perdoe a franqueza. Sou um pentelho. Assumo.


De resto, fica uma sugestão (que eu uso): não escreva 100 linhas de código, complile, linke e tente rodar, pra depois ver o que aconteceu, procurar os erros, correr atrás do preju. Escreva uma linha, confira o resultado e, se deu certo, vá pra linha 2. Passo a passo.

Me parece, pelo que eu to vendo, que vc copiou e colou alguma coisa, tentou rodar e, como deu pau, você publica a dúvida e espera que alguém branda a varinha mágica pra resolver...

Imprimir condensado usando WIN_PRN

Enviado: 12 Dez 2015 00:00
por microvolution
Eolo escreveu:Me perdoe a franqueza, mas eu tava observando os seus posts e, pra ir direto ao ponto, a coisa já nasceu errada, desde o título do seu tópico, que diz “Imprimir condensado usando Win_Prn”.
Prezado professor, eu quem peço perdão por importunar-lhe tanto, aliás, se não fosse por V.Sa. ter insistido comigo, eu nem tinha voltado a programar e conseguido compilar...
quanto ao título, não fui eu quem propus, simplesmente ao pesquisar na rede (google/yahoo) caí nesta postagem e percebi, ou achava que tinha algo com o meu assunto, que é sair de vez deste tal de SET TO PRINTER TO (ou juntando as duas coisas pra depois eliminar a antiga).
Afinal, quem ficou dormindo no ponto como eu, e já por inúmeras vezes o disse, não tenho tempo para aprender ou melhor, reaprender... o que estou tentando fazer é aproveitar o meu código que já existe com umas 50.000 linhas ou mais (não tenho exata noção) de um aplicativo já ultrapassado, poderia estar em delphi que é uma linguagem embarcada que gosto, mas, eu, continuo a insistir no clipper...
às vezes me motivo a continuar e outras com certas palavras a jogar tudo fora...
V.Sa. tem noção, de quanto tempo fico sentado na frente do computador pra tentar recuperar o tempo perdido? (até mesmo sem fazer as necessidades vitais, por exemplo: beber água). Então, pego todo dia de manhã e só paro quando o corpo já não aguenta mais digitar (por volta da meia noite), estudar, olhar pra apostilas, puts... não existe né... tenho mesmo é que procurar na net...
ainda mais, desempregado, sem renda nenhuma sequer, ou melhor, um bolsa família de um filho...
e esta seria talvez a minha última chance com a informática, pois, também já o disse: O MERCADO ESTÁ LOTADO de ótimos profissionais como V.Sa., e, eu só sou apenas uma partícula que ainda não alcançou a não ser um único cliente em 18 anos do meu aplicativo. Sei que a culpa não é de ninguém, nem aqui, nem em lugar algum do planeta, mas, somente minha.
Eolo escreveu:Você tem alguma noção do que os argumentos acima querem dizer? { 1, 17 }, por exemplo, o que quer dizer? Já ouviu falar em Kerning?
Então prezado Ventura... certa vez, um Eunuco vinha num carro lendo uma passagem num certo livrinho, que dizia: "e Ele foi ferido por nossas transgressões..." de repente chega uma pessoa e pergunta pra ele: "Entende o que está lendo?"... e ele (talvez fui rude em suas palavras) respondeu: "como vou entender se ninguém me explicar"...

Então, pra eu ter noção, tenho que encontrar algum material, mas, os que encontro são muito vagos, genéricos... (pra mim), não tem uma coisa padrão, como a apostila que tenho do clipper Summer 87 de Antº Geraldo da Rocha Vidal, que foi a minha base em 1990 pra saber o pouquinho que sei... toda vez que tenho dúvidas (pra não incomodar tanto a este fórum, que parece que não gosta de ser incomodado) volto à ela, e, nela, mesmo sendo na época do papel, é pra mim, sem sombra de dúvidas, uma ótima ferramenta...
Eolo escreveu:Dica: baixe e instale o Photoshop, qualquer versão, 30 dias grátis. Dê uma boa estudada em pixels, Depois volte pro Harbour.
Sinceramente, não entendo o porquê de perdermos tempo com estas "alfinetadas", sem sentido, não seria mais prático, dizer pra mim, "olha meu querido, seu burro, é assim que funciona, e tal, e tal, como o "josequintas", o "asimoes", o "Toledo", o "Itamar", sei lá... V.Sa. também...
essa coisa de Photoshop... só se eu for mais doido que sou pra aprender mais uma coisa, que não tem nada a ver com o clipper, ops, harbour...
já uso tanto coisa no meu dia-a-dia, que estão todos parados, pra dedicar ao harbour...
quer que eu aprenda photoshop?
então, todos vamos aprender com o pouco que sei de:
Cubase, SoundForge, Nuendo, SketchUp, Vegas, Premiere CS6, Corel X6, etc, etc... V.Sa. sabe o que cada um desses aplicativos que mencionei faz?
Então, se não souber, não tem nada a ver com o harbour... a não ser que todos são submissos ao windows...
A vida dá muitas voltas: já fui diretor da 4ª maior prefeitura do estado na época, já fui apresentador de tv por quase 2 anos na record e também por quase um ano no sbt, ambas de nossa região, e, nem por isso, me acho menor ou maior que alguém...
o que tenho aprendido aqui, acho que estou colhendo os frutos, que nos últimos 20 anos de minha vida, dediquei a treinar locutores gratuitamente e muitos deles são até melhores que eu...

Portanto, peço desculpas, aos demais professores, por talvez, ser rude com minhas palavras, pois o cansaço, a hora, a minha família que está ficando de lado, os meus outros compromissos, enfim, tudo está voltado para melhorar o meu aplicativo que até janeiro/2015 estava 100% em clipper...
e se V.Sa. não sabe ou não se lembra, fique aqui registrado mais uma vez - como sempre fiz, os créditos por meu aplicativo funcionar (impressão) no win xp, é todo seu, pois em 10 anos, fui o único que me passou a LIB onde ficava 90% do CPU ocupado:

Código: Selecionar todos

***************************************************************************************************
* LINHA ACRESCENTADAS P/Q.O O CLIPPER NO WIN XP LIBERE PROCESSADOR Q FICA EM TORNO DE 90% OCUPADO *
* 12/10/11w											  *
***************************************************************************************************
//OL_AutoYield( .T. ) // eliminada na migração para harbour (só pra teste até achar onde ela está) 20/3/14w.
***************************************************************************************************
* 12/10/11w											  *
* LINHA ACRESCENTADAS P/Q.O O CLIPPER NO WIN XP LIBERE PROCESSADOR Q FICA EM TORNO DE 90% OCUPADO *
***************************************************************************************************
bom... chega de bla, bla, blá, e, me perdoem os demais, e, não fique bravo e encerremos este assunto... pra não fugir demasiadamente do assunto...
Volto a repetir... não sei nada de Win_Prn e tá difícil aprender, mas, o negócio é o seguinte:
Tenho um relatório a ser impresso, que na verdade é um extrato de compras do cliente que vier à empresa do meu cliente:

Na impressora matricial todos nós já estamos "cabeludos" e saber. No meu caso, para aproveitar a folha tamanho CARTA (papel com picote) imprimo em condensado e o relatório que é de 80 colunas, imprime um ao lado do outro totalizando 160 ou menos colunas condensadas, que cabem na folha CARTA.

Isso aqui, todos sabemos fazer...
agora, pode observar nas páginas anteriores que meu código (pra não perder os @PROW) acrescentei uma tal matriz (array) chamada cCUPOM que pega tudo o que está no @prow e vai guardando... quando termina o relatório, ela joga tudo pra dentro de um arquivo que manda para USB.

Então, parece que ao imprimir, está tipo dando um ENTER (CR) e após 80 caracteres (pra não falar 80 colunas) a impressão desce e começa na outra linha...

Pesquisei e vi um objeto do WinPrn "oPrn:pageWidth:= 160" e coloquei esse valor, pois no guia de referência que encontrei não tem nenhum exemplo e apresenta apenas o valor padrão (default) que é 0.

Agora se alguém puder me ensinar como fazer para que imprima a quantidade de caracteres, ou melhor, pixels, desde a margem esquerda até a margem direita, ficarei grato, e, aqui mencionarei os créditos, como sempre fiz, e continuarei a fazer...

Vlw!

Imprimir condensado usando WIN_PRN

Enviado: 12 Dez 2015 00:24
por Eolo
Agora se alguém puder me ensinar como fazer para que imprima a quantidade de caracteres, ou melhor, pixels, desde a margem esquerda até a margem direita, ficarei grato, e, aqui mencionarei os créditos, como sempre fiz, e continuarei a fazer...

Sinto muito, não posso ajudar mais do que tentei.

Imprimir condensado usando WIN_PRN

Enviado: 12 Dez 2015 10:39
por microvolution
bom dia a todos!
hoje não consegui levantar-me antes das 10h de tão cansado mental, visual, emocional, tatual, enfim rsrs fisicamente no geral.
Abaixo, segue uma imagem escaneada da impressão do relatório que falei:
15-1212 - erro winprn 80 colunas.png
Sem ressentimentos de ontem, pois como está escrito num certo livrinho "basta a cada dia o seu mau", a imagem acima, não sei se todos percebem, significa que está na cor GREEN pois isso já está funcionando, o condensado (acho melhor falar assim, pois existem muitos leigos como eu que estão ainda no clipper e precisam que falemos uma linguagem que eles - como eu, entendam), está sendo impresso.
Mas, podem observar que quando chega em 80 caracteres (x pixels de impressão) há um tipo de END OFF LINE e corta a impressão e continua na segunda linha.

Então, do meu código que já postei anteriormente (função que peguei aqui mesmo deste tópico do Sr. Jairo - se não me engano) qual dos controles do WIN_PRN está causando esta quebra de página?

Por enquanto é só

Imprimir condensado usando WIN_PRN

Enviado: 12 Dez 2015 11:32
por asimoes
De Paula,

Considerações:

Essas linhas duplicadas é assim mesmo? ou a idéia é destacar na impressão? se for isto, você pode negritar a fonte sem a necessidade de repetir a informação, isso era válido para impressão direta para matricial, mas para arquivo você pode tratar isso.

Recomendações:

Outra coisa importante, aqui no fórum, tá cheio de exemplos usando win_prn, dá uma pesquisada, na lupa Busca.

Para usar a classe win_prn recomendo você primeiro entender todos os métodos disponíveis. Se a impressão é para uma matricial, utilize a função Win_PrintFileRaw, que é a forma mais rápida de resolver o seu problema, e vá com calma aprendendo em um programa pequeno de testes a utilização da win_prn, com relação aos tamanhos de fontes isto é feito na unha mesmo é ajuste fino, porque uma impressão pode sair com tamanho e margem diferentes para a impressora A ou B e também para impressoras Pdf.

É só minha opinião.

Imprimir condensado usando WIN_PRN

Enviado: 12 Dez 2015 11:45
por microvolution
Pessoal, mais uma vez estamos de volta...
Não sei se minhas postagens ao longo desses anos em todos os tópicos deste fórum tem contribuído para os programadores clippeiros apaixonados como eu, que estão ainda no processo inicial de migração de clipper p/ (x)harbour.
E, nesse processo de migração, as dúvidas são enormes: como é isso, qual método de migração escolher: manual ou através de uma ajudinha da HMG, etc...
Então, como o tópico aqui é a impressão em portas USB, LPTx, SERIAL, ou seja, usar os recursos do windows para impressão e não os recursos existentes na época do início dos anos 1990 (SET PRINTER TO), quero contribuir com este fórum em especial neste tópico, com a tradução para o português de "um guia básico de referências" da classe/método WIN32PRN do xharbour que é muito semelhante à do harbour WINPRN.
Se os administradores, acharem por bem, podem colocá-lo em destaque, senão, só de estar aqui, acho que já é um bom começo, para todos que estão perdidos como eu.

Ele está disponível, no link recém criado de meu humilde site, que é: http://mvinfo.wmx.net.br/news/impressao ... rn-winprn/
Quem quiser contribuir com mais informações, pode acessar todo o conteúdo em http://www.mvinfo.wmx.net.br/PROGRAMACAO.

No mais, vou continuar aqui a "quebrar" o "quebra"-cabeças e descobrir o motivo da impressão estar com "quebra" de página exatamente quando completa 80 caracteres.
... :{