Página 1 de 4

func getprinters() em harbour

Enviado: 03 Mai 2010 23:31
por rosalvo rosa
Para usar a função GetPrinters() em Harbour preciso de alguma lib?

Ou existe outra função já pronta em Harbour para listar as impressoras ?


Estou compilando Harbour em MinGW.


Reformulando:

Estou iniciando em Harbour, e preciso imprimir usando impressoras, tanto matriciais como laser, mas em ambos
os casos, imprimo sempre textos.

Após uma vasculhada no forum, encontrei bons exemplos, mas as funções que são usadas, não são
compatíveis com a versão de Harbour que uso, a qual foi atualizada em jan/2010. Já constatei que
GetPrinters() foi substituída por win_printerlist(), mas quando compilo, o Harbour me diz que não
foi encontrado nenhuma referencia sobre elas.

Como preciso imprimir somente textos, nada gráfico, qual minha melhor opção?




Agradeço a colaboraçao dos amigos.

Rosalvo

Re: func getprinters() em harbour

Enviado: 04 Mai 2010 18:48
por toninhofwi
Olá.

Você precisa da HBWin.LIB.

A função é esta: WIN_PrinterList()

o melhor é consultar os exemplos que tem na HBWIN porque há parâmetros que esta função aceita.

Se deseja usar a mesma sintaxe que usava no xharbour, use a XHB.LIB.

Toninho.

Re: func getprinters() em harbour

Enviado: 04 Mai 2010 20:00
por rosalvo rosa
Tentei localizar a Hbwin.lib mas não encontrei.


Enquanto isso, preciso então imprimir na Printer Default mesmo.

Como eu faço para imprimir o "arquivo.txt" na impressora default ?

Como postei lá na primeira, eu estou usando o Harbour de jan//2010 com MinGW.

Quem pode me ajudar ??

Re: func getprinters() em harbour

Enviado: 04 Mai 2010 22:36
por sygecom
rosalvo rosa escreveu:Tentei localizar a Hbwin.lib mas não encontrei.
Como está usando Mingw procure por libhbwin.a
Enquanto isso, preciso então imprimir na Printer Default mesmo.
Como eu faço para imprimir o "arquivo.txt" na impressora default ?
Pode usar assim:
WIN_PRINTFILERAW( WIN_PRINTERGETDEFAULT() , "arquivo.txt", "Impressao de Conhecimento de Transporte" )
Todas as funções WIN_ depende que seja linkado a libhbwin.a

Código: Selecionar todos

       WIN_PRINTEREXISTS()     (antigo nome: PRINTEREXISTS())
        WIN_PRINTERSTATUS()     (antigo nome: XISPRINTER())
        WIN_PRINTERPORTTONAME() (antigo nome: PRINTERPORTTONAME())
        WIN_PRINTERLIST()       (antigo nome: GETPRINTERS())
        WIN_PRINTERGETDEFAULT() (antigo nome: GETDEFAULTPRINTER())
        WIN_PRINTERSETDEFAULT() (antigo nome: SETDEFAULTPRINTER())
        WIN_PRINTFILERAW()      (antigo nome: PRINTFILERAW())

Re: func getprinters() em harbour

Enviado: 04 Mai 2010 23:44
por rosalvo rosa
Agora sim, esta lib vem junto com o Harbour. Beleza....

Vou linkar agora mesmo...

Valeu Leonardo, muito obrigado mais uma vez.


Rosalvo

Re: func getprinters() em harbour

Enviado: 05 Mai 2010 16:01
por rosalvo rosa
Pessoal, eu já estou usando e compilando todas as funções que o Leonardo postou, todas funcionando ...

O que acontece é que o "arquivo.txt" vai para o spooler da impressora e a mesma trava.

Testei em mais de uma impressora e deu a mesma coisa. Será que tem algum comando antes da função para que possa imprimir ??

A Quem ajudar agradeço ...


Att,


Rosalvo

Re: func getprinters() em harbour

Enviado: 05 Mai 2010 16:06
por Itamar M. Lins Jr.
Não pode usar "raw" em impressoras "for windows" tem que usar a classe win_prn().

Saudações,
Itamar M. Lins Jr.

Re: func getprinters() em harbour

Enviado: 05 Mai 2010 17:23
por rosalvo rosa
Ok, Itamar!

Então como ficaria a edição da Win_prn para Harbour + MinGw ?

Re: func getprinters() em harbour

Enviado: 05 Mai 2010 17:28
por Itamar M. Lins Jr.
Tem várias formas.
Mas vou colocar uma que uso:

Código: Selecionar todos

*********************************
Function PrintWinPrn(cArq,cPrint)
*********************************
*
*
Local oPrn, aPrn:=GetPrinters(), n := 0
if empty(aPrn)
   MsgInfo('Não há impressoras instaladas')
   return .f.
endif
If cPrint == Nil
 cPrint := GetDefaultPrinter()
EndIf
   
oPrn := win_prn():New(cPrint)
oPrn :LandScape := .f.
oPrn :FormType  := FORM_A4
oPrn :Copies    :=  1
oPrn:CharSet(255)
oPrn:setfont('Courier New',,12,,,,255)

if !oPrn:Create()
    MsgInfo("Não foi criado documento")
    return nil
EndIf
if !oPrn:startDoc("Imprimindo Documento")
	MsgInfo("Erro na Impressora")
	return nil
EndIf

HB_CDPSelect("PT850")
  setprc(5,0)
  cText := memoread(cArq) 
  nLinh := mlcount(cText)
  For n := 1 to nLinh
	  oPrn:TextOut(ansitooem(memoline(cText,,n)),.t.)
  Next
  oPrn:EndDoc()

HB_CDPSelect( "PTISO") 
  
Return .t.
Dessa forma podemos trabalhar com Gregos e Troianos, se bem que na Grecia o bixo tá pegando...

Saudações,
Itamar M. Lins Jr.

Re: func getprinters() em harbour

Enviado: 05 Mai 2010 17:37
por rosalvo rosa
Ok. Tem algum include para FORM_A4 ?

E quanto a ANSITOOEM ?

Tem lib ?

Re: func getprinters() em harbour

Enviado: 05 Mai 2010 17:40
por Itamar M. Lins Jr.
Ops!

Código: Selecionar todos

#include 'hbcompat.ch'
#define FORM_A4 9
#define FORM_LT 1
Eu uso o Harbour do SVN.
Mas essa função tem no xHarbour.

Saudações,
Itamar M. Lins Jr.

Re: func getprinters() em harbour

Enviado: 05 Mai 2010 17:43
por Itamar M. Lins Jr.
O ansitooem é para imprimir os acentos corretamente. Inclusive na LX300.
Pode tirar se desejar.

Saudações,
Itamar M. Lins Jr.

Re: func getprinters() em harbour

Enviado: 05 Mai 2010 17:48
por rosalvo rosa
Eu estou trabalhando com Harbour também, só que ele não encontrou referencia sobre esta função.

Será que não tem ela para linkar como um .prg ?

Re: func getprinters() em harbour

Enviado: 05 Mai 2010 17:52
por Itamar M. Lins Jr.
Oi, linkou as xHB, hbWin ?
Obs! não necessáriamente nessa mesma ordem.

Saudações,
Itamar M. Lins Jr.

Re: func getprinters() em harbour

Enviado: 05 Mai 2010 17:55
por rosalvo rosa
Beleza, só alegria. Muito obrigado Itamar.

Valeu mesmo.

Um abraço.

Rosalvo