Win32Prn no Harbour
Moderador: Moderadores
-
DLZ
- Usuário Nível 3

- Mensagens: 184
- Registrado em: 09 Jun 2008 10:09
- Localização: Ibirubá - RS - Brasil
Win32Prn no Harbour
Olá amigos..
Tenho um sistema compilado com Xharbour 1.0 e Bcc55 que utiliza o Win32Prn e funciona tudo perfeitamente.
Baixei o Harbour 1.01 para fazer alguns testes com a GtWvg. Quando fui compilar esse mesmo sistema com o Harbour, retorna um erro dizendo que não encontrou as funções :
_HB_FUN_CREATEOBJECT
_HB_FUN_SETLASTKEY
_HB_FUN_GETPRINTERS
_HB_FUN_GETDEFAULTPRINTER
_HB_FUN_WIN32PRN
_HB_FUN_WIN32BMP
Utilizo o Hbmake para compilar..
Qual seria a causa do problema ?? a mim parece a falta de alguma lib. Se eu olhar no manual do Xharbour, la consta que essas funções fazem parte da Xhb.lib, mas no Harbour, qual a lib que contém essas funções ?
Tenho um sistema compilado com Xharbour 1.0 e Bcc55 que utiliza o Win32Prn e funciona tudo perfeitamente.
Baixei o Harbour 1.01 para fazer alguns testes com a GtWvg. Quando fui compilar esse mesmo sistema com o Harbour, retorna um erro dizendo que não encontrou as funções :
_HB_FUN_CREATEOBJECT
_HB_FUN_SETLASTKEY
_HB_FUN_GETPRINTERS
_HB_FUN_GETDEFAULTPRINTER
_HB_FUN_WIN32PRN
_HB_FUN_WIN32BMP
Utilizo o Hbmake para compilar..
Qual seria a causa do problema ?? a mim parece a falta de alguma lib. Se eu olhar no manual do Xharbour, la consta que essas funções fazem parte da Xhb.lib, mas no Harbour, qual a lib que contém essas funções ?
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Win32Prn no Harbour
Buenas Dercio,
Primeiro quero lhe agradecer pelas dicas com a WIN32BMP esta rodando que é um beleza !!!
Antes de compilar com Harbour, já atualize para a versão beta mais recente, esta muito boa e pode baixar no link abaixo:
http://sourceforge.net/project/download ... a1-win.exe
Para usar as funções citadas por você, você tem que linkar as seguintes LIB:
hbct hbwin xhb
Para usar a WIN32PRN no Harbour muda um pouco, apenas onde esta: win32prn():New("NOME_IMP") você muda para: win_prn():New("NOME_IMP")
E onde esta: Win32BMP():new() você muda para: Win_BMP():new()
No resto fica tudo igualzinho !!!
E para compilar use o hbmk2 que esta muito facil de compilar tanto para windows como para linux !!!
Primeiro quero lhe agradecer pelas dicas com a WIN32BMP esta rodando que é um beleza !!!
Antes de compilar com Harbour, já atualize para a versão beta mais recente, esta muito boa e pode baixar no link abaixo:
http://sourceforge.net/project/download ... a1-win.exe
Para usar as funções citadas por você, você tem que linkar as seguintes LIB:
hbct hbwin xhb
Para usar a WIN32PRN no Harbour muda um pouco, apenas onde esta: win32prn():New("NOME_IMP") você muda para: win_prn():New("NOME_IMP")
E onde esta: Win32BMP():new() você muda para: Win_BMP():new()
No resto fica tudo igualzinho !!!
E para compilar use o hbmk2 que esta muito facil de compilar tanto para windows como para linux !!!
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
wagner aragao
- Usuário Nível 2

- Mensagens: 58
- Registrado em: 30 Jan 2008 02:06
- Localização: PORTO VELHO-RONDÔNIA
Re: Win32Prn no Harbour
Olá,
Estou tendo problemas com Win32Prn no xHarbour com a seguinte situação : Como tenho centenas de relatórios no meu sistema, quando migrei de clipper para xH, não converti um por um, como tinha funções genérica para gerar os relatórios criei dentro dessas funções uma que gera relatório utilizando essa classe apos ser gerado um arquivo DBF com os dados do relatorio. Só que de vez em quando em impressoras da mesma marca, simplesmente o mesmo relatorio sai desconfigurado. Ou seja em uma impressora HP Laser em um cliente funciona em outro o mesmo relatorio sai desconfigurado, torto, etc... Alguém sabe se pode ser versão do windows, DLL, ou o que
Abaixo as funções que uso para impressão :
Estou tendo problemas com Win32Prn no xHarbour com a seguinte situação : Como tenho centenas de relatórios no meu sistema, quando migrei de clipper para xH, não converti um por um, como tinha funções genérica para gerar os relatórios criei dentro dessas funções uma que gera relatório utilizando essa classe apos ser gerado um arquivo DBF com os dados do relatorio. Só que de vez em quando em impressoras da mesma marca, simplesmente o mesmo relatorio sai desconfigurado. Ou seja em uma impressora HP Laser em um cliente funciona em outro o mesmo relatorio sai desconfigurado, torto, etc... Alguém sabe se pode ser versão do windows, DLL, ou o que
Abaixo as funções que uso para impressão :
Código: Selecionar todos
f
unction SENDPRINT()
*****************************************************
* Apresenta tela para escolha do Destino da Impressao
* OBS : Usa variavel global DEST
** Essa função é a chamada prinicipal do relatorio, todo relatório chama ela
*****************************************************
public oUSB := .F., ARQ_NEW
HB_BackGroundDel( nTask )
DEST = SelecPrint()
do case
case lastkey()=27 .OR. DEST = "0"
return(.f.)
case DEST = "Monitor"
*** Monitor ***
abre_prn(.f.)
return(.t.)
case DEST = "Arquivo"
*** Arquivo ***
abre_prn(.t.)
return(.t.)
case DEST = "USB"
*** USB ***
oUSB := .T.
abre_prn(.f.)
return(.T.)
OTHERWISE
set print to &DEST
if !impressora()
return(.f.)
endif
endcase
return(.t.)
function ABRE_PRN( GeraTXT )
****************************
* Fecha Arquivo de relatorio
* GeraTXT=Parametro que indica se gera(.f.) ou nao (.t.) arquivo
****************************
local ARQ_ANT
if empty( GeraTXT )
GeraTXT = .F.
endif
ARQ_ANT = dbf()
public ARQ_DBF, ARQ_PRN
tela_ttt = savescreen( 0, 0, 24, 79 )
if !GeraTXT
ARQ_DBF='C:\TEMP\PRN'+trim(left(vUSUARIO,4))
ARQ_PRN='C:\TEMP\PRN'+trim(left(vUSUARIO,4)) + '.PRN'
*** Apagando arquivo de transacao ***
if file( 'C:\TEMP\PRN'+trim(left(vUSUARIO,4)) + '.DBF')
ferase( 'C:\TEMP\PRN'+trim(left(vUSUARIO,4)) + '.DBF' )
endif
*** Abre o arquivo padrao do sistema ***
if !netuse('STRU_PRN',.f.)
return(.f.)
endif
else
ARQ_NEW = space(8)
DIR_NEW = "C:\TEMP\" + space(30)
quadro( '10','10','15','68',' Geracao de arquivo texto ','W+/B')
@ 12,12 say ' Nome do arquivo ' get ARQ_NEW pict '@!' valid !empty(ARQ_NEW)
@ 13,12 say 'Diretorio de destino ' get DIR_NEW pict '@!S25' valid !empty(DIR_NEW)
read
DIR_NEW = alltrim(DIR_NEW)
*** Verifica se o diretorio existe
if !isDir( DIR_NEW ) .or. lastkey()=27
msgAlert( 'O diretorio ' + DIR_NEW + ' NAO existe!')
ARQ_PRN = '#' // Sinaliza que nao foi gerado o arquivo
if !empty(alltrim(ARQ_ANT))
sele (ARQ_ANT)
endif
return(.f.)
endif
ARQ_NEW = alltrim(ARQ_NEW)
if right( alltrim(DIR_NEW), 1 ) <> '\'
DIR_NEW = alltrim(DIR_NEW) + '\'
endif
ARQ_DBF = alltrim(DIR_NEW) + alltrim(ARQ_NEW) + '.DBF'
ARQ_PRN = alltrim(DIR_NEW) + alltrim(ARQ_NEW) + '.TXT'
if lastkey() == 27
if !empty(ARQ_ANT)
sele (ARQ_ANT)
endif
ARQ_PRN = "#" // Sinaliza que nao foi gerado o arquivo
return(.f.)
endif
*** cria estrutura para TXT ***
VetorStru = {}
aadd( VetorStru, { 'L1' , 'C' ,150, 0 })
aadd( VetorStru, { 'L2' , 'C' , 01, 0 })
aadd( VetorStru, { 'L3' , 'C' , 01, 0 })
aadd( VetorStru, { 'DT_BLOQ' , 'D' , 08, 0 })
aadd( VetorStru, { 'HORA_BLOQ', 'C' , 08, 0 })
aadd( VetorStru, { 'MAQ_BLOQ' , 'C' , 10, 0 })
aadd( VetorStru, { 'QUEMBLOQ' , 'C' , 15, 0 })
aadd( VetorStru, { 'ROTINA' , 'C' , 08, 0 })
DbCreate('&ARQ_DBF',VetorStru)
use (ARQ_DBF) alias DADOSPRN new exclu
endif
if select('DADOSPRN')>0
if select('STRU_PRN')>0
sele STRU_PRN
use
endif
sele DADOSPRN
zap
else
copy stru to (ARQ_DBF)
use
*** Usa o ALIAS de DADOSPRN ***
use (ARQ_DBF) alias DADOSPRN new exclu
endif
Restscreen( 0, 0, 24, 79, tela_ttt)
set conso off
set device to print
set printer to (ARQ_PRN)
if !empty(alltrim(ARQ_ANT))
sele (ARQ_ANT)
endif
return(.t.)
function ClosePrint()
*******************************
* Encerra a sessao de impressao
*** Fecha relatorio e gera o arquivo para impressao
*******************************
do case
case DEST = "Monitor"
*** Monitor ***
fecha_prn(.t.)
case DEST = "Arquivo"
*** Arquivo ***
if ARQ_PRN = "#"
sele STRU_PRN
use
retu
endif
fecha_prn(.f.)
use (ARQ_DBF) alias DADOSPRN new exclu
sele DADOSPRN
centra_msg(24,"EXPORTANDO ARQUIVO: " + ARQ_PRN)
do while !eof()
repla L1 with RemoveMarcas( L1, .F. ),;
L2 with RemoveMarcas( L2, .F. ),;
L3 with RemoveMarcas( L3, .F. )
skip
enddo
go top
vArqTxt := fcreate( ARQ_PRN , 0)
if ferror()<>0
msgalert('Erro na criacao do arquivo...')
endif
do while !eof()
vLINHATXT = iif(recno()=1,chr(20),'')+rtrim(L1)+chr(13)+chr(10)
fwrite( vArqTxt, @vLINHATXT, len( vLINHATXT ) )
skip
enddo
fclose(vArqTXT)
*** Tirar espaco em branco final de cada linha ***
*** copy to (ARQ_PRN) fields L1 sdf
*** use
MsgAlert("Foi gerado o relatorio em: " + ARQ_PRN, "Atencao" )
sele DADOSPRN
use
Other
Desl_Imp()
endcase
return(.t.)
function FECHA_PRN( GeraTXT )
****************************
* Fecha Arquivo de relatorio
* GeraTXT=Sinaliza se gera (.f.) ou nao (.t.) um arquivo texto
****************************
private VT1[3], VT2[3], VT3[3], TELA_ANT, COR_ANT
F9:=F10:=.t.
vTEXTO=spac(20)
if pcount()=0
GeraTXT=.t.
endif
if 'LPT' $ DEST
set print off
set printer to
endif
set device to scree
set conso on
*** MSGALERT('CONTEUDO DE DEST='+DEST)
if select('DADOSPRN')=0
msgalert('O Arquivo de relatorio NAO foi aberto provavel erro na criacao...')
return(.f.)
endif
sele DADOSPRN
appe from (ARQ_PRN) sdf
go top
TELA_ANT=savescreen(04,00,23,79)
COR_ANT =setcolor()
PROG='Edicao '
** preenche os vetores com os nome dos campos a serem mostrados
VT1[01]='L1'
VT1[02]='L2'
VT1[03]='L3'
** Mascaras de formatacao
VT2[01]=''
VT2[02]=''
VT3[03]=''
** Cabecalhos
VT3[01]=''
VT3[02]=''
VT3[03]=''
limpa(24)
setcolor('GR+/B')
@ 04,00 to 22,79
@ 22,01 say ' <A-Z>=Busca Texto <Alt+L>=Continua Busca <Alt+P>=Imprime <ESC> P/Sair '
dbedit(05,01,21,78,VT1,'FUNCPRN',VT2,VT3,'','³')
restscreen(04,00,23,79,TELA_ANT)
setcolor(COR_ANT)
sele DADOSPRN
use
ALTF1=.F.
F9:=F10:=.f.
return(.t.)
function FUNCPRN(MODE,PONTEIRO,PROGRAMA)
*******************************
* FUNCAO p/DBEDIT EM RELATORIOS
*******************************
static GETLIST:={}
local COR_ANT, TELA_ANT, ARQ_ANT, TEXTO
priva POS_CURSOR,REGISTRO
public oUSB := .F.
POS_CURSOR=VT1[PONTEIRO]
Barra_rol( 05, 21, 79 , recno(), recco())
do case
case MODE=0
return(1)
case MODE=3
mensagem('Arquivo SEM registro...')
return(1)
case lastkey()=281
*** <ALT + P> = Imprime o relatorio da tela ***
COR_ANT=setcolor()
save scree to TELA_ANT
ESCOLHA=MsgAlert('Que tipo de relatorio ? ','Atencao',{' Completo ',' A partir daqui '})
**ONDE =MsgAlert('Confirma Impressao do Relatorio ? ','Atencao',{' Retorna ',' LPT1 ',' LPT2 ','USB'})
ONDE = SelecPrint()
do case
case ONDE = "0"
resto scree from TELA_ANT
setcolor(COR_ANT)
return(2)
case ONDE = "Monitor"
case ONDE = "Arquivo"
case ONDE = "USB"
oUSB := .T.
otherwise
setcolor(COR_ANT)
resto scree from TELA_ANT
set print to &ONDE
?? chr(15)
endcase
if ESCOLHA=1
go top
endif
do while !eof()
@ prow(),00 say L1+L2+L3
skip
enddo
Desl_Imp()
resto scree from TELA_ANT
setcolor(COR_ANT)
return(2)
case lastkey()>=65 .and. lastkey()<=122 .or. lastkey()>=48 .and. lastkey()<=57
set curs on
COR_ANT=setcolor()
save scree to TELA_ANT
quadro('10','15','14','65',' Consulta ','W+/G+')
limpa(24)
centra_msg(24,'Digite o Texto a Ser Consultado ou <ESC> para retornar')
@ 12,17 say 'Texto a Ser Procurado Äþ ' get vTEXTO
read
setcolor(COR_ANT)
if lastkey()=27
resto screen from TELA_ANT
return(1)
endif
NAOACHOU=.f.
loca for trim(vTEXTO) $ L1
if eof()
NAOACHOU=.t.
loca for trim(vTEXTO) $ L2
if eof()
NAOACHOU=.t.
loca for trim(vTEXTO) $ L3
if eof()
NAOACHOU=.t.
else
NAOACHOU=.f.
endif
else
NAOACHOU=.f.
endif
endif
if NAOACHOU
mensagem('Dados informado NAO localizado...')
endif
resto screen from TELA_ANT
return(2)
case lastkey()=294
**** Continua busca ***
cont
return(2)
case lastkey()=27
return(0)
otherwise
* continua execucao
return(1)
endcase
return(1)
function SelecPrint()
************************************
* Funcao para selecao de impressoras
************************************
LOCAL vaPrinter, i, vnAch, acPrinter, cRet, cCor,;
acPrn, acPrnSel, vcTela
PUBLIC xPrinter
cCor := setcolor()
*** Pego o nome da impressora padrao
acPrinter := GetDefaultPrinter()
*** Pego a lista de todas a impressoras configuradas
vaPrinter := GetPrinters()
*** Mantenho a padrao para retorno
cRet := acPrinter
*** Se nao tem nenhuma, mostra mesagem, mas Continua
If Empty( vaPrinter )
msgalert("Nenhuma impressora instalada")
EndIf
*** Preparo os arrays
vaPrinter := GetPrinters(.t.)
acPrn := {}
acPrnSel := {}
*** Laco para montar o array com
*** todas as impressoras
For i:= 1 TO Len(vaPrinter)
if acPrinter = vaPrinter[i,1] // Se for a padrao
*** Coloca um (P) antes do nome
AADD(acPrn,"(P) "+vaPrinter[i,1]+' em '+vaPrinter[i,2])
else
*** Armazena as outras
AADD(acPrn," "+vaPrinter[i,1]+' em '+vaPrinter[i,2])
endif
*** Monta um array secundario
AADD(acPrnSel,vaPrinter[i,1])
Next
*** Adiciona itens extras aos arrays
AADD(acPrn," "+"(Monitor)")
AADD(acPrnSel,"Monitor")
AADD(acPrn," "+"(Arquivo)")
AADD(acPrnSel,"Arquivo")
*** Monta a janela para selecao
vcTela = savescreen(09, 14, 21, 67)
setcolor("n/w,w+/g")
@ 09, 14 clear to 21,67
@ 09, 14 say " Sele‡Æo de impressora " color "w+/r"
@ 21, 14 say " " +chr(24)+chr(25)+": Movimenta | Enter: Seleciona | ESC: Cancelar " color "w+/Gr"
vnAch = achoice(10,15,20,66,acPrn,,"myFuncao")
restscreen(09, 14, 21, 67,vcTela)
*** Selecionou ou pressionou ESC
if lastkey() = 13
*** Se for USB ou de REDE ***
if "USB" $ acPrn[vnAch] .or. "ET0" $ acPrn[vnAch]
cRet := "USB"
else
*** Demais impressoras
cRet := acPrnSel[vnAch]
endif
else
*** Abandonou
cRet := "0"
endif
if lastkey() <> 27
if ! acPrnSel[vnAch] $ "Monitor|Arquivo"
PrintOnLine(acPrnSel[vnAch])
endif
*** Passa o nome da impressora para uma variavel publica
*** para ser utilizada depois
xPrinter = acPrnSel[vnAch]
*** msgalert('impressora retornada '+xPrinter)
else
cRet = "0"
endif
Setcolor(cCor)
Return(cRet)
function myFuncao()
****************************
* Funcao de apoio do achoice
****************************
Local vnRetorno
do case
case lastkey() = 19 .or. lastkey() = 4
vnRetorno := 2
case lastkey() = 13 .or. lastkey() = 16
vnRetorno := 1
case lastkey() = 27
vnRetorno := 0
otherwise
vnRetorno := 2
endcase
return(vnRetorno)
Function PrintOnLine(vcPrintOn)
*****************************************
* Funcao para verificar o
* status da impressora
* selecionada, local ou em rede
*****************************************
local nStatus := PrintStat(vcPrintOn)
If nStatus > 0
MsgAlert("Condicao da impressora: " + IsImpressora(vcPrintOn))
endif
Return(.t.)
function IsImpressora( QuePrinter )
*****************************************
* Funcao para retornar a mesnagem de
* status da impressora
*****************************************
LOCAL nStatus
nStatus := PrintStat( QuePrinter )
if nStatus < 1 ; return "OK"
elseif nStatus = 1 ; return "Impressora Pausada"
elseif nStatus = 2 ; return "Impressora com Erro"
elseif nStatus = 4 ; return "Impressora Deletando"
elseif nStatus = 8 ; return "Impressora em Modo Bandeja"
elseif nStatus = 16 ; return "Impressora Sem Papel"
elseif nStatus = 32 ; return "Impressora em Modo Manual"
elseif nStatus = 64 ; return "Impressora com Problema no Papel"
elseif nStatus = 128 ; return "Impressora OffLine"
elseif nStatus = 256 ; return "Impressora com IO Ativo"
elseif nStatus = 512 ; return "Impressora Ocupada"
elseif nStatus = 1024 ; return "Impressora Imprimindo"
elseif nStatus = 2048 ; return "Impressora Memoria Lotada"
elseif nStatus = 4096 ; return "Impressora Nao Instalada"
elseif nStatus = 8192 ; return "Impressora Aguardando"
elseif nStatus = 16384 ; return "Impressora Processando"
elseif nStatus = 32768 ; return "Impressora Inicializando"
elseif nStatus = 65536 ; return "Impressora em Atencao"
elseif nStatus = 131072 ; return "Impressora Toner Baixo"
elseif nStatus = 262144 ; return "Impressora Sem Toner"
elseif nStatus = 524288 ; return "Impressora PAGE_PUNT"
elseif nStatus = 1048576 ; return "Impressora Intervencao do Usuario"
elseif nStatus = 2097152 ; return "Impressora Sem Memoria"
elseif nStatus = 4194304 ; return "Impressora Tampa Aberta"
elseif nStatus = 8388608 ; return "Impressora Servidor Desconhecido"
elseif nStatus = 16777217 ; return "Impressora POWER_SAVE"
endif
return(nil)
Function PrintUSB(DocPrinter)
******************************************
* Funcao para impressao em impressoras USB
*
* Retorna .t. se bem sucedido
* .f. se falhou
******************************************
/******************************************
Tabela para tamanho de papel
LETTER 1 US Letter format 8 1/2 x 11 inch
LEGAL 5 US Legal format 8 1/2 x 14 inch
A3 8 DIN A3 format 297 x 420 mm
A4 9 DIN A4 format 210 x 297 mm
Tabela para oPrinter:bold
DONTCARE 0 // THIN 100
EXTRALIGHT 200 // LIGHT 300
NORMAL 400 // MEDIUM 500
SEMIBOLD 600 // BOLD 700
EXTRABOLD 800 // HEAVY 900
Tabela de Set de Caracteres
ANSI_CHARSET 0
DEFAULT_CHARSET 1 (default)
SYMBOL_CHARSET 2
SHIFTJIS_CHARSET 128
HANGEUL_CHARSET 129
HANGUL_CHARSET 129
GB2312_CHARSET 134
CHINESEBIG5_CHARSET 136
OEM_CHARSET 255
JOHAB_CHARSET 130
HEBREW_CHARSET 177
ARABIC_CHARSET 178
GREEK_CHARSET 161
TURKISH_CHARSET 162
VIETNAMESE_CHARSET 163
THAI_CHARSET 222
EASTEUROPE_CHARSET 238
RUSSIAN_CHARSET 204
Tabela de Constantes de formatação de impressora
ON_F20 = 'M'+chr(15)
OFF_F20 = 'P'+chr(18)
ON_EXPANDE = chr(14)+chr(15)
ON_18 = chr(18)
ON_20X15 = chr(20)+chr(15)
ON_15 = chr(15)
ON_12 = chr(12)+chr(13)
ON_NEGRO = chr(27)+'E'
OFF_NEGRO = chr(27)+'F'
*******************************************/
Local mDocPrint, vDocPrint, nA, nLand, nLin := 1, nTamPag, cMsg, ;
vPosi, nTamLin, ON_F20, OFF_F20, ON_EXPANDE, ON_18, ;
ON_20X15, ON_15, ON_12
Private oPrinter
oPrinter := Win32Prn():new( xPrinter ) // Crio a instancia da impressora
*** Leio o arquivo gerado do diretorio temp ou outro qualquer
*** mDocPrint = MemoRead(DocPrinter)
mDocPrint = ''
*** Verifica se vai imprimir em Retrato (nLand=.f.)
*** ou Paisagem (nLand=.t.)
nLand := .f.
nTamLin := 229
nTamPag := 64 // 64 Linhas em modo Retrato ou 45 em modo Paisagem
ON_F20 := 'M'+chr(15)
OFF_F20 := 'P'+chr(18)
ON_EXPANDE := chr(14)+chr(15)
ON_18 := chr(18)
ON_20X15 := chr(20)+chr(15)
ON_15 := chr(15)
ON_12 := chr(12)+chr(13)
ON_NEGRO := chr(27)+'E'
OFF_NEGRO := chr(27)+'F'
*** Mostra mensagem no rodape
cMsg := iif(nLand,"Imprimindo em modo Paisagem","Imprimindo..")
nA := len(cMsg)
nA := int((80-nA)/2)
@ 24, nA say cMsg color "gr+/n"
oPrinter:landscape := nLand
oPrinter:formType := 9 // Papel A4 - Ver tabela acima
oPrinter:copies := 1 // Numero de copias
*** oPrinter:charSet( 0 ) // Ver tabela acima
*** Cria dispositivo de impressao
If .not. oPrinter:create()
MsgAlert( "Nao foi possivel criar o dispositivo de impressao" )
return(.f.)
EndIf
*** Criar trabalho de impressao
*** MSGALERT('DOCPRINTER='+DOCPRINTER)
If .not. oPrinter:startDoc( DocPrinter ) // Encarrega o spooler para comecar com um novo documento
MsgAlert( "Nao foi possivel criar o documento" )
return(.f.)
EndIf
*** Cria a fonte padrão
oPrinter:setfont("Courier", 10, 14) // Expandido
oPrinter:bold( 600 )
vPosi := 1
*** Laco para imprimir linha por linha
sele DADOSPRN
go top
for nA := 1 to recco()
vDocPrint := L1+L2+L3
vPosi := vPosi + 229 + 1
*** Formata a Fonte de Caracteres da Impressora
If ON_F20 $ vDocPrint // Compacta 'M'+chr(15)
oPrinter:setfont("Courier",6.5,22)
oPrinter:bold( 0 )
vDocPrint := StrTran(vDocPrint,ON_F20,"")
endif
If OFF_F20 $ vDocPrint // Descompacta 'P'+chr(18)
oPrinter:setfont("Courier",6.5,18)
oPrinter:bold( 0 )
vDocPrint := StrTran(vDocPrint,OFF_F20,"")
Endif
If ON_15 $ vDocPrint // Muito Compactado - chr(15)
oPrinter:setfont("Courier",6.5,22)
oPrinter:bold( 0 )
EndIf
If ON_18 $ vDocPrint // Compactado - chr(18)
oPrinter:setfont("Courier",8,12)
oPrinter:bold( 0 )
EndIf
If ON_20X15 $ vDocPrint .or.; // Compactado - chr(20)+chr(15)
ON_NEGRO $ vDocPrint
vDocPrint := StrTran(vDocPrint,ON_NEGRO,"")
oPrinter:setfont("Courier",6.5,18)
oPrinter:bold( 200 )
EndIf
If ON_12 $ vDocPrint // ON_12 - chr(12)+chr(13) = EJECT
vTexto := substr(vDocPrint,1,at(ON_12,vDocPrint)-1) // Imprime somente ate ao CR
vDocPrint := substr(vDocPrint,at(ON_12,vDocPrint)+1) // Guarda o restante da linha
vTexto := RemoveMarcas(vTexto)
oPrinter:textOut(rTRIM(vTexto)) // Imprime a linha ate o CR
oPrinter:newPage()
nLin := 1
If ON_EXPANDE $ vDocPrint // Expandido - chr(14)+chr(15)
oPrinter:setfont("Courier",10,14)
oPrinter:bold( 600 )
endif
EndIf
If ON_EXPANDE $ vDocPrint // Expandido - chr(14)+chr(15)
oPrinter:setfont("Courier",10,14)
oPrinter:bold( 600 )
Endif
*** Remove todo e qualquer caractere especial
*** menor que 32 ou maior que 125 (asc)
vDocPrint := RemoveMarcas(vDocPrint)
oPrinter:textOut(rTRIM(vDocPrint)) // Imprime a linha
oPrinter:newLine() // Insere uma nova linha
oPrinter:setfont("Courier",6.5,22)
oPrinter:bold( 0 )
*** Verifica se chegou no final da pagina
nLin ++
if nLin > nTamPag
nLin := 1
oPrinter:newPage() // Salta a página - eject
endif
*** coloquei para testar com DBF
skip
next
*** Envia saida para impressora
oPrinter:endDoc()
*** Encerra a impressao e destroi o objeto
oPrinter:destroy()
Set Printer To
Return(.t.)
Function RemoveMarcas(mTexto)
*****************************
* Remove caracteres especiais
* Retorna uma string sem
* os caracteres especiais
*****************************
Local vT, vRetornaTexto, vTemp
vRetornaTexto := ''
for vT := 1 to len(mTexto)
vTemp = substr( mTexto, vT, 1 )
if asc(vTemp) <= 31 .or. asc(vTemp) >= 126
loop
endif
vRetornaTexto := vRetornaTexto + vTemp
next
Return(vRetornaTexto)
xHarbour 1.2.3 Simplex / xDev 0.70 / LetoDB 2.15b37 / HWGUI 2.17 / xDesigner (LF Basso)
-
jcdatrindade
- Usuário Nível 1

- Mensagens: 9
- Registrado em: 13 Mai 2011 10:06
- Localização: Araxa / MG
Win32Prn no Harbour
Amigo Sygecon
Devo ganhar o trofeu "Pá de Ouro" ao desenterrar esse tópico.
tô tendo probllema em portar do xHarbour 1.2.1 para o Harbour 3.0
justamente com o win32prn
tá dando esse erro na linkedicao
Compiling: pedidos.hbp...
hbmk2: Linkando... pedidos.exe
Error: Unresolved external '_HB_FUN_GETPRINTERS' referenced from C:\DRIVE_E\ADMIN\ADM\.HBMK\WIN\BCC\DISPREL.OBJ
Error: Unresolved external '_HB_FUN_GETDEFAULTPRINTER' referenced from C:\DRIVE_E\ADMIN\ADM\.HBMK\WIN\BCC\DISPREL.OBJ
Error: Unresolved external '_HB_FUN_WIN_PRN' referenced from C:\DRIVE_E\ADMIN\ADM\.HBMK\WIN\BCC\DISPREL.OBJ
Error: Unresolved external '_HB_FUN_FIELDSIZE' referenced from C:\DRIVE_E\ADMIN\ADM\.HBMK\WIN\BCC\ADM1601.OBJ
hbmk2: Erro: Executando linkeditor. 2
0 Files, 0 Warnings, 4 Errors
Compile time: 18.44s Link time: 0s Total time: 18.58s
já acrescentei as libs conforme você falou e o erro perciste
se bem entendi as libs são inseridas na compilação ok?
aguardo e obrigado!!!
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Win32Prn no Harbour
Ola!
GETPRINTERS => win_printerList()
GETDEFAULTPRINTER => win_printerGetDefault()
WIN_PRN => oPrn := win_prn():New(cPrint)
Fieldsize eu não achei.
Saudações,
Itamar M. Lins Jr.
GETPRINTERS => win_printerList()
GETDEFAULTPRINTER => win_printerGetDefault()
WIN_PRN => oPrn := win_prn():New(cPrint)
Fieldsize eu não achei.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Win32Prn no Harbour
Acho que tem na lib HBCT do Harbour.Itamar M. Lins Jr. escreveu:Fieldsize eu não achei.
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
-
jcdatrindade
- Usuário Nível 1

- Mensagens: 9
- Registrado em: 13 Mai 2011 10:06
- Localização: Araxa / MG
Win32Prn no Harbour
Valeu pessoal
Funcionou beleza.
Agora, é meio fora desse topico mas tô precisando de um parametro para forçar a recompilacao de tudo
no hbmake eu usava o parametro /ex
no hbmk2 eu nao sei.
valeu
Funcionou beleza.
Agora, é meio fora desse topico mas tô precisando de um parametro para forçar a recompilacao de tudo
no hbmake eu usava o parametro /ex
no hbmk2 eu nao sei.
valeu
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Win32Prn no Harbour
Use o -rebuild ou delete a pasta .hbmk que está na pasta do seu programa.
Abraços,
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
-
jcdatrindade
- Usuário Nível 1

- Mensagens: 9
- Registrado em: 13 Mai 2011 10:06
- Localização: Araxa / MG