Imprimir condensado usando WIN_PRN

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

Moderador: Moderadores

microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por microvolution »

Toledo escreveu: Compactar este seu arquivo relatorio.txt (ZIP ou RAR) e depois anexar aqui neste tópico.
Veja aqui com anexar um arquivo no tópico.
Prezado Toledo e demais professores, vejam aí o meu RELATORIO.TXT que não abre no seu OPEN_REL.EXE.
vlw!
RELATORIO.TXT
vide conteúdo para análise
(4.9 KiB) Baixado 290 vezes
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!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por microvolution »

Prezado Toledo, já são 2h17 e não consigo mais quebrar cabeça, vou tentar "drumi" um "cadin"... he he...

baixei sua hwgui e copiei os arquivos pra dentro de uma certa pasta e etc tect...
tentei compilar o seu OPEN_REL.PRG sem nenhuma alteração, a não ser no seu nome para OPENREL.PRG. E, compilei usando o CMD.EXE (modo administrador) usando o comando hbmk2 -lhwgui -lhbxml - lprocmisc -lhwg_qhtm -oOPEN OPENREL.PRG. Veja a tela de erro e tente decifrar pois pra mim isso é "grego" rsrsrs (também altas madrugadas vai esperar o q] da memória né?) rsrss:
open_rel.png
vlw mais uma vez...
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por Toledo »

microvolution escreveu:vejam aí o meu RELATORIO.TXT que não abre no seu OPEN_REL.EXE
Realmente tentei usar o seu RELATORIO.TXT com o Open_rel.exe e não abriu. Mas se você simplesmente abrir este seu RELATORIO.TXT com o Bloco de Notas, salvar e sair, ai sim funciona.
Não sei dizer qual é a razão do seu RELATORIO.TXT original não abrir no Open_rel, pode ser que seja a maneira como você está criando o arquivo.
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por Toledo »

microvolution escreveu:Veja a tela de erro e tente decifrar pois pra mim isso é "grego" rsrsrs
Parece que na pasta \INCLUDE da sua HwGui está faltando o arquivo guilib.ch, então verifique se na pasta \INCLUDE da HwGui existe este arquivo.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Imprimir condensado usando WIN_PRN

Mensagem por rubens »

Olá..

Toledo... jóia esse seu exemplo, muito bom mesmo... dá para aproveitar todos os relatórios que já tenho no sistema...
Tõ apanhando com o posicionamento das colunas, se puder dar uma ajuda.
É o seguinte:

Na impressão em anexo aí...
Pode observar que na linha que identifica o cliente, a descricao "Cliente:" tá normal e o nome do cliente tá condensado e negrito. Quanto tá normal ou itálico como pode ser visto no cabeçalho eu mando imprimir em Prow(),83 e o win_prn alinha certinho na coluna 83, mas se mando condensar na mesma linha, perde-se o controle de coluna. Observe que na linha do cliente e na linha abaixo, do Endereço, a Barra "|" não ficou no mesmo alinhamento e nas duas linhas mandei imprimir na prow(),110. Pode ser observado também um pouco acima no texto "P/ uso Instituicao financeira", porque condensou ele perdeu o alinhamento. No meu conceito quando mando o comando para desativar o condensado, deveria voltar para o normal onde a margem direita seria 83, correto? Observe que ele ativa e desativa condensado como mostra a linha do municipio.

Outra coisa, como ativo sublinhado?

Na epson matricial os comandos esc/p que uso são:

Código: Selecionar todos

* IMPRESSORA EPSON
GRANDE	:= CHR(14)			 // ATIVA EXPANDIDO
NORMAL	:= CHR(20) + CHR(18)	 // ATIVA 10 CPI
PEQUENO	:= CHR(15)			 // ATIVA 15 CPI (CONDENSADO)
PEQUENOD := CHR(18)
NEGRITO	:= CHR(27) + 'E'		 // ATIVA NEGRITO
NEGRITOD	:= CHR(27) + 'F'		 // DESATIVA NEGRITO
SUBLI	:= CHR(27) + '-' + '1'	 // ATIVA SUBLINHADO
SUBLID	:= CHR(27) + '-' + '0'	 // DESATIVA SUBLINHADO
ITALICO	:= CHR(27) + '4'		 // ATIVA ITALICO
ITALICOD	:= CHR(27) + '5'		 // DESATIVA ITALICO
e funcionam belezinha... são os mesmo que estou usando para gerar o arquivo do relatório que é enviado pra a sua função.

O meu código:

Código: Selecionar todos

********************************************************************************
FUNCTION  RELDUP()

LOCAL cTela 	:= SAVESCREEN(00,00,24,79)
LOCAL GetList 	:= {}
LOCAL nRecno, nLocalRecno := RECNO()

* IMPRESSORA EPSON
GRANDE	:= CHR(14)				 // ATIVA EXPANDIDO
NORMAL	:= CHR(20) + CHR(18)	 // ATIVA 10 CPI
PEQUENO	:= CHR(15)				 // ATIVA 15 CPI (CONDENSADO)
PEQUENOD := CHR(18)
NEGRITO	:= CHR(27) + 'E'		 // ATIVA NEGRITO
NEGRITOD	:= CHR(27) + 'F'		 // DESATIVA NEGRITO
SUBLI		:= CHR(27) + '-' + '1'	 // ATIVA SUBLINHADO
SUBLID	:= CHR(27) + '-' + '0'	 // DESATIVA SUBLINHADO
ITALICO	:= CHR(27) + '4'		 // ATIVA ITALICO
ITALICOD	:= CHR(27) + '5'		 // DESATIVA ITALICO

IF !ABREARQ(,{"CR","CLI"})
	BEEP()
	MENSAGEMD("N„o foi poss¡vel abrir o arquivo de dados, abortando !",3)
	RETURN NIL
ENDIF

WHILE( .T. )
	SETCURSOR(1)
	RESTSCREEN( ,,,,cTela )
	JANELA( 05,02,09,40, "Imprime Duplicata pelo numero" )
	cNUMERO:=SPACE(10)
	@ 07,10 SAY "Nr.DUPLICATA:" GET cNUMERO PICT "@!"
	READ
	IF ESC()
		EXIT
	ENDIF
	
	IF AT('-',cNUMERO)=0
		MUDACOD( @cNUMERO ) 
	ELSE
		cNUMERO := ALLTRIM(cNUMERO)
	ENDIF
	
	SELE CR
	DBSETORDER(1)
	DBGOTOP()
	IF !DBSEEK( cNUMERO )
		MENSAGEM("Nao existe nenhuma venda com este numero...")
		LOOP
	ENDIF
	COR("GETS")

	cARQ := cNUMERO+'.TXT'
	SET PRINTER TO &cARQ
	SET DEVICE TO PRINTER
	* COMPRNOFF()

	nQTDEDUPLI 	:= 0	// CONTROLE PARA NAO IMPRIMIR FORA DO LUGAR
	nVLNOTFIS 	:= CR->VLNOTFIS_
	cNOTFIS		:= CR->NOTFIS_
	cNUMERO_		:= CR->NUMERO_    ; CLI->( DBSETORDER(2) )
	cCLIENTE		:= CR->CODIGO+"-"+IF( CLI->( DBSEEK( CR->CODIGO ) ),CLI->NOME,"CLIENTE "+CR->CODIGO+" NAO CADASTRADO - VERIFIQUE" )
	cENDERECO 	:= TRIM(CLI->ENDCOB)+"-"+CLI->BAICOB
	cCIDADE		:= CLI->CIDCOB
	cESTADO		:= CLI->UFCOB
	cCEP			:= CLI->CEPCOB
	cPRACA		:= CR->PRACA_
	cCGC			:= IF(LEFT(CLI->CGC,1)!=SPACE(1),CLI->CGC,CLI->CPF)
	cRG			:= IF(!EMPTY(CLI->INSCRICAO),CLI->INSCRICAO,CLI->RG)
	cVALOREXT 	:= VALEXT( CR->VALOR_ )
	nVALOR 		:= CR->VALOR_
	SETPRC(0,0)
	nQTDEDUPLI ++
	@ PROW()	 ,00 SAY "+-----------------------------------------------+------------------------------+"
	@ PROW()+1,00 SAY "|       "+NEGRITO+PERS->EMPRESA+NEGRITOD+"          |  C.G.C. "+PERS->CGC 				; @ PROW(),83 SAY "|"
	@ PROW()+1,00 SAY "|       "+ITALICOD+PERS->RAZAO+ITALICOD+"          |   Insc. Est. "+PERS->INSCRICAO 	; @ PROW(),83 SAY "|"
	@ PROW()+1,00 SAY "+-----------------------------------------------+------------------------------+"
	@ PROW()+1,00 SAY "| "+ITALICOD+pers->endereco+" "+pers->telefone+" Cep78.690-000 Nova Xavantina-MT"+ITALICOD; @ PROW(),83 SAY "|"
	@ PROW()+1,00 SAY "+------------------------------------------------------------------------------+"
	@ PROW()+1,00 SAY "|                                   Data de Emissao: "+DIA( CR->DTEMIS_ ) 				; @ PROW(),MAXCOL() SAY '|'
	@ PROW()+1,00 SAY "+-----------------------------------------------------------+------------------+"
	@ PROW()+1,00 SAY "|         Fatura                 Duplicata                  |"+PEQUENO+"P/ uso Instituicao financeira"+PEQUENOD + '|' 
	@ PROW()+1,00 SAY "+------------+----------+------------+----------+-----------|                  |"
	@ PROW()+1,00 SAY "|   Valor R$ |  Numero  |   Valor R$ | No.Ordem | Vencimento|                  |"
	@ PROW()+1,00 SAY "| "+NEGRITO+TRAN( nVLNOTFIS ,"@E 999,999.99") +' |'+;
							cNOTFIS												+'| '+;
							TRAN( nVALOR	,"@E 999,999.99")          +' |'+;
							cNUMERO_                                  +'| '+;
							DTOC(CR->DTVENC_)+NEGRITOD+'|' ; @ PROW(),83 SAY '|'
	@ PROW()+1,00 SAY "+------------+----------+------------+----------+-----------+------------------+"
	@ PROW()+1,00 SAY "|                       | Juros por dia de atraso:                             |"
	@ PROW()+1,00 SAY "|                       | Cliente: "+PEQUENO+NEGRITO+cCLIENTE+NEGRITOD	; @ PROW(),110 SAY '|'+PEQUENOD
	@ PROW()+1,00 SAY "|                       | Endereco: "+PEQUENO+cENDERECO      				; @ PROW(),110 SAY '|'+PEQUENOD                       
	@ PROW()+1,00 SAY "|                       | Municipio: "+PEQUENO+cCIDADE+PEQUENOD+" UF:"+PEQUENO+cESTADO+PEQUENOD+" CEP:"+PEQUENO+cCEP+PEQUENOD 				
	@ PROW()+1,00 SAY "|                       | Praca de Pagamento: "+PEQUENO+cPRACA +PEQUENOD      																				
	@ PROW()+1,00 SAY "|                       | CGC/CPF:" +PEQUENO+cCGC+PEQUENOD+ "        IE/RG: "+PEQUENO+cRG+PEQUENOD 													
	@ PROW()+1,00 SAY "|                       | Valor por extenso: "+PEQUENO+IF( LEN( cVALOREXT ) > 55,LEFT(cVALOREXT,55),cVALOREXT )+PEQUENOD 						
	@ PROW()+1,00 SAY "|                       | "+PEQUENO+IF( LEN( cVALOREXT ) > 55,SUBSTR(cVALOREXT,56,LEN(cVALOREXT)-54),"")+PEQUENOD 								
	@ PROW()+1,00 SAY "|                       | "+PEQUENO+"     Reconheco(emos) a exatidao desta DUPLICATA de Venda Mercantil/Prestacao de Servicos "+PEQUENOD	
	@ PROW()+1,00 SAY "|                       | "+PEQUENO+"na importancia acima que pagarei(emos) a "+pers->razao+" ou a sua ordem na"+PEQUENOD 					
	@ PROW()+1,00 SAY "| --------------------- | "+PEQUENO+"praca e vencimento indicados."+PEQUENOD 																				
	@ PROW()+1,00 SAY "| "+pequeno+pers->razao+'       |' ; @ PROW(),130 SAY '|'+PEQUENOD 																															
	@ PROW()+1,00 SAY "|                       |                                                      |"
	@ PROW()+1,00 SAY "|                       |   ______________         ___________________________ |"
	@ PROW()+1,00 SAY "+-----------------------+   Data do aceite            Assinatura do Cliente    |"
	@ PROW()+1,00 SAY "|   "+PEQUENO+"    A falta do pagamento no vencimento, serao cobrados juros legais mais despesas bancarias; nao dispensar nem condicional   "+PEQUENOD+'|'
	@ PROW()+1,00 SAY "+-----------------------+------------------------------------------------------+"
	@ PROW()+4,00 SAY ""
	* COMPRNON()
	SET PRINTER TO
	SET DEVICE TO SCREEN
	OPEN_REL( cARQ )

	* RUN &cARQ
   /* cPRINTER := GetDefaultPrinter()
	PrintFileRaw( cPRINTER, cARQ , "SALDO DE CLIENTES" )
	*/

ENDDO
SETCURSOR(0)
RESTSCREEN(,,,,cTela )
ABREARQ(,.F.)
RETURN( NIL )
Sua função Open_rel:

Código: Selecionar todos

********************************************************************************
* Impressao com a HBWin
FUNCTION OPEN_REL( cFILE )

	Local oFont, oFont2, oFont3
	Local nColunas 	:= 0
	Local cText   		:= MemoRead(cFile)
	
	// Comandos de impressao 
	Private chr_pcom:="CHR(15)"                // ativa comprimido
	Private chr_tcom:="CHR(18)"                // desativa comprimido
	Private chr_pc20:="CHR(27)+'M'+CHR(15)"    // ativa comprimido (20 cpp)
	Private chr_tc20:="CHR(27)+'P'"            // desativa comprimido (20 cpp)
	Private chr_peli:="CHR(27)+'M'"            // ativa elite
	Private chr_teli:="CHR(27)+'P'"            // desativa elite
	Private chr_penf:="CHR(27)+'E'"            // ativa enfatizado
	Private chr_tenf:="CHR(27)+'F'"            // desativa enfatizado
	Private chr_pexp:="CHR(27)+'W'+CHR(1)"     // ativa expansao
	Private chr_texp:="CHR(27)+'W'+CHR(0)"     // desativa expansao
	Private chr_pde8:="CHR(27)+'0'"            // ativa 8 lpp
	Private chr_tde8:="CHR(27)+'2'"            // desativa 8 lpp
	Private chr_pita:="CHR(27)+'4'"            // ativa Italico
	Private chr_tsub:="CHR(27)+'5'"            // desativa italico
	
	
	/*                   
	Escolhe a impressora...
	Vou imprimir na impressora default 
	for i=1 to len(aPrinters)
	  IF aPrinters[i] == WIN_PRINTERGETDEFAULT()
	   vCombo1:=i
	   exit
	  ENDIF
	next
	*/
	
 	nCop_	:= 1  // numero de copias
   cTit_	:= "Titulo do Relatorio"
   lOri_	:= .F.   // .T. para imprimir em modo paisagem
   Imprime_hb(cFILE,GetDefaultPrinter(),nCop_,cTit_,lOri_)

RETURN NIL    

********************************************************************************
Function Imprime_hb(cArq,cPrinter,nCop_,cTit_,lOri_)
Local oPrinter := win_prn():New(cPrinter)
Local nBold_	:= 0, lItalic:=.F., lUnder:=.F., cCPI_atu:="10", cCPI_ant:="", area_
Local aDrvp_	:= {{&chr_pcom.,17},{&chr_pc20.,20},{&chr_peli.,12},{&chr_pexp.,5},{&chr_penf.,.T.},{&chr_pde8.,.T.},{CHR(27)+'4',.T.},{CHR(27)+'5',.T.}}
Local aDrvt_	:= {{&chr_tcom.,17},{&chr_tc20.,20},{&chr_teli.,12},{&chr_texp.,5},{&chr_tenf.,.F.},{&chr_tde8.,.F.},{CHR(27)+'4',.F.},{CHR(27)+'5',.F.}}
Local qt_lido, buf_, buffer_, lin_, t_, lEdrv, e_

Private nCPI10:=11, nCPI12:=13, nCPI17:=18, nCPI20:=21, nCPI05:=6

IF (area_:=FOPEN(cArq))<0
   ALERT("Não foi possivel abrir o arquivo gerado para Impressão")
   Return NIL
ENDIF

oPrinter:FormType	:= 9   // A4
oprinter:SetPrintQuality(-1)
oPrinter:Copies	:= nCop_
oPrinter:landscape:= lOri_

IF oPrinter:Create()
   IF oPrinter:StartDoc(cTit_)
      oPrinter:CharSet(255)
      FSEEK(area_,0)
      qt_lido=500
      buf_=""
      WHILE qt_lido=500
         buffer_	:= SPAC(500)
         qt_lido	:= FREAD(area_,@buffer_,500)
         buffer_	:= buf_+buffer_
         buf_		:= ""
         IF RIGHT(buffer_,2)=CHR(13)+CHR(10)
            buffer_+="*$*ReTiRaR*$*"
         ENDIF
         WHILE LEN(buffer_)>0
            lin_=PARSE(@buffer_,CHR(13)+CHR(10))
            IF LEN(buffer_)>0 .OR. qt_lido<>500
               IF buffer_=="*$*ReTiRaR*$*"
                  buffer_:=""
               ENDIF
               t_=AT(CHR(12)+CHR(13),lin_)
               IF t_>0
                  buffer_:=SUBS(lin_,t_+2)+CHR(13)+CHR(10)+buffer_
                  lin_=LEFT(lin_,t_-1)
               ENDIF
               Private aLin:={}
               WHILE LEN(lin_)>0
                  lEdrv_:=.F.
                  FOR i=1 TO 8
                     IF aDrvp_[i,1]==LEFT(lin_+spac(10),LEN(aDrvp_[i,1]))
                        IF i<5
                           AADD(aLin,{STRZERO(aDrvp_[i,2],2),nBold_,lItalic,lUnder,""})
                           cCPI_ant+=cCPI_atu
                           cCPI_atu:=STRZERO(aDrvp_[i,2],2)
                        ELSE
                           IF i=5
                              nBold_:=800
                           ENDIF
                           IF i=6
                              oPrinter:LineHeight:=Int( oPrinter:PixelsPerInchY / 8 )
                           ENDIF
                           IF i=7
                              lItalic:=!lItalic
                           ENDIF
                           IF i=8
                              lUnder:=!lUnder
                           ENDIF
                           AADD(aLin,{cCPI_atu,nBold_,lItalic,lUnder,""})
                        ENDIF
                        lin_=SUBS(lin_,LEN(aDrvp_[i,1])+1)
                        lEdrv_:=.T.
                        EXIT
                     ENDIF
                     IF aDrvt_[i,1]==LEFT(lin_+spac(10),LEN(aDrvt_[i,1]))
                        IF i<5
                           IF LEN(cCPI_ant)>0
                              AADD(aLin,{RIGHT(cCPI_ant,2),nBold_,lItalic,lUnder,""})
                              cCPI_atu:=RIGHT(cCPI_ant,2)
                              cCPI_ant:=LEFT(cCPI_ant,LEN(cCPI_ant)-2)
                           ELSE
                              AADD(aLin,{cCPI_atu,nBold_,lItalic,lUnder,""})
                           ENDIF
                        ELSE
                           IF i=5
                              nBold_:=0
                           ENDIF
                           IF i=6
                              oPrinter:LineHeight:=Int( oPrinter:PixelsPerInchY / 6 )
                           ENDIF
                           IF i=7
                              lItalic:=!lItalic
                           ENDIF
                           IF i=8
                              lUnder:=!lUnder
                           ENDIF
                           AADD(aLin,{cCPI_atu,nBold_,lItalic,lUnder,""})
                        ENDIF
                        lin_=SUBS(lin_,LEN(aDrvt_[i,1])+1)
                        lEdrv_:=.T.
                        EXIT
                     ENDIF
                  NEXT
                  IF !lEdrv_
                     e_:=LEN(aLin)
                     IF e_>0
                        aLin[e_,5]+=LEFT(lin_,1)
                     ELSE
                        AADD(aLin,{cCPI_atu,nBold_,lItalic,lUnder,LEFT(lin_,1)})
                     ENDIF
                     lin_:=SUBS(lin_,2)
                  ENDIF
               ENDDO
               FOR i=1 TO LEN(aLin)
                  if lOri_ .and. i<2
                     cCpi:="nCPI"+aLin[i,1]
                     oPrinter:setfont('Courier New',12,&cCpi,aLin[i,2],aLin[i,3],aLin[i,4])
                     oPrinter:TextOut(spac(15))
                  endif
                  IF !EMPT(aLin[i,5])
                     cCpi:="nCPI"+aLin[i,1]
                     oPrinter:setfont('Courier New',12,&cCpi,aLin[i,2],aLin[i,3],aLin[i,4])
                     oPrinter:TextOut(aLin[i,5])
                  ENDIF
               NEXT
               IF (oPrinter:MaxRow()-2 ) <= oPrinter:Prow() .OR. t_>0
                  oPrinter:NewPage()
               ELSE
                  oPrinter:newline()
               ENDIF
            ELSE
               buf_=lin_
            ENDIF
         ENDDO
      ENDDO
      oPrinter:EndDoc()
      oPrinter:Destroy()
   ELSE
      ALERT("Não foi possivel Iniciar a Impressão, Favor Verificar a Impressora")
   ENDIF
ELSE
   ALERT("Não foi possivel Iniciar a Impressão, Favor Verificar a Impressora")
ENDIF
FCLOSE(area_)
RETURN NIL
Arquivo TXT do relatório
27318-1.TXT
(2.64 KiB) Baixado 262 vezes
Arquivo PDF
Duplicata.pdf
(10.55 KiB) Baixado 240 vezes
Obrigado

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por Toledo »

rubens escreveu:mas se mando condensar na mesma linha, perde-se o controle de coluna.
Amigo, quando em uma mesma linha você tem texto em tamanho normal e também condensado, realmente acaba perdendo a posição das colunas, visto que a formatação de impressão com a Win_PRN() é um pouco diferente do que fazíamos com o Clipper, a linha é impressa tudo de uma vez só.
O que pode ajudar é sempre que for condensar, use o comando para condensar no início do texto e logo em seguida no final do texto, evitando espaços em branco. Por exemplo:

Código: Selecionar todos

Cliente: "+PEQUENO+NEGRITO+cCLIENTE+NEGRITOD   ; @ PROW(),110 SAY '|'+PEQUENOD
troque por:

Código: Selecionar todos

Cliente: "+PEQUENO+NEGRITO+cCLIENTE+NEGRITOD+PEQUENOD   ; @ PROW(),110 SAY '|'
Mas um grande problema em misturar textos com tamanho diferentes (Normal e condensado juntos) é que pode ocorrer de um nome (Cliente) pode variar de tamanho, um ser maior do que outro, ai o posicionamento das "|" não ficar certinho.
rubens escreveu:Outra coisa, como ativo sublinhado?
O código para ativar e desativar o sublinhado é CHR(27)+'5', o mesmo código ativa e também desativa.

O código do Itálico é a mesma coisa, CHR(27)+'4' vai ativar e também desativar o itálico.
rubens escreveu:Na epson matricial os comandos esc/p que uso são:
Procure utilizar estes códigos:

Código: Selecionar todos

   // Comandos de impressao 
   Private chr_pcom:="CHR(15)"                // ativa comprimido
   Private chr_tcom:="CHR(18)"                // desativa comprimido
   Private chr_pc20:="CHR(27)+'M'+CHR(15)"    // ativa comprimido (20 cpp)
   Private chr_tc20:="CHR(27)+'P'"            // desativa comprimido (20 cpp)
   Private chr_peli:="CHR(27)+'M'"            // ativa elite
   Private chr_teli:="CHR(27)+'P'"            // desativa elite
   Private chr_penf:="CHR(27)+'E'"            // ativa enfatizado
   Private chr_tenf:="CHR(27)+'F'"            // desativa enfatizado
   Private chr_pexp:="CHR(27)+'W'+CHR(1)"     // ativa expansao
   Private chr_texp:="CHR(27)+'W'+CHR(0)"     // desativa expansao
   Private chr_pde8:="CHR(27)+'0'"            // ativa 8 lpp
   Private chr_tde8:="CHR(27)+'2'"            // desativa 8 lpp
   Private chr_pita:="CHR(27)+'4'"            // ativa e Desativa Italico
   Private chr_tsub:="CHR(27)+'5'"            // ativa e Desativa sublinhado
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Imprimir condensado usando WIN_PRN

Mensagem por rubens »

Então...

Fiz muitos testes aqui e mesmo fazendo do jeito que você falou ainda não dá para confiar que o posicionamento da coluna sairá correto depois que há uma mudança na fonte... mas beleza... bola para frente, é aprender desenhar o relatório. A gente perde muito tempo e é cansativo ter que ficar compilando e executando para ver o resultado. O que ainda é uma ponto fraco no harbour né... não ter um ide para gerar relatórios. Mas do jeito que a coisa anda acredito que logo surgirá uma. O que se faz com o harbour hoje é fantástico, levado em consideração a curva de aprendizado.

A questão de imprimir a linha inteira já tinha percebido na miniprint. Se manda a linha inteira independente do tamanho ela fica alinhadinha, agora se fica indicando coluna, nem sempre sai na posição desejada...

A questão dos esc/p tava meio perdido mas depois da tabela esc/p que você mandou aí já resolve a questão...

Mais uma vez muito obrigado pela resposta e pela função que deu uma retrocompatibilidade evitando no momento muito tempo gasto para ajustar tudo.

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por microvolution »

gente hoje, faz exatamente 6 meses desde minha última postagem.
Bom, fucei, fucei, e até que enfim consegui parte da solução.
Ela está postada no tópico: https://pctoledo.org/forum/viewto ... 49#p101049

Quem se interessar, é só dar uma visitada por lá!
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!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por microvolution »

Prezados Srs. professores, colaboradores, moderadores, enfim parceiros e amantes do clipper e, digo mais, pessoas que querem não que o clipper morra, como o Roberto Lopez e tantos outros, pra mim é um prazer fazer parte desta comunidade PCTOLEDO.

Bom, como postei anteriormente, na Win_PrintFileRaw() já está funcionando mesmo aos trancos e barrancos.

Reli todo este post novamente e estou agora tentando alguma impressão com a Win_Prn do harbour, através da HMG 3.0.46.

Quando eu tiver alguma coisa, ou se houver mais dúvidas (espero que não, para não incomodá-los tanto) postarei os resultados.
...
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!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por microvolution »

olá pessoal bom dia!
comecei a usar os exemplos deste tópico, e, está já imprimindo, mas tenho algumas dúvidas:
1 - coloquei a seguinte linha, para impressão em cor diferente (por coincidência a minha cor PRETA/BLACK acabou), mas, não está mudando a cor da fonte e não achei nenhum tutorial ou página oficial da HB_WIN para harbour podermos usar a aplicação de cor. A única coisa que achei foi com nomes para a xharbour na WIN32PRN e não para WINPRN que está Oprint : setocolor..., aí fiz a seguinte alteração, mas, que não imprimiu na cor desejada. Já usei YELLOW, BLUE, GREEN e até mesmo outras, mas nada:

Código: Selecionar todos

oPrn :SetColor( HB_WIN_RGB_RED )
2 - no exemplo deste tópico, abre-se uma tela com as opções de impressoras disponíveis, e, observei seta (deveria no meu entendimento o cursor parar na impressora padrão) na primeira opção que são aquelas opções de impressão sem impressora usb da Microsoft. Neste caso, como fazer p/ que já caia na impressora padrão e se eu não a quiser que eu escolha outra e dê enter.
3 - Já que uso HMG 3.0.xx para compilar e estou em modo console, como fazer para que a janela de impressoras (item 2 acima) apareça em modo gráfico e não em modo console como ela é apresentada;
4 - também, de acordo com a janela do item 2 acima, observei que ao final da impressão, ou melhor, quando a impressão é direcionada para a impressora de nossa escolha (no meu caso HP C4280 USB) a janela de impressoras continua aberta, dando a entender que está aguardando o usuário dar um ENTER em cima da impressora. E, se assim o fizer, a impressão sai novamente, com isso, percebo, que talvez falte algum tipo de fechamento automático desta janela (tela de impressoras) após a impressão. Devo colocar um keyboard chr (27) onde?
5 - também para discernir entre normal e condensado fiz as seguintes linhas:

Código: Selecionar todos

 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
   oPrn :SetFont('courier new',17,{1,17}, 0,.F.,.F.)
 else // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
   oPrn :SetFont( "Lucida Console", 8, { 3, -50 } )
 endif // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
Finalmente, estou no mesmo dilema sobre impressão multi usuário e em rede. Eu explico.
Imaginem a seguinte situação:
- Um usuário abre o sistema e vai imprimir um extrato (o que o cliente está devendo de fiado na empresa) do cliente 0001, aí o arquivo gerado é o VENDAS.TMP (segundo o exemplo aqui);
- Ao mesmo tempo outro usuário vai imprimir o extrato do cliente 0421 e também o arquivo é o VENDAS.TMP
- Outro usuário com o cliente 3492...

Acho que deu pra V.Sas. entenderem, que novamente (conforme outros tópicos) preciso usar a macro substituição. Então, no lugar de usar o VENDAS.TMP estou usando a variável que contém o código do cliente, que no meu caso é mCDCLIENTE. Neste caso minhas linhas que chamam a função PRINTWINPRN() ficaram assim, mas, não deu certo:

Código: Selecionar todos

     if mUSB
         // MemoWrit( "vendas.tmp", cCupom )
         MemoWrit( '&mCDCLIENTE..tmp', 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.tmp", aPrn[ nPrn ] )
               PrintWinPrn( '&mCDCLIENTE..tmp', aPrn[ nPrn ] )
            Endi
         EndDo
     endif
A única coisa a mais que mudei do código original deste tópico foi o if/endif mUSB, o restante está igual, exceto (também é claro) a troca de VENDAS.TMP para &mCDCLIENTE..TMP, onde a macro substituição acontece entre o "&" e o primeiro ".", significando que não importa (pelo menos é o que esperava) o nome mCDCLIENTE e sim o seu conteúdo que poderia ser qualquer de "0001" até "9999" (o máximo de clientes que o software suporta) ou o máximo de clientes cadastrados na empresa...
Mas, o resultado foi a criação do arquivo "&mCDCLIENTE..TMP"

Alguém consegue me ajudar com a MACRO SUBSTITUIÇÃO?

vlw meus amigos!
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
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por Toledo »

microvolution escreveu:Mas, o resultado foi a criação do arquivo "&mCDCLIENTE..TMP"

Alguém consegue me ajudar com a MACRO SUBSTITUIÇÃO?
Amigo, me desculpe, mas eu não entendo por que você insiste em usar uma MACRO neste caso, já demos vários exemplos em substituir a MACRO por mCDCLIENTE+".TMP". Como já lhe disse várias vezes, neste fórum e também no fórum da HMG, neste caso a MACRO não vai funcionar corretamente.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por microvolution »

prezado Toledo, é sempre uma honra ter V.Sa. nos respondendo... pra nós és um paizão...

quanto aos "tais exemplos" a verdade é que ainda não consegui compreendê-los e lá no outro tópico sobre SET PRINTER TO, consegui fazer a macro funcionar...
Se, V.Sa. conseguir me explicitar melhor, com toda a certeza, quero sair das macros e trabalhar mais facilmente.
Vlw!
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!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por microvolution »

Toledo escreveu:Amigo, me desculpe, mas eu não entendo por que você insiste em usar uma MACRO neste caso, já demos vários exemplos em substituir a MACRO por mCDCLIENTE+".TMP"
Então prezado professor, fiz a modificação para mostrar os resultados (do meu baixo conhecimento). A alteração das minhas últimas linhas ficaram assim:

Código: Selecionar todos

     if mUSB
         // MemoWrit( "vendas.tmp", cCupom )
         vendas := mCDCLIENTE+".TMP"
         // MemoWrit( '&mCDCLIENTE..tmp', cCupom )
         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.tmp", aPrn[ nPrn ] )
               // PrintWinPrn( '&mCDCLIENTE..tmp', aPrn[ nPrn ] )
               PrintWinPrn( VENDAS, aPrn[ nPrn ] )
            Endi
         EndDo
     endif
Sabe o resultado? foi uma baita de mensagem de erro de RUN-TIME:
Error BASE/1081 Argument error: +

Então, quando disse que não compreendi bem a substituição de macros pelas sugestões é porque não entendi mesmo e pra não ficar cansando V.Sas. muito mais do além que já tenho incomodado.

... :'(
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
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por Toledo »

Amigo, resta saber se mCDCLIENTE é uma variável caractere (string) ou numérica!
Mas pela mensagem de erro, mCDCLIENTE deve ser numérica, então faça o seguinte:

Código: Selecionar todos

vendas := StrZero(mCDCLIENTE,4)+".TMP"
Uma pequena dica: procure dar nomes nas variáveis de forma que você saiba que tipo de variável é (caractere, numérica, data, memo, array, etc). Uma forma de se fazer isto é usar a primeira letra do nome da variável para diferenciar o seu tipo, por exemplo: c (caractere), n (numérica), d (data), m (memo), a (array), l (lógica/.T. ou .F.),etc.

No caso da variável VENDAS no código acima, eu trocaria por cVendas:=StrZero(mCDCLIENTE,4)+".TMP".

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por microvolution »

Toledo escreveu:Mas pela mensagem de erro, mCDCLIENTE deve ser numérica, então faça o seguinte:
prezado Toledo, fiz conforme, mas, já acreditava (não sabia) que não daria certo. A alteração ficou assim:

Código: Selecionar todos

         vendas := StrZero(mCDCLIENTE,4)+".TMP"
         MemoWrit( "vendas", cCupom )
Mas, veja na imagem o resultado:
erro arquivo vendas sem macro.jpg
Prezado professor Toledo, não deu certo, ou seja, o arquivo não constituído com o nome do seu conteúdo e sim com o nome VENDAS (sem o .TMP).
É por isso que eu sempre uso a MACRO (&), pois com ela, ou funciona, ou não funciona. Se não funciona é porque algo está errado.

Então, prezados Srs. qual a solução?
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!
Responder