Win32prn de maneira fácil
Moderador: Moderadores
-
Marcelo Justino
- Usuário Nível 1

- Mensagens: 7
- Registrado em: 16 Jan 2007 13:51
Win32prn de maneira fácil
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.
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.
- Sergio_ASSilva
- Usuário Nível 2

- Mensagens: 92
- Registrado em: 09 Mar 2006 10:58
- Localização: Santo Estevão (Ba)
Valeu!!!
Se conseguir algo mais, não esqueça de postar para os colegas. :)Pos
Abraço,
Se conseguir algo mais, não esqueça de postar para os colegas. :)Pos
Abraço,
Anderson
Clipper 52e/Clipper 53b/Blinker 7/Vlib/Fglib/DBFNTX
_______________________________________________
Migrando para [x]Harbour 0.99.60 (SimpLex) + MiniGUI 1.2 Exp. (Build 22)
_______________________________________________
Assine o manifesto dos artistas pela preservação da amazônia.
Clipper 52e/Clipper 53b/Blinker 7/Vlib/Fglib/DBFNTX
_______________________________________________
Migrando para [x]Harbour 0.99.60 (SimpLex) + MiniGUI 1.2 Exp. (Build 22)
_______________________________________________
Assine o manifesto dos artistas pela preservação da amazônia.
-
Marcelo Justino
- Usuário Nível 1

- Mensagens: 7
- Registrado em: 16 Jan 2007 13:51
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
http://downloads.sourceforge.net/xharbo ... 70.src.zip
Desculpa o engano, eu ainda to aprendendo
Mesmo assim valeu!
Abraço,
Abraço,
Anderson
Clipper 52e/Clipper 53b/Blinker 7/Vlib/Fglib/DBFNTX
_______________________________________________
Migrando para [x]Harbour 0.99.60 (SimpLex) + MiniGUI 1.2 Exp. (Build 22)
_______________________________________________
Assine o manifesto dos artistas pela preservação da amazônia.
Clipper 52e/Clipper 53b/Blinker 7/Vlib/Fglib/DBFNTX
_______________________________________________
Migrando para [x]Harbour 0.99.60 (SimpLex) + MiniGUI 1.2 Exp. (Build 22)
_______________________________________________
Assine o manifesto dos artistas pela preservação da amazônia.
-
Marcelo Justino
- Usuário Nível 1

- Mensagens: 7
- Registrado em: 16 Jan 2007 13:51
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
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.
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
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.
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.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Racunho
Olá a todos,
Quando uso este comando "oprinter:SetPrintQuality(-1)",
dá um erro: "METODO NAO EXPORTADO"
Atencipadamente agradeço a ajuda,
Heveraldo
Quando uso este comando "oprinter:SetPrintQuality(-1)",
dá um erro: "METODO NAO EXPORTADO"
Atencipadamente agradeço a ajuda,
Heveraldo
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Qual a versão xHarbour que você está usando ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
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:
Abraços
Leonardo Machado
Código: Selecionar todos
#define DMRES_DRAFT (-1)
#define DMRES_LOW (-2)
#define DMRES_MEDIUM (-3)
#define DMRES_HIGH (-4)
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
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
https://pctoledo.org/forum/viewtopic.php?t=6465
Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
Valeu
Galera,
O que dizer da presteza de vocês?
Muitíssimo obrigado pela atenção,
Heveraldo
harbour 0.99.50
O que dizer da presteza de vocês?
Muitíssimo obrigado pela atenção,
Heveraldo
harbour 0.99.50
erro compilar xharbour0.99.70
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
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
