Página 1 de 1

Impresão em XH (Desculpem, ainda sou iniciante)

Enviado: 09 Jul 2009 19:54
por lugab
Ola amigos. Gostaria que vcs me passassem um fonte xharbour (modo console) , visando exibir as impressoras instaladas, selecionar uma delas e enviar para ela um arquivo a ser gerado a seguir.

Andei olhando os exemplo s aqui postados e nenhum deles serviu para mim. Então, eu posto aqui o meu fonte em clipper, para ver se alguns de vcs se interessam em me ajudar.

Código: Selecionar todos

**********
FUNC IMPR
**********
VIMP=0
SET DEVI TO SCREE
SAVE SCREE TO IMPON
@ 11,20 CLEA TO 17,33
DO WHILE .T.
   @ 11,20 TO 13,38 DOUBLE
   @ 12,21 SAY    "   Impressora "
   @ 13,20 TO 17,38 DOUBLE
   @ 14,21 PROMPT "1-Selecao         " && seleciona impressoras adicionadas
   @ 15,21 PROMPT "2-Previa           " && Ler aruivo ,TXT via browse 
   @ 16,21 PROMPT "3-For Word       " && abre o arquivo texto usando o WORD    
   MENU TO VIMP
   IF LASTKEY()=27
       vimp=2  && ESC equivale a ver previa do relatorio
   ENDIF   
   
   IF VIMP=1  && NAO SEI COMO FAZER AS TAREFAS ABAIXO:
      && 1)listar impressoras do windows, seleciona uma delas
      && 2)Se nao houver impressoras instaladas, dar MSg e redirecionar para VIMP=2
      && 3)Se o usuario teclar ESC , assumnir q ele quer VIMP=2,ou seja, Previa do    
      &&    relatorio
      
   ELSEIF VIMP=2
      SET PRINTER TO C:\SIG.PRN  && a ser aberto pelo BROWSE, via EDITPRN,PRG
      
      
   ELSEIF VIMP=3
      SET PRINTER TO C:\SIG.RTF  && a ser abert pelo WORD
   ENDIF
   EXIT
ENDDO

RETURN .T.
Apos a seleção da impressora e a geraçlão do arquivo texto, chama a rotina abaixo para
satisfazer as opcoes 2 e 3, pois a opção 1 é executada acima

Código: Selecionar todos

*****************
FUNC IMPOFF
****************
SET PRINTER OFF
SET PRINTER TO
SET DEVICE TO SCREEN
IF VIMP=3
   RUN C:\NOTEPAD.EXE /P C:\SIG.RTF  && executa o word
   VIMP=0
ELSE   
   IF VIMP=2
      VIMP=0
      DO EDITPRN   && exibe o arquivo Texto na tela
   ENDIF   
ENDIF
VIMP=0
RETU.T.
--------------------------------------
Nota da moderação:(Sygecom)
Topico editado para colocar as TAG [ CODE ]

Re: IMPRESSÃO EM XH (Desculpem, ainda sou iniciante)

Enviado: 10 Jul 2009 18:32
por alaminojunior
O que voce pode fazer é o seguinte:

1º Use a sua rotina de impressão normalmente, porém envie a impressão para um arquivo;
2º Em seguida, escolha a impressora usando a rotina abaixo:

Código: Selecionar todos

FUNC GetImp 
LOCAL aINCCLI := savescreen( 08,09,26,63 ) 
Public nPrn:= 1 
Public aPrn:= GetPrinters()
If Empty(aPrn) 
   alert("Nao encontrei nenhuma impressora instalada !!!") 
   Return .f.
else 
   @ 08,09,25,61 box B_DOUBLE + space(1) colo "n/n*" 
   @ 09,26 say "Selecione a impressora" colo "w+/n*"
   @ 24,30 say "ESC - VOLTA" colo "w+/n*"
   SETCOLOR( "n/w*,gr+/b,,,b/w*" ) 
    nPrn:= ACHOICE(11,11,15,59, aPrn,.T.,,nPrn)
endIf 
if lastkey() = K_ESC
   Restscreen(08,09,26,63,aINCCLI) 
   RETURN .f.
endif   
Restscreen(08,09,26,63,aINCCLI) 
RETURN .t.
A impressora escolhida será informada através de:

Código: Selecionar todos

aPrn[nPrn]
3º Use a seguinte função para enviar o texto para a impressora escolhida:

Código: Selecionar todos

PrintFileRaw(aPrn[nPrn],"arquivodeimpressão.extensão", "Texto que vai aparecer no spool do Windows" ) 
É isso aí meu caro.
Para mais informações sobre outros recursos, consulte o help do xHarbour, seção Win32prn.
Boa sorte

Re: IMPRESSÃO EM XH (Desculpem, ainda sou iniciante)

Enviado: 10 Jul 2009 21:39
por Hasse
Também há muita informação e exemplos no tópico abaixo (Win32prn() para iniciantes):

viewtopic.php?f=4&t=6465&st=0&sk=t&sd=a&hilit=win32prn+para+iniciantes

Re: IMPRESSÃO EM XH (Desculpem, ainda sou iniciante)

Enviado: 10 Jul 2009 23:03
por lugab
Obrigado, Alaminojunior e Hasse.

Vou experimentar a ajuda de vcs...

Função getprinters

Enviado: 03 Jun 2016 12:57
por Tomaz Edson Linhares
Onde encontro a função getprinters?

Impresão em XH (Desculpem, ainda sou iniciante)

Enviado: 03 Jun 2016 15:53
por alxsts
Olá!

Seja bem-vindo ao Fórum Tomaz!

Estas funções relativas ao Windows estão em uma lib chamada hbwin. Inclua a linha abaixo em sua compilação.

Código: Selecionar todos

-lhbwin