Página 1 de 2

Win32prn de maneira fácil

Enviado: 16 Jan 2007 14:30
por Marcelo Justino
Essa é minha primeira postagem, eu faço pequenos programas em clipper para uso pessoal, folha de pagamento, nota fiscal, faturas, envelope de pagamento, férias etc coisas simples, ao tentar passar meus programas para xHarbour senti certa dificuldade com a parte de impressão por isso deixo aki o que aprendi e espero ajudar akeles que tambem estão com duvidas relativas a classe win32prn.

Segue um exemplo simples:

function main()

local oprinter:=win32prn(), ncol:=0, nlin:=0

oprinter:new(getdefaultprinter())
oprinter:formtype:=9 // folha A4
oprinter:create()
oprinter:startdoc()
oprinter:setfont("Courier New",14,,,,,,1,) // definindo a fonte
ncol:=oprinter:GetCharWidth() // largura da fonte em pixels
nlin:=oprinter:GetCharHeight() // altura da fonte em pixels
oprinter:textoutat(01*ncol,01*nlin,"Seu texto vai aqui") // lembrando coluna e depois linha
...
oprinter:textoutat(01*ncol,40*nlin,"Aqui ja estamos na linha 40 ")
oprinter:enddoc()
oprinter:destroy()

return

Só isso, agora copie e compile e vera que funciona de maneira muito simples e fácil, sem bmp sem arquivo de teste enorme e confuso. Abaixo segue um exemplo mais completo:

function main()

local oprinter:=win32prn(), ncol:=0, nlin:=0

oprinter:new(getdefaultprinter())
oprinter:formtype:=9
oprinter:SetPrintQuality(4) // qualidade da impressão
oprinter:create()
oprinter:startdoc()
oprinter:setfont("Courier New",14,,,,,,1,)
ncol:=oprinter:GetCharWidth()
nlin:=oprinter:GetCharHeight()
oprinter:textoutat(01*ncol,01*nlin,"qualidade ="+str(oprinter:SetPrintQuality()))
oprinter:textoutat(01*ncol,02*nlin,"maxrow ="+str(oprinter:MaxRow()))
oprinter:textoutat(01*ncol,03*nlin,"maxcol ="+str(oprinter:MaxCol()))
oprinter:UnderLine(65536) // agora sai sublinhado
oprinter:textoutat(oprinter:MM_TO_POSX(010), oprinter:MM_TO_POSY(200), "imprimindo a 10mm da borda esquerda e 200mm da borda superior da folha")
oprinter:enddoc()
oprinter:destroy()

return

Espero ter ajudado na minha impressora HP930C USB funcionou perfeitamente, no arquivo "psc.prg" que acompanha o Print Script 94 (http://www.xharbour.com/xhc/index.asp?p ... show_sub=2) tem o detalhamento dessa classe, começa na linha "CLASS WINPRN32" é só dar o comando "localizar..." e no arquivo "wingdi.ch" vem coisas como:

#define DMPAPER_EXECUTIVE 7 // Executive 7 1/4 x 10 1/2 in
#define DMPAPER_A3 8 // A3 297 x 420 mm
#define DMPAPER_A4 9 // A4 210 x 297 mm
#define DMPAPER_A4SMALL 10 // A4 Small 210 x 297 mm
#define DMPAPER_A5 11 // A5 148 x 210 mm
#define DMPAPER_B4 12 // B4 (JIS) 250 x 354
#define DMPAPER_B5 13 // B5 (JIS) 182 x 257 mm
#define DMPAPER_FOLIO 14 // Folio 8 1/2 x 13 in

Um abraço a todos. Me desculpa mas achei que o que escrevi poderia ser util a muita gente como eu que estava acostumada a usar Clipper para fazer programas para uso pessoal e não querem pagar para imprimir usando programas de terceiros, a solução acima é suficiente para mim.

Enviado: 16 Jan 2007 22:08
por Sergio_ASSilva
Valeu Marcelo,

:xau



assim como voce estou comecado a migrar para xHarbour e a sua contribuicao foi muito valiosa para mim.

Ate+

Enviado: 17 Jan 2007 00:24
por And
Valeu!!!

Se conseguir algo mais, não esqueça de postar para os colegas. :)Pos


Abraço,

Enviado: 17 Jan 2007 10:30
por Marcelo Justino
Na verdade acho que cometi um erro, o arquivo psc.prg contem varios comando que não são da classe win32prn, melhor seria consultar o arquivo "win32prn.prg" que acompanha a fonte do xharbour:

http://downloads.sourceforge.net/xharbo ... 70.src.zip

Desculpa o engano, eu ainda to aprendendo :(

Enviado: 18 Jan 2007 00:27
por And
Mesmo assim valeu!


Abraço,

Enviado: 25 Jan 2007 13:28
por Marcelo Justino
Uma informação que pode ser útil:

function imprime()

local oprinter:=win32prn(),;
ncol,;
nlin

oprinter:new(getdefaultprinter())
oprinter:formtype:=9
oprinter:setprintquality(-2) // qualidade da impressao

/*
ATENÇÂO essa linha (setprintquality) DEVE ser posta antes de startdoc() ou não funcionará. As opções são DRAFT (-1), LOW (-2), MEDIUM (-3), HIGH (-4) sendo essa ultima a default por isso se vc tentar imprimir e sair muito lento use essa linha e defina como draft. Experimente e veja qual a melhor para vc.
*/

oprinter:create()
oprinter:startdoc()
oprinter:setfont("Lucida Console",14)
ncol:=oprinter:GetCharWidth()
nlin:=oprinter:GetCharHeight()

oprinter:textatfont(oprinter:mm_to_posx(105),02*nlin,"Imprimindo em negrito centralizado na horizontal","Courier New",14,,700,,,,,,,2)

/*
A linha acima imprime o texto com uma fonte diferente em negrito, por isso o 700, e centralizado na horizontal, por isso o 2. Essa centralização se faz da seguinte forma: ele centraliza na coluna que estiver o ponteiro, ou seja, eu defini coluna "oprinter:mm_to_posx(105)" que é 105mm da borda esquerda da folha exatamente na metade da largura da folha A4. Se eu tivesse posto 0 ao invez de 2 ele alinharia a esquerda ficando a letra "l" da palavra "horizontal" a esquerda da coluna "oprinter:mm_to_posx(105)" e se tivesse posto 1 ao invez de 2 ele alinharia a direita ficando a letra "I" da palavra "Imprimindo" a direita da coluna "oprinter:mm_to_posx(105)"
*/

oprinter:textoutat(35*ncol,11*nlin,transform(vNumero,"999,999.99"))

/*
Não sei explicar mas não consigo imporimir numeros diretamente por isso uso a funcao transform para imprimir numeros como texto. Coisa minima.
*/

oprinter:enddoc()
oprinter:destroy()

return

Por enquanto é isso se eu descobrir mais alguma coisa que possa ser util acrescento aki, e se vcs puderem ajudar com sugestões EU REALMENTE ficaria muito agradecido. :)) []s

Enviado: 26 Mai 2007 22:23
por Hasse
Valeu Marcelo Justino.

Já gerei 4 executáveis com valores diferentes, e na segunda vou testar no equipamento do cliente.

Eu volto ao assunto...

Obrigado.

Um ClipAbraço.

Racunho

Enviado: 04 Set 2007 09:11
por heveraldo
Olá a todos,

Quando uso este comando "oprinter:SetPrintQuality(-1)",
dá um erro: "METODO NAO EXPORTADO"

Atencipadamente agradeço a ajuda,

Heveraldo

Enviado: 04 Set 2007 09:33
por Hasse
Qual a versão xHarbour que você está usando ?

Enviado: 04 Set 2007 09:34
por sygecom
Heveraldo, qual versão do seu xharbour ? procure usar a 0.99.70 ou 0.99.71 neles tem o metodo oprinter:SetPrintQuality(-1) ...que serve para qualidade da Impressão ...os valores são os seguintes Abaixo:

Código: Selecionar todos

#define DMRES_DRAFT         (-1)
#define DMRES_LOW           (-2)
#define DMRES_MEDIUM        (-3)
#define DMRES_HIGH          (-4)
Abraços
Leonardo Machado

Enviado: 04 Set 2007 09:36
por sygecom
Não deixe de dar uma olhada tmb. no sample que o Hasse montou que foi um belo trabalho sobre a Win32Prn.
https://pctoledo.org/forum/viewtopic.php?t=6465

Abraços
Leonardo Machado

Valeu

Enviado: 04 Set 2007 16:01
por heveraldo
Galera,

O que dizer da presteza de vocês?

Muitíssimo obrigado pela atenção,

Heveraldo


harbour 0.99.50

Enviado: 04 Set 2007 17:37
por sygecom
Tche, Heveraldo...resolveu sua duvida....se vc não estiver afim de sair da versão 0.99.50 ..vc pode tentar linkar o PRG da WIN32PRN.PRG para atualizar somente as funções da CLASSE win32PRN

Abraços
Leonardo Machado

erro compilar xharbour0.99.70

Enviado: 05 Set 2007 14:50
por heveraldo
Leonardo,

quando compilo com a nova versao dá esse erro:
Error: Unresolved external '_hb_sxDeCrypt' referenced from D:\XHARBOUR\LIB\RDD.LIB|dbf1
Error: Unresolved external '_hb_sxPtoD' referenced from D:\XHARBOUR\LIB\RDD.LIB|dbf1
Error: Unresolved external '_hb_sxDtoP' referenced from D:\XHARBOUR\LIB\RDD.LIB|dbf1
Error: Unresolved external '_hb_sxEnCrypt' referenced from D:\XHARBOUR\LIB\RDD.LIB|dbf1

atencipadamente agradeço a ajuda,

Heveraldo

Enviado: 05 Set 2007 14:55
por sygecom
qual versão Heveraldo ? 0.99.70 ou 71 da CVS ? essas funções que não esta achando é de onde isso ? de mais detalhes !!