Página 1 de 1

função SetFont

Enviado: 26 Out 2012 01:49
por cjp
Meus amigos,

Alguém sabe me explicar como usar a função SetFont?

Achei o seguinte no site Harbour Online Help:

Código: Selecionar todos

Wvt_SetFont( cFontName, nSize, nWidth, nWeight, nQuality )
FUNCTION Wvt_SetFont( cFontName, nSize, nWidth, nWeight, nQuality )

   DEFAULT cFontName TO Hb_GtInfo( HB_GTI_FONTNAME    )
   DEFAULT nWidth    TO Hb_GtInfo( HB_GTI_FONTWIDTH   )
   DEFAULT nWeight   TO Hb_GtInfo( HB_GTI_FONTWEIGHT  )
   DEFAULT nQuality  TO Hb_GtInfo( HB_GTI_FONTQUALITY )
   DEFAULT nSize     TO Hb_GtInfo( HB_GTI_FONTSIZE    )

   RETURN Hb_GtInfo( HB_GTI_SETFONT, { cFontName, nSize, nWidth, nWeight, nQuality } )
Estou tentando usar assim:

Código: Selecionar todos

SetFont('Times New',20,{1,12}, 0,.F.,.F.)
Ou assim:

Código: Selecionar todos

SetFont('Times New',20,12, 0,.F.,.F.)
Ou assim:

Código: Selecionar todos

SetFont('Courier New',12,{1,12}, 0,.F.,.F.)
Ou de várias formas parecidas, mas sempre retorna -2. No site não indica o que significa -2, mas o fato é que não estou conseguindo o que quero: aumentar o tamanho da fonte na impressão.

Alguém me ajuda?

Inacio

função SetFont

Enviado: 26 Out 2012 07:51
por Toledo
Inacio, você quer usar esta configuração de fonte no vídeo ou em relatórios?

Abraços,

função SetFont

Enviado: 26 Out 2012 20:43
por cjp
Em relatórios para impressão, meu caro!!!

função SetFont

Enviado: 27 Out 2012 10:50
por Toledo
Ok, então neste caso a função Wvt_SetFont() não vai lhe servir e nos exemplos que você passou usando SetFont() você tem que colocar o objeto criado na classe de impressão (Win_prn() ou Win32Prn()).

Por exemplo:

Código: Selecionar todos

oPrinter:SetFont('Times New',20,{1,12}, 0,.F.,.F.)
Abraços,

função SetFont

Enviado: 27 Out 2012 17:44
por cjp
Mas é justamente isto que estou fazendo. Veja como está minha função:

Código: Selecionar todos

FUNCTION Implist8
 oPrn := Win_Prn():new( aPNomes[nPrn] )
 oPrn:SetFont('Times New',20,{1,12}, 0,.F.,.F.)

 If !oPrn :Create()
 Hb_alert("Nao foi criado o documento de Impressao")
 Return nil
 ElseIf !oPrn :StartDoc("Imprimindo Documento")
 Hb_alert("Erro na Impressora")
 Return nil
 EndIf

   nPrn=1
   nrpg=1
 oPrn :NewLine()
 While &cCriterio. .And. !Eof()
       nPrn++

 oPrn :NewLine()
 oPrn :TextOut(&cInicio. )
 if !empty(&cCampos)
    oPrn :NewLine()
	if at(" ",&cCampos)=1
       oPrn :TextOut(" "+&cCampos. ) 
	else   
       oPrn :TextOut("  "+&cCampos. ) 
	endif   
 endif	
 if !empty(&cFinal)
    oPrn :NewLine()
	if at(" ",&cFinal)=1
       oPrn :TextOut(" "+&cFinal. ) 
	else
       oPrn :TextOut("  "+&cFinal. ) 
    endif	
 endif	

 If nPrn>29
    nPrn=0
	oPrn :NewLine()
	oPrn :TextOut("                           Página "+alltrim(str(nrpg)))
	oPrn :NewLine()
	nrpg++
 oPrn :NewPage()
 Endi

 Skip

 Endd

 oPrn :EndDoc()
 oPrn :Destroy()


Return Nil

Será que tem algo errado?

função SetFont

Enviado: 27 Out 2012 23:47
por Toledo
Inacio, tenta fazer o seguinte:

- Mova a linha 3 do seu código para a linha 12.
- Retire o espaço que existe entre o objeto e a função, por exemplo oPrn :Create() ficaria assim oPrn:Create(). Faça o mesmo com as demais funções.

Abraços,

função SetFont

Enviado: 28 Out 2012 00:52
por cjp
Perfeito, meu caro. Deu certo. Muito obrigado.

Aproveitando: vc sabe como fazer para imprimir em negrito, sublinhado, ou com outros caracteres especiais nesta mesma função?

função SetFont

Enviado: 28 Out 2012 09:36
por Jairo Maia
Olá Inácio,

Veja os parâmetros da função :SetFont():

Código: Selecionar todos

oPrn:setFont(<cFontName>,<nPointSize>,<nFontWidth>,<nFontWeight>,<lUnderline>,<lItalic>,<nCharSet>)
Veja que o parâmetro 5 se for .T. imprime Underline, e o parâmetro 6 se for .T. imprime Itálico

Acho que este exemplo pode também ajudar: c:\hb32\contrib\hbwin\tests\testprn.prg. Você pode compilar este exemplo assim: hbmk2 testprn -lhbwin e ver o resultado de acordo com a impressora que usar.

Destaco uma nota constante neste exemplo sobre Underline. Veja:
Notice: escreveu:UNDERLINE only prints correctly if there is a blank line after it. This is because of :LineHeight and the next line printing over top of the underline. To avoid this happening you can to alter :LineHeight or use a smaller font, or use :SetBkMode(WIN_TRANSPARENT)

função SetFont

Enviado: 30 Out 2012 00:58
por cjp
Funcionou perfeitamente, meu caro. Muito obrigado.

função SetFont

Enviado: 01 Fev 2016 12:04
por cjp
Novamente eu venho pedir ajuda aos colegas nesta questão. É apenas uma questão simples: como faço para imprimir centralizado na página?

Tenho usado assim:

Código: Selecionar todos

oPrn:TextOut("                                    Teste")
Mas isto tem um problema: quando o texto a ser impresso é sublinhado, ele sublinha também o espaço anterior. Existe alguma forma de centralizar efetivamente?

função SetFont

Enviado: 01 Fev 2016 19:52
por Toledo
Amigo, veja este tópico:

win_prn Centralizar texto

Abraços,

função SetFont

Enviado: 05 Abr 2017 10:22
por JCBarbosa
Olá Pessoal, sou novato no harbour e estou fazendo um cupom não fiscal para um cliente
1 - sai certo porem claro e letra pequena (cupom2) oPrinter:SetFont( 'Courier New', 6.5, 0 ) // CUPOM2
2 - sai desalinhado (cupom) oPrinter:SetFont( 'Times-Roman', 7, 0 ) // CUPOM
eu teria que usar o setpos()... como usar nos valores....

Function ImpCo9()
local oPrinter,linha,desenho,n_x
local cFileName, oWin32Bmp,nome_impressora,xcopia
DMPAPER_A4:=80;zpz:=1
nome_impressora := GetDefaultPrinter()
// Create printer object and configure print job
oPrinter := Win32Prn():new( nome_impressora )
oPrinter:landscape := .f.
oPrinter:formType := DMPAPER_A4
oPrinter:copies := 1
// Create device context
IF .NOT. oPrinter:create()
Alert( "Cannot create device context" )
QUIT
ENDIF
// Create print job
if ! oPrinter:startdoc( "Emissão de Pedido" ) // nome do arquivo para impressao
Alert( "Cannot create document" )
QUIT
ENDIF
linha := 1;corta:=chr(27)+chr(119)
desenho := 320
oPrinter:newline()
oPrinter:setfont('GungsuhChe',12,0)
oPrinter:setprc( oPrinter:Prow() , Pcol() + 7 )
oPrinter:textout( wfanta )
oPrinter:newline()
oPrinter:newline()
oPrinter:newline()
oPrinter:setfont('1FontB11',6,{1,22},0 ,.F.,.F.)
oPrinter:textout( 'Venda..: '+strzero(wnota,6)+' Emissao: '+dtoc(wemissao) )
oPrinter:newline()
sele cliente
seek wcliente
wcli:=if(zpz=0,'Cliente: '+trim(wnomecli)+' - CPF: '+transform(cliente->CGC,'@R 999.999.999-99'),'Cliente: * * * Consumidor * * * ')
oPrinter:textout( wcli )
oPrinter:NewLine()
//Printer:SetFont( 'Courier New', 6.5, 0 ) // CUPOM2
oPrinter:SetFont( 'Times-Roman', 7, 0 ) // CUPOM
oPrinter:TextOut( REPL( '-', 80 ) )
oPrinter:NewLine()
oPrinter:TextOut( ' QTDE D E S C R I C A O C.UNIT. C.TOTAL' )
oPrinter:NewLine()
oPrinter:TextOut( REPL( '-', 80 ) )
sele movime
seek wnota
do while NOTA = wnota
witem:= SAIDA * PRECO
sele produtos
seek movime->CODIGO
wpro:= left(trim(DESCRI)+repli('.',35),33)
sele movime
wlin:=str(SAIDA,4,1)+' '+wpro+' '+transform(PRECO,'@E 999.99')+spac(4)+transform(witem,'@E 9999.99')
oPrinter:newline()
oPrinter:TextOut( wlin )
skip
enddo
oPrinter:newline()
oPrinter:TextOut( REPL( '-', 83 ) )
oPrinter:CharSet( 0 ) //Reset default charset
oPrinter:Bold( WIN_FW_EXTRABOLD )
wlin:=spac(68)+'Total Geral.: '+transform(wvalor,'@E 9,999.99')
oPrinter:newline()
oPrinter:TextOut( wlin )
oPrinter:Bold( WIN_FW_DONTCARE )
oPrinter:newline()
oPrinter:TextOut( REPL( '-', 83 ) )
oPrinter:newline()
oPrinter:TextOut( '------------------------------ Volte Sempre -----------------------------' )
oPrinter:newLine()
oPrinter:TextOut("chr(27)+chr(119)")
oPrinter:endDoc()
oPrinter:destroy()
retu


no aguardo e agradeço

J.Carlos Barbosa