Win32prn de maneira fácil

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

Moderador: Moderadores

Marcelo Justino
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 16 Jan 2007 13:51

Win32prn de maneira fácil

Mensagem 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.
Avatar do usuário
Sergio_ASSilva
Usuário Nível 2
Usuário Nível 2
Mensagens: 92
Registrado em: 09 Mar 2006 10:58
Localização: Santo Estevão (Ba)

Mensagem 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+
Clipper 5.3a/Blinker 7/DBFNTX
And
Usuário Nível 3
Usuário Nível 3
Mensagens: 163
Registrado em: 25 Set 2005 18:31
Localização: São Paulo/SP

Mensagem por And »

Valeu!!!

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

Mensagem 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 :(
And
Usuário Nível 3
Usuário Nível 3
Mensagens: 163
Registrado em: 25 Set 2005 18:31
Localização: São Paulo/SP

Mensagem por And »

Mesmo assim valeu!


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

Mensagem 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
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Mensagem 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.
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)
heveraldo
Usuário Nível 2
Usuário Nível 2
Mensagens: 72
Registrado em: 16 Jun 2006 17:15

Racunho

Mensagem por heveraldo »

Olá a todos,

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
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Mensagem por Hasse »

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)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
heveraldo
Usuário Nível 2
Usuário Nível 2
Mensagens: 72
Registrado em: 16 Jun 2006 17:15

Valeu

Mensagem por heveraldo »

Galera,

O que dizer da presteza de vocês?

Muitíssimo obrigado pela atenção,

Heveraldo


harbour 0.99.50
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
heveraldo
Usuário Nível 2
Usuário Nível 2
Mensagens: 72
Registrado em: 16 Jun 2006 17:15

erro compilar xharbour0.99.70

Mensagem 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
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem 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 !!
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder