duvida com rotina para comprimir caracter

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

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida com rotina para comprimir caracter

Mensagem por porter »

ola pessoal, na rotina abaixo, estou imprimindo no modo comprimido, mas preciso comprimir ainda mais, gostaria de saber como faço para diminuir a largura dos caracteres, CHR(15) é uma configuração que tem dado certo, mas aqui, nessa linha, nao sei como, obrigado.

//impressao comprimida: { 3, -50 } ‚ igual 50/3, ou seja 16.6 cpp
oPrinter:SetFont( "Lucida Console", 10, { 3, -50 } )

xHarbour

Código: Selecionar todos

PROCEDURE W32PRN(arqtxt,nomeimpressora)
      #include "WinGdi.ch"
      Local cPrinter
      Local contl := 1
      cFileName := "C:\JATO\" + arqtxt
      SET PRINTER TO
      SET DEVICE TO SCREEN
      If !File("&cFileName")
         Return Nil
      Else  // Vamos colocar seu arquivo num Array
         cLinha := Nil
         aLinesPrint := {}
         cBuffer := FOpen( cFileName, 2 )
         Do While Hb_FReadLine( cBuffer, @cLinha, Nil, 255 ) = 0
              AaDd( aLinesPrint, cLinha )
         EndDo
         FClose( cBuffer )
      EndIf
*     cPrinter := PegaPrinter()  // escolhe a impressora (cPrinter retorna o nome da impressora)
      cPrinter := ALLTRIM(nomeimpressora)
      If !Empty( cPrinter )
         nCopias := 1  // numero de c¢pias
         oPrinter           := Win32Prn():new( cPrinter )
         oPrinter:landscape := .F.
         oPrinter:formType  := DMPAPER_A4  // folha A4
         oPrinter:copies    := nCopias
         IF .NOT. oPrinter:create()
            Alert("Erro Tentando Acessar a Impressora ; " + alltrim(nomeimpressora) )
            Return Nil
         ENDIF
         IF .NOT. oPrinter:startDoc( "Impressao Teste" )
            Alert("Erro Tentando Enviar os Dados de Impressao")
            Return Nil
         ENDIF
*****************************************************************		 
[b]//impressao comprimida: { 3, -50 } ‚ igual 50/3, ou seja 16.6 cpp
            oPrinter:SetFont( "Lucida Console", 10, { 3, -50 } )[/b]
*****************************************************************
         // impressao normal
*****************************************************************
*        oPrinter:SetFont( "Lucida Console", 10 )
*****************************************************************
*        oPrinter:CharSet( 0 )
*        oPrinter:bold( FW_NORMAL )  // nao negrito, nao italico, etc...
*****************************************************************
*        PrintBitMap(oPrinter, "C:\SYS222\Cowboy.bmp")
*****************************************************************
         For i = 1 To Len ( aLinesPrint )
             oPrinter:textOut( aLinesPrint[ i ] )  // imprime a linha
             oPrinter:newLine()  // passa para proxima linha
         Next
         oPrinter:endDoc()   // envia a impressora
         oPrinter:destroy()  // fecha documento de impressao
      EndIf
      Return Nil
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

duvida com rotina para comprimir caracter

Mensagem por Jairo Maia »

Olá Porter,

Observe o que está em vermelho nessa linha: oPrinter:SetFont( "Lucida Console", 10, { 3, -50} )

A linha acima informa que você está imprimindo 16,6 caracteres por polegada. Para você entender, se você alterar para { 3, -60 } por exemplo, então será impresso 20 caracteres por polegada. Ou seja, o raciocínio e dividir o segundo número pelo primeiro, então você tem a quantidade de caractres a serem impressos. ou seja: 60/3 = 20.

Não sei se xHarbour tem o mesmo comportamento de Harbour nessa classe quanto a isso, mas em Harbour se você quer imprimir 20 caractres por polegada, você pode usar assim: oPrinter:SetFont( "Lucida Console", 10, { 1, 20 } ).

Facilita o raciocínio, pois dividindo o segundo pelo primeiro seria: 20/1 = 20, e assim sucessivamente.
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)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida com rotina para comprimir caracter

Mensagem por porter »

ola Jairo, agora entendi, obrigado, a minha outra duvida é que estou conseguindo imprimir somente com impressora instalada localmente, sei que cPrinter no comando abaixo guarda o nome da impressora, mas qual informação devo acrescentar para imprimir pela estacao em uma impressora instalada no servidor, quando tento imprimir pela estação, da a mensagem "Erro Tentando Acessar a Impressora", o nome da impressora que estou tentando imprimir pela rede é

MP-2500 TH


cPrinter := PegaPrinter() // escolhe a impressora (cPrinter retorna o nome da impressora)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

duvida com rotina para comprimir caracter

Mensagem por Jairo Maia »

Se a impressora da rede aparece na lista em PegaPrinter() e você a seleciona, parece que a impressora da estação está compartilhada e deveria funcionar normalmente.

Faça um teste colocando a impressora da rede como padrão. Veja o que acontece.
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)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida com rotina para comprimir caracter

Mensagem por porter »

olá Jairo, obrigado por sua atenção, esta funcionando tudo perfeitamente, com o comando abaixo, estou imprimindo em modo comprimido, como faço para imprimir comprimido e em negrito ?

Código: Selecionar todos

//impressao comprimida: { 3, -50 } ‚ igual 50/3, ou seja 16.6 cpp
oPrinter:SetFont( "Lucida Console", 10, { 3, -70 } )
obrigado.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

duvida com rotina para comprimir caracter

Mensagem por Jairo Maia »

Porter, você pode usar um desses dependendo do que deseja. Tenha em mente que fonte negrito usa largura maior. Talvez você tenha que aumentar um pouquinho o 70::

Código: Selecionar todos

oPrinter:Bold( FW_SEMIBOLD )   // semi negrito
oPrinter:Bold( FW_BOLD )       // negito
oPrinter:Bold( FW_EXTRABOLD )  // negrito extra
No ponto que desejar voltar ao normal use:

Código: Selecionar todos

oPrinter:Bold( FW_NORMAL )  // fonte normal
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)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida com rotina para comprimir caracter

Mensagem por porter »

Jairo, fiz dessa forma e deu certo, qual a diferença de fazer assim ou usando os comandos abaixo que você sugeriu ?
oPrinter:SetFont( "Lucida Console", 10,{3,-60},700,.F.,.F. )


// qual a diferença de usar assim:

oPrinter:Bold( FW_SEMIBOLD ) // semi negrito
oPrinter:Bold( FW_BOLD ) // negito
oPrinter:Bold( FW_EXTRABOLD ) // negrito extra
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

duvida com rotina para comprimir caracter

Mensagem por Jairo Maia »

Olá Porter,

Nenhuma se for trabalhar com o texto todo no mesmo tipo de fonte. No caso da sugestão anterior, seria que você pode mesclar o tipo da fonte definida sem usar novamente :SetFont(), podendo alternar entre normal, outro tipo ou negrito. Pronto, já solucionou. Legal...

Mas se aceita uma sugestão, troque o 700 por FW_BOLD. Isso facilita no futuro você ler seus fontes. Exemplo:

Código: Selecionar todos

oPrinter:SetFont( "Lucida Console", 10,{3,-60},FW_BOLD,.F.,.F. )
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)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida com rotina para comprimir caracter

Mensagem por porter »

Muito boa a sua sugestão, e muitissimo obrigado por sua atenção.
Responder