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

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

Moderador: Moderadores

lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

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

Mensagem 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 ]
lugab
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

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

Mensagem 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
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
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

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

Mensagem 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
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)
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

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

Mensagem por lugab »

Obrigado, Alaminojunior e Hasse.

Vou experimentar a ajuda de vcs...
lugab
Avatar do usuário
Tomaz Edson Linhares
Usuário Nível 1
Usuário Nível 1
Mensagens: 32
Registrado em: 19 Abr 2016 17:03
Localização: São Gonçalo/RJ

Função getprinters

Mensagem por Tomaz Edson Linhares »

Onde encontro a função getprinters?
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

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

Mensagem 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
[]´s
Alexandre Santos (AlxSts)
Responder