win_prn Centralizar texto
Moderador: Moderadores
win_prn Centralizar texto
Prezados,
Alguém tem algum exemplo usando win_prn para impressão de texto centralizado a esquerda e direita?
Alguém tem algum exemplo usando win_prn para impressão de texto centralizado a esquerda e direita?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
win_prn Centralizar texto
:textOut( <cString>], [<lNewLine>], [<lUpdatePosX>], [<nTexAlign>] )
Onde nTexAlign tem os seguintes valores:
0 = (padrão) alinhamento a esquerda
1 = alinhamento a direita
2 = alinhamento centralizado
Onde nTexAlign tem os seguintes valores:
0 = (padrão) alinhamento a esquerda
1 = alinhamento a direita
2 = alinhamento centralizado
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
win_prn Centralizar texto
Olá Jairo,
Eu estou direcionando a impressão para uma impressora pdf (CutePdf Writer)
Eu tentei isso:
oPrn:SetPrc(8,0)
oPrn:Textout("ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS",.t.,.t.,1) //direita (imagem abaixo)
Quando alinhado a esquerda (com 0) aparece normal abaixo do logo, quando alinhado ao centro, não mostra nada.
aparece isso:
Eu estou direcionando a impressão para uma impressora pdf (CutePdf Writer)
Eu tentei isso:
oPrn:SetPrc(8,0)
oPrn:Textout("ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS",.t.,.t.,1) //direita (imagem abaixo)
Quando alinhado a esquerda (com 0) aparece normal abaixo do logo, quando alinhado ao centro, não mostra nada.
aparece isso:
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
win_prn Centralizar texto
Jairo,
Eu consegui, alinhar a direita e centralizar desta forma:
nColC:=(oPrn:MaxCol() - Len("ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS")) /2 * oPrn:CharWidth
nColR:=(oPrn:MaxCol() - Len("ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS")) * oPrn:CharWidth
oPrn:SetPrc(8,0)
oPrn:SetPos( nColc )
oPrn:Textout("ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS",.t.)
oPrn:SetPos( nColr )
oPrn:Textout("ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS",.t.)
Eu consegui, alinhar a direita e centralizar desta forma:
nColC:=(oPrn:MaxCol() - Len("ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS")) /2 * oPrn:CharWidth
nColR:=(oPrn:MaxCol() - Len("ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS")) * oPrn:CharWidth
oPrn:SetPrc(8,0)
oPrn:SetPos( nColc )
oPrn:Textout("ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS",.t.)
oPrn:SetPos( nColr )
oPrn:Textout("ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS",.t.)
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
win_prn Centralizar texto
Código: Selecionar todos
aVetor:={}
aAdd(aVetor,{"ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS","C"})
aAdd(aVetor,{"DA PREVIDÊNCIA SOCIAL NO ESTADO DO RIO DE JANEIRO","C"})
aAdd(aVetor,{"Data: "+Padl(hb_dtoc(Date(),"DD/MM/YYYY"),10),"R"})
aAdd(aVetor,{"Hora: "+Padl(Time(),10),"R"})
aAdd(aVetor,{"Pág : "+Padl(StrZero(nPag,4),10),"R"})
oPrn:SetPrc(8,0)
For i:=1 To Len(aVetor)
If aVetor[i,2] = "C"
nAlign:=(oPrn:MaxCol() - Len(aVetor[i,1])) /2 * oPrn:CharWidth
Else
nAlign:=(oPrn:MaxCol() - Len(aVetor[i,1])) * oPrn:CharWidth
Endif
oPrn:SetPos( nAlign )
oPrn:Textout(aVetor[i,1],.t.)
Next
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
win_prn Centralizar texto
Minha função de testes para impressão de cabeçalhos está ficando assim:
Código: Selecionar todos
STATIC PROCEDURE PrintCabec( oPrn, cBitFile, nPag )
LOCAL oBMP, nLinha:=210, nColuna:=130, nColFixed, nHandleFile, nWidth, nHeight
hb_Default(@nPag, 1)
nHandleFile:=hwg_Fi_load( cBitFile )
nWidth:=hwg_Fi_getwidth( nHandleFile )
nHeight:=hwg_Fi_getheight( nHandleFile )
aVetor:={}
aAdd(aVetor,{"ASSOCIAÇÃO DOS APOSENTADOS E PENSIONSTAS","C"})
aAdd(aVetor,{"DA PREVIDÊNCIA SOCIAL NO ESTADO DO RIO DE JANEIRO","C"})
aAdd(aVetor,{"Data: "+Padl(hb_dtoc(Date(),"DD/MM/YYYY"),10),"R"})
aAdd(aVetor,{"Hora: "+Padl(Time(),10),"R"})
aAdd(aVetor,{"Pág : "+Padl(StrZero(nPag,4),10),"R"})
aAdd(aVetor,{"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012","L"})
aAdd(aVetor,{"0 10 20 30 40 50 60 70 80 90 100 110 120 132","L"})
aAdd(aVetor,{Replicate("-",132),"L"})
oPrn:SetPrc(3,0)
For i:=1 To Len(aVetor)
Switch aVetor[i,2]
Case "C"
nAlign:=(oPrn:MaxCol() - Len(aVetor[i,1])) /2 * oPrn:CharWidth
Exit
Case "R"
nAlign:=(oPrn:MaxCol() - Len(aVetor[i,1])) * oPrn:CharWidth
Exit
Case "L"
nAlign:=3 * oPrn:CharWidth
Exit
EndSwitch
oPrn:SetPos( nAlign )
oPrn:Textout(aVetor[i,1],.t.)
Next
IF ! Empty( cBitFile )
IF hb_vfExists( cBitFile )
oBMP := win_BMP():New()
IF oBmp:loadFile( cBitFile )
oBmp:Draw( oPrn, { nColuna, nLinha, nWidth, nHeight } )
/* Note: Can also use this method to print bitmap */
//oBmp:Rect := { nColuna, nLinha, nWidth, nHeight }
//oPrn:DrawBitmap( oBmp )
ENDIF
oBMP:Destroy()
ENDIF
ENDIF
//oPrn:SetPrc( oPrn:PRow() + 1, 0 ) //Se for necessário pular uma linha
RETURN
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
win_prn Centralizar texto
Olá Alexandre,
Realmente. Fiz alguns testes aqui e o parâmetro 2 (centralizar) não funciona mesmo. E verificando meus relatórios (usando fonte padrão) vi que uso também a função PadC() para centralizar a numeração da página. Algo como:
Realmente. Fiz alguns testes aqui e o parâmetro 2 (centralizar) não funciona mesmo. E verificando meus relatórios (usando fonte padrão) vi que uso também a função PadC() para centralizar a numeração da página. Algo como:
Código: Selecionar todos
#include "WinGdi.ch"
Function Main()
nPagina := 1
oPrinter := Win_Prn():new( GetDefaultPrinter() )
oPrinter:FormType := DMPAPER_A4
oPrinter:Create()
oPrinter:StartDoc()
oPrinter:NewLine()
oPrinter:SetPrc( oPrinter:MaxRow()-1, 1 )
oPrinter:TextOut( Replicate( "-", oPrinter:MaxCol() ), .t. )
oPrinter:TextOut( PadC( "Pagina " + Hb_NToS( nPagina ), oPrinter:MaxCol() ) )
oPrinter:EndDoc()
oPrinter:Destroy()
Return NilAbraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
win_prn Centralizar texto
Amigos, vejam este exemplo:
Abraços,
Código: Selecionar todos
#include "hbwin.ch"
Function Main()
oPrinter:=Win_Prn():new( "PDFCreator" )
oPrinter:Create()
oPrinter:StartDoc("Teste")
nAliCen:=hb_BitOr( WIN_TA_BASELINE, WIN_TA_CENTER )
oPrinter:SetPrc( oPrinter:maxRow()/2, oPrinter:maxCol()/2 )
oPrinter:TextOut("|---> texto centralizado <---|",,,nAliCen)
oPrinter:SetPrc( oPrinter:pRow()+2, oPrinter:maxCol()/2 )
oPrinter:TextOut("|---> outra linha centralizado <---|",,,nAliCen)
oPrinter:SetPrc( oPrinter:pRow()+3, 5 )
oPrinter:TextOut("|---> texto esquerda")
oPrinter:SetPrc( oPrinter:pRow()+2, 5 )
oPrinter:TextOut("|---> outra linha na esquerda")
nAliDir:=hb_BitOr( WIN_TA_BOTTOM, WIN_TA_RIGHT )
oPrinter:SetPrc( oPrinter:pRow()+3, oPrinter:maxCol()-5)
oPrinter:TextOut("texto direita <---|",,,nAliDir)
oPrinter:SetPrc( oPrinter:pRow()+2, oPrinter:maxCol()-5)
oPrinter:TextOut("outra linha na direita <---|",,,nAliDir)
oPrinter:EndDoc()
oPrinter:Destroy()
Return NilToledo - 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
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
win_prn Centralizar texto
Toledo e Jairo,
Obrigado pelas dicas.
Temos então 3 soluções para alinhar um texto na página:
aVetor:={"=== TEXTO CENTRALIZADO ===","C"}
oPrn:SetPrc(3, 0)
Minha solução:
nAlign:=(oPrn:MaxCol() - Len(aVetor[1])) /2 * oPrn:CharWidth
oPrn:SetPos( nAlign )
oPrn:Textout(aVetor[1],.T.)
Solução Jairo:
oPrn:TextOut( PadC(aVetor[1], oPrn:MaxCol() ), .T. )
Solução Toledo:
nAlignC:=hb_BitOr( WIN_TA_BASELINE, WIN_TA_CENTER )
oPrn:SetPrc( oPrn:pRow()+1, oPrn:maxCol()/2 )
oPrn:TextOut(aVetor[1],,,nAlignC)
:-Y
Obrigado pelas dicas.
Temos então 3 soluções para alinhar um texto na página:
aVetor:={"=== TEXTO CENTRALIZADO ===","C"}
oPrn:SetPrc(3, 0)
Minha solução:
nAlign:=(oPrn:MaxCol() - Len(aVetor[1])) /2 * oPrn:CharWidth
oPrn:SetPos( nAlign )
oPrn:Textout(aVetor[1],.T.)
Solução Jairo:
oPrn:TextOut( PadC(aVetor[1], oPrn:MaxCol() ), .T. )
Solução Toledo:
nAlignC:=hb_BitOr( WIN_TA_BASELINE, WIN_TA_CENTER )
oPrn:SetPrc( oPrn:pRow()+1, oPrn:maxCol()/2 )
oPrn:TextOut(aVetor[1],,,nAlignC)
:-Y
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
win_prn Centralizar texto
Fiz um teste com as 3 soluções e a solução usando padc() deu uma diferença
Tentando:
oPrn:TextOut( PADC(aVetor[1], oPrn:maxCol()),.T.)
Ou
oPrn:TextOut( PADC(aVetor[1], oPrn:maxCol()+1),.T.)
Ou
oPrn:TextOut( PADC(aVetor[1], oPrn:maxCol()-1),.T.)
Não alinhou
A primeira linha da imagem foi usando padc()
Não alinhou com os outros resultados a imagem abaixo:
Tentando:
oPrn:TextOut( PADC(aVetor[1], oPrn:maxCol()),.T.)
Ou
oPrn:TextOut( PADC(aVetor[1], oPrn:maxCol()+1),.T.)
Ou
oPrn:TextOut( PADC(aVetor[1], oPrn:maxCol()-1),.T.)
Não alinhou
A primeira linha da imagem foi usando padc()
Não alinhou com os outros resultados a imagem abaixo:
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
win_prn Centralizar texto
Olá Toledo,
Valeu a dica. Mais uma alternativa. Curioso é que tanto nAliCen e nAliDir retornam 30, mas para funcionar tem que usar como você fez.
Alexandre, uma coisa que percebi é que para ficar correto o alinhamento com PadC() usando MaxCol() precisa iniciar na coluna 1. Com seu exemplo está iniciando na coluna 0 (zero).
Valeu a dica. Mais uma alternativa. Curioso é que tanto nAliCen e nAliDir retornam 30, mas para funcionar tem que usar como você fez.
Alexandre, uma coisa que percebi é que para ficar correto o alinhamento com PadC() usando MaxCol() precisa iniciar na coluna 1. Com seu exemplo está iniciando na coluna 0 (zero).
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
-
Ruben Dario
- Usuário Nível 3

- Mensagens: 127
- Registrado em: 14 Jun 2015 23:19
- Localização: Colombia
win_prn Centralizar texto
Colegas, estou testando o exemplo do Toledo, que funcionou perfeitamente, exceto por um detalhe: ao transpor para o meu sistema, ele está imprimindo no centro da página. Quero dizer: não apenas com alinhamento central entre a margem esquerda e a direita, como eu queria, mas também no centro entre o topo e o fim da página, e não estou conseguindo mudar isso.
Estou fazendo assim:
Tentei alterar a chamada à maxrow()/2, que imagino que esteja causando o problema, para várias outras formas, mas nunca dá certo.
Como faço para corrigir isso?
Estou fazendo assim:
Código: Selecionar todos
#include "hbwin.ch"
oPrn:SetFont('Times New',22, {1,12}, 0,.T.,.F.)
nAliCen:=hb_BitOr( WIN_TA_BASELINE, WIN_TA_TOP )
oPrn:SetPrc( oPrn:maxRow()/2, oPrn:maxCol()/2 )
oPrn:TextOut("Teste - FAPI",,,nAlicen)
Como faço para corrigir isso?
Inacio de Carvalho Neto
win_prn Centralizar texto
Mudar maxRow()? Já tentou retirá-la.cjp escreveu:oPrn:SetPrc( oPrn:maxRow()/2, oPrn:maxCol()/2 )
Código: Selecionar todos
oPrn:SetPrc( oPrn:0, oPrn:maxCol()/2 )Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
win_prn Centralizar texto
Foi o que eu quis dizer: tentei substituir maxrow()/2 por 0, ou por 1, ou por row(). Mas, estranhamente, dá erro na compilação.
Inacio de Carvalho Neto


