BEMATECH MP-4200 TH comprimir e negritar

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

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

BEMATECH MP-4200 TH comprimir e negritar

Mensagem por porter »

A impressão com PrintFileRaw, fica muito boa para impressoras térmicas por exemplo MP-4200 TH,
o problema é se quiser fazer a mesma impressão em uma impressora HP, não estou conseguindo,
pois alguns clientes usam somente HP, ai estou usando o Win32Prn().
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

BEMATECH MP-4200 TH comprimir e negritar

Mensagem por asimoes »

Porter,

Térmica X Jato de tinta sempre haverá diferença na qualidade de impressão
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

BEMATECH MP-4200 TH comprimir e negritar

Mensagem por porter »

olá Asimões,
O problema não seria a diferença de impressão,
eu não estou conseguindo sequer imprimir na HP, usando PrintFileRaw.

Harbour 3.2.0dev
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

BEMATECH MP-4200 TH comprimir e negritar

Mensagem por asimoes »

Porter tem que ver se essa impressora tem suporte a impressão formato Raw, se não, tem que usar Win_Prn()
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

BEMATECH MP-4200 TH comprimir e negritar

Mensagem por porter »

Porter tem que ver se essa impressora tem suporte a impressão formato Raw, se não, tem que usar Win_Prn()
Entrei em Propriedades da impressora, e não encontrei essa informação se tem ou não suporte a formato
Raw, existe outra forma de verificar ?
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

BEMATECH MP-4200 TH comprimir e negritar

Mensagem por asimoes »

Porter tente o manual da impressora deve ter essa informação lá, a maioria das deskjets tem, qual é o tipo dessa impressora deskjet ou laser ?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

BEMATECH MP-4200 TH comprimir e negritar

Mensagem por asimoes »

Off-topic:

Tem esse tópico da hp pode ser útil fala sobre winprint/raw

https://h30487.www3.hp.com/t5/Impressor ... d-p/275648
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
dbdc5554
Usuário Nível 3
Usuário Nível 3
Mensagens: 149
Registrado em: 03 Dez 2012 08:49
Localização: uberlandia-MG

BEMATECH MP-4200 TH comprimir e negritar

Mensagem por dbdc5554 »

OB valeu

estou fazendo com chr(15) e com 67 posicoes rs

so que acabou o papel amanha vou comprar umas bobinas e verificar como fica


Ob

Paiva
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

BEMATECH MP-4200 TH comprimir e negritar

Mensagem por porter »

Asimoes,
É uma HP DeskJet 3510 series
Olhei o tópico, não diz como verificar se tem suporte a Raw, vou ler o manual
para ver se encontro algo a respeito.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

BEMATECH MP-4200 TH comprimir e negritar

Mensagem por asimoes »

Porter,

Perguntas:

1-Tá com tinta a impressora ?
2-Já imprimiu alguma vez antes ?

Faz um teste com a função abaixo: (se faltar alguma função avisa)

Código: Selecionar todos

#include "common.ch"

FUNCTION MAIN

   IniPrint(.T.,,"PCL")

   //IniciaLaser(.T.,"19",.F.)
   
   SetImp( .T., .F. )

   ?? "TESTE DE IMPRESSAO"
   ? "TESTE DE IMPRESSAO"
   ? "TESTE DE IMPRESSAO"

   IniPrint(.F.)

RETURN Nil 

FUNCTION IniciaLaser(lInicia, cTamanho, lLand)
   
   HB_Default(@lInicia,.T.)
   HB_Default(@cTamanho,"20")
   HB_Default(@lLand,.F.)
   
   IF lInicia
      @ PROW(), PCOL() SAY Chr(27) + "%0A"
      IF lLand
         @ PROW(), PCOL() SAY CHR(27)+"&l1O"
      ELSE
         @ PROW(), PCOL() SAY Chr(27) + "&l0O" 
      ENDIF
      @ PROW(), PCOL() SAY CHR(27)+"(12U"
      @ PROW(), PCOL() SAY CHR(27)+"(s0p"+cTamanho+"h0s0b4102T"
      SetPrc(0,0)
   ENDIF

RETURN Nil

FUNCTION ImpLaser(nVer, nHor, nTam, cTexto, cTpLetra, lNegrito)
* nVer:     Posicao na VERTICAL em dots - cada 10 pontos correspondem a
*           aproximadamente 0,5 cm
* nHor:     Posicao na HORIZONTAL em dots - cada 40 pontos correspondem a
*           aproximadamente 1 Linha
* nTam:     Tamanho da letra - 1, 2, 3, 4, ..., 100
* cTexto:   Texto a ser impresso
* cTpLetra: Tipo da letra
* lNegrito: Imprime ou nao em negrito
*
* @ 00,00 SAY CHR(27)+'%0A' --> Comando e obrigatorio. Substitui o SetPrc(00,00)
*
*  %0A                     pcl mode
*  *t600R                  resolucao 600 dpi
*  &l1X                    numero de copia
*  *vT                     negrito
*  (19U                    tabela de simbolos windows 3.1 latin 1
*  (s4148t0b0s5.00v1P      (s4148t - seleciona fonte univers condensed
*                           (s0b    - (0) normal  (3) negrito
*                           (s0s    - condensed
*                           (s1P    - (1) poliespacado  (0) monoespacado
*  *p1206X                 posicionamento do cursor na Linha (em dots)
*  *p100Y                  posicionamento do cursor na Coluna (em dots)
*----------------------------------------------------------------------------*
DEFAULT nTam         TO 10
DEFAULT cTpLetra     TO 'UC'
DEFAULT lNegrito     TO .F.
DEFAULT cTexto       TO ' '

DO CASE
   CASE cTpLetra = 'WD' // WingDings
        @ 00,00 SAY  CHR(27)+'(579L'+;
                     CHR(27)+'(s31402t0b0s'+ALLTRIM(STR(nTam,4))+'.00h0P'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto
   CASE cTpLetra = 'LG' // Letter Gothic
        @ 00,00 SAY  CHR(27)+'(19U'+;
                     CHR(27)+'(s4102t0b0s'+ALLTRIM(STR(nTam,4))+'.00h0P'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto
   CASE cTpLetra = 'AR' // Arial
        @ 00,00 SAY  CHR(27)+'(19U'+;
                     CHR(27)+'(s16602t0b0s'+ALLTRIM(STR(nTam,4))+'.00v1P'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto
   CASE cTpLetra = 'UC' // Universal Condensed
        @ 00,00 SAY  CHR(27)+'*t600R'+;
                     CHR(27)+'&l1X'+;
                     CHR(27)+'(19U'+;
                     CHR(27)+'(s4148t0b4s'+ALLTRIM(STR(nTam,4))+'.00v1P'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto
   CASE cTpLetra = 'UB' // Universal Condensed Bold
        @ 00,00 SAY  CHR(27)+'*t600R'+;
                     CHR(27)+'&l1X'+;
                     CHR(27)+'(19U'+;
                     CHR(27)+'(s4148t3b0s'+ALLTRIM(STR(nTam,4))+'.00v1P'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto
   CASE cTpLetra = 'CB' // Courier Bold
        @ 00,00 SAY  CHR(27)+'*t600R'+;
                     CHR(27)+'&l1X'+;
                     CHR(27)+'(8U'+;
                     CHR(27)+'(s0p'+ALLTRIM(STR(nTam,4))+'h0s3b4099T'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto
   CASE cTpLetra = 'CN' // Courier Normal
        @ 00,00 SAY  CHR(27)+'*t600R'+;
                     CHR(27)+'&l1X'+;
                     CHR(27)+'(8U'+;
                     CHR(27)+'(s0p'+ALLTRIM(STR(nTam,4))+'h0s4b3099T'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto
   CASE cTpLetra = 'I250' // Codigo de Barras (Intercalado 2 de 5)
        @ 00,00 SAY  CHR(27)+'*t600R'+;
                     CHR(27)+'&l1X'+;
                     CHR(27)+'(8U'+;
                     CHR(27)+'(250X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto

ENDCASE
RETURN Nil

FUNCTION SetImp( lCompacta, lLandScape )
   Hb_Default(@lCompacta,.F.)
   Hb_Default(@lLandScape,.F.)

   * Informações:
   * @ 00,00 SAY CHR(27)+'%0A' --> Substitui o SetPrc(00,00)

   @ PROW(), PCOL() SAY CHR(27) + "E"
   IF lLandScape
      @ PROW(), PCOL() SAY CHR(27) + "&l1O"
   ENDIF
   IF lCompacta
      cPclTamanho := "18"
   ELSE
      cPclTamanho := "10"
   ENDIF
   @ PROW(), PCOL() SAY CHR(27)+"%0A"
   @ PROW(), PCOL() SAY CHR(27)+"(12U"
   @ PROW(), PCOL() SAY CHR(27)+"(s0p" + cPclTamanho + "h0s0b4102T"

RETURN .T.

FUNCTION IniPrint(lInicia,nColunas,cPrefixoInicial,cArqMacro,cArquivo,lPreview)

STATIC cFileIni
STATIC cFileFim
STATIC cArq_USU
STATIC lArq_USU
STATIC lArq_PDF
STATIC lTMPMacro
STATIC oDlg_Relatorio

LOCAL cPastaTemp:="D:\TEMPIMP", nTimeOut,  cFilePDF, nSecondsStart

   DEFAULT lInicia  TO .T.,;
           nColunas TO 80,;
           cPrefixoInicial TO "TXT",;
           cArqMacro TO "",;
           cArquivo TO "",;
           lPreview TO .F.

   IF !HB_DirExists(cPastaTemp)
      HB_DirCreate(cPastaTemp)
   ENDIF

   IF lInicia

      SET CONSOLE OFF
      SET DEVICE TO PRINT

      cArqIni  :=cPrefixoInicial
      cArq_USU :=cArquivo
      lArq_USU :=.F.
      lTMPMacro:=.F.
      lArq_PDF :=.F.
      lArq_MAT :=.F.

      IF AT("PCL",cPrefixoInicial) > 0
         cFileIni:=cPastaTemp+__PATHSEP()+"&cArqIni._"+StrZero(HB_Random(99999999),8)+".PI"
         cFileFim:=cPastaTemp+__PATHSEP()+"&cArqIni._"+StrZero(HB_Random(99999999),8)+".PF"
         SET PRINTER TO &cFileIni. 
      ENDIF

      IF AT("TXT",cPrefixoInicial) > 0 
         cFileIni:=cPastaTemp+__PATHSEP()+"&cArqIni._"+StrZero(HB_Random(99999999),8)+".PI"
         cFileFim:=cPastaTemp+__PATHSEP()+"&cArqIni._"+StrZero(HB_Random(99999999),8)+".PF"      
         SET PRINTER TO &cFileIni. 
      ENDIF

      IF AT("MAC",cPrefixoInicial) > 0 
         lTMPMacro:=.T.  
         cFileIni :=cArqMacro
         cFileFim :=cPastaTemp+__PATHSEP()+"&cArqIni._"+StrZero(HB_Random(99999999),8)+".PF"
         SET PRINTER TO &cFileIni. ADDITIVE
      ENDIF

      IF AT("USU",cPrefixoInicial) > 0 
         lArq_USU:=.T.
         cFileIni:=cArquivo 
         cFileFim:=cPastaTemp+__PATHSEP()+"&cArqIni._"+StrZero(HB_Random(99999999),8)+".PF"
      ENDIF

      IF AT("PDF",cPrefixoInicial) > 0 
         lArq_PDF:=.T.
         cFileIni:=cPastaTemp+__PATHSEP()+"&cArqIni._"+StrZero(HB_Random(99999999),8)+".PI"
         cFileFim:=cPastaTemp+__PATHSEP()+"&cArqIni._"+StrZero(HB_Random(99999999),8)+".PF"      
         SET PRINTER TO &cFileIni. 
      ENDIF
      
      IF AT("MAT",cPrefixoInicial) > 0 
         lArq_MAT:=.T.
         cFileIni:=cPastaTemp+__PATHSEP()+"&cArqIni._"+StrZero(HB_Random(99999999),8)+".PI"
         cFileFim:=cPastaTemp+__PATHSEP()+"&cArqIni._"+StrZero(HB_Random(99999999),8)+".PF"      
         SET PRINTER TO &cFileIni. 
      ENDIF
      
      SET PRINT ON

   ELSE
      IF lTMPMacro
         @ PRow(),00 SAY Chr(27)+"E"
         lTMPMacro:=Nil
         lPreview:=.F.
      ENDIF
      SET PRINT OFF
      SET PRINTER TO
      SET DEVICE TO SCREEN
      SET CONSOLE ON
      IF !lPreview
         RenameFile(cFileIni,cFileFim)
         IF ! Empty(cArq_USU) .AND. !lArq_USU
            RenameFile(cFileIni,cArq_USU)
            lArq_USU:=Nil
         ENDIF
         IF ! lArq_PDF = Nil
            IF lArq_PDF
               cFilePDF:=StrTran(cFileFim,".PF",".PDF")
               nTimeOut:=60
               nSecondsStart:=Seconds()
               DO WHILE !File(cFilePDF)
                  IF (Seconds() - nSecondsStart) > nTimeOut
                     EXIT
                  ENDIF
                  hwg_DoEvents()
               ENDDO
               IF File(cFilePDF)
                  COPY_ARQ(cFilePDF,.F.)
               ENDIF
               lArq_PDF:=Nil
            ENDIF
         ENDIF
      ELSE
         fErase(cFileIni)
      ENDIF
      cFileIni :=Nil
      cFileFim :=Nil
      cArq_USU :=Nil
      lArq_USU :=Nil
      lArq_PDF :=Nil
      lArq_MAT :=Nil
      oDlg_Relatorio:=Nil
   ENDIF
RETURN cFileIni

FUNCTION MacroTMP(aVetor)
LOCAL cFileMacro, nTmpHandle, lExiste, cFile, cArqEntrada___, I
LOCAL cPastaTemp:="D:\TEMPIMP"

   DEFAULT aVetor TO {}

   IF !HB_DirExists(cPastaTemp)
      HB_DirCreate(cPastaTemp)
   ENDIF
   
   cFileMacro:="ERRO NO ARQUIVO DA MACRO"
   
   IF Len(aVetor) > 0 

      cFileMacro:=cPastaTemp+__PATHSEP()+"MAC_"+StrZero(HB_Random(99999999),8)+".PI"
      
      DO WHILE .T.
         cFile  :=FileSeek(cFileMacro)
         lExiste:=.F.
         DO WHILE !Empty(cFile)
            cFileMacro:=cPastaTemp+__PATHSEP()+"MAC_"+StrZero(HB_Random(99999999),8)+".PI"
            cFile     :=FileSeek()
            hwg_DoEvents()
         ENDDO
         IF !lExiste
            nTmpHandle := FCreate(cFileMacro)
            IF nTmpHandle # - 1
               IF FClose(nTmpHandle)
                  EXIT
               ENDIF
            ENDIF
         ENDIF
      ENDDO
      
      cArqEntrada___:=""
      
      FOR I:=1 TO Len(aVetor)
         cArqEntrada___+=aVetor[I]+IF(I < Len(aVetor),' + ','')
         hwg_DoEvents()
      NEXT

      cArqEntrada___:='"'+"COPY /B "+cArqEntrada___+" "+cFileMacro+'"'
      
      COPY_ARQ(&cArqEntrada___,.T.)
      
   ENDIF

RETURN (cFileMacro)

FUNCTION Eject
   ?? Chr(12)
RETURN Nil

STATIC FUNCTION __PATHSEP
RETURN "\"

#pragma BEGINDUMP
   #pragma comment( lib, "shell32.lib" )
   #include "hbapi.h"
   #include <windows.h>
    
   HB_FUNC( COPY_ARQ )
   {
     SHELLEXECUTEINFO ShExecInfo = {0};     
     
     LPCTSTR lpCommand = (LPTSTR) hb_parc( 1 );
     
     BOOL bRetorno = FALSE;
     
     int iLenlpCommand = hb_parclen( 1 ) + 8;
     
     //char * cfinalCommand = ( char * ) hb_xgrab( hb_parclen( 1 ) + 8 );
     
     char * cfinalCommand = ( char * ) hb_xgrab( ( iLenlpCommand + 8 ) * sizeof( char ) );
     
     hb_snprintf(cfinalCommand, iLenlpCommand, "%s%s", "/C ", lpCommand);
    
     //MessageBox( NULL, cfinalCommand, TEXT( HB_I_("TESTE final") ), MB_ICONASTERISK );
     
     ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
     ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
     ShExecInfo.hwnd = NULL;
     ShExecInfo.lpVerb = NULL;
     ShExecInfo.lpFile = "cmd.exe";        
     ShExecInfo.lpParameters = cfinalCommand;   
     ShExecInfo.lpDirectory = NULL;
     ShExecInfo.nShow = SW_HIDE;
     ShExecInfo.hInstApp = NULL; 
     ShellExecuteEx(&ShExecInfo);
     if(ShExecInfo.hProcess !=NULL)
     {
        if (hb_parl(2))
        {
           //Aguarda até que a execução tenha sido concluída.
           WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
           CloseHandle(ShExecInfo.hProcess);
        }
        bRetorno = TRUE;
     }
     else
     {
        //Retorna .F.
        bRetorno = FALSE;
     }
     hb_xfree( cfinalCommand );
     hb_retl(bRetorno);
   }
#pragma ENDDUMP
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

BEMATECH MP-4200 TH comprimir e negritar

Mensagem por asimoes »

Melhorando:

Código: Selecionar todos

   IniPrint(.T.,,"PCL")

   SetImp( .T., .T.) //landscape
   
   SetPrc(0,0)
   
   ?? "TESTE DE IMPRESSÇO COM TAM 12"
   ?  "TESTE DE IMPRESSÇO COM TAM 12"
   ?  "TESTE DE IMPRESSÇO COM TAM 12"
   ?  "SetImp()"
   
   SetImp( .T., .F.) //portrait
   
   ImpLaser(0, 0, 12, "", "UC")

   ?? "TESTE DE IMPRESSÃO COM TAM 12"
   ?  "TESTE DE IMPRESSÃO COM TAM 12"
   ?  "TESTE DE IMPRESSÃO COM TAM 12"   
   ?  "ImpLaser()"
   
   IniPrint(.F.)

Código: Selecionar todos

#include "common.ch"

FUNCTION IniPrint( lInicia, nColunas, cPrefixoInicial, cArqMacro, cArquivo, lPreview )

STATIC cFileIni
STATIC cFileFim
STATIC cArq_USU
STATIC lArq_USU
STATIC lArq_PDF
STATIC lTMPMacro
STATIC oDlg_Relatorio

LOCAL cPastaTemp:="D:\TEMPIMP", nTimeOut,  cFilePDF, nSecondsStart

   DEFAULT lInicia  TO .T.,;
           nColunas TO 80,;
           cPrefixoInicial TO "TXT",;
           cArqMacro TO "",;
           cArquivo TO "",;
           lPreview TO .F.

   IF ! Hb_DirExists( cPastaTemp )
      Hb_DirCreate( cPastaTemp )
   ENDIF

   IF lInicia

      SET CONSOLE OFF
      SET DEVICE TO PRINT

      cArqIni  :=cPrefixoInicial
      cArq_USU :=cArquivo
      lArq_USU :=.F.
      lTMPMacro:=.F.
      lArq_PDF :=.F.
      lArq_MAT :=.F.

      IF AT( "PCL", cPrefixoInicial ) > 0
         cFileIni := cPastaTemp + __PATHSEP() + "&cArqIni._" + StrZero( Hb_Random( 99999999 ), 8 ) + ".PI"
         cFileFim := cPastaTemp + __PATHSEP() + "&cArqIni._" + StrZero( Hb_Random( 99999999 ), 8 ) + ".PF"
         SET PRINTER TO &cFileIni. 
      ENDIF

      IF AT( "TXT", cPrefixoInicial ) > 0 
         cFileIni := cPastaTemp + __PATHSEP() + "&cArqIni._" + StrZero( Hb_Random( 99999999), 8 ) + ".PI"
         cFileFim := cPastaTemp + __PATHSEP() + "&cArqIni._" + StrZero( Hb_Random( 99999999), 8 ) + ".PF"      
         SET PRINTER TO &cFileIni. 
      ENDIF

      IF AT( "MAC", cPrefixoInicial ) > 0 
         lTMPMacro := .T.  
         cFileIni  := cArqMacro
         cFileFim  := cPastaTemp +__PATHSEP() + "&cArqIni._" + StrZero( Hb_Random( 99999999 ), 8 ) + ".PF"
         SET PRINTER TO &cFileIni. ADDITIVE
      ENDIF

      IF AT( "USU", cPrefixoInicial ) > 0 
         lArq_USU := .T.
         cFileIni := cArquivo 
         cFileFim := cPastaTemp + __PATHSEP() + "&cArqIni._" + StrZero( Hb_Random( 99999999 ), 8 ) + ".PF"
      ENDIF

      IF AT( "PDF", cPrefixoInicial ) > 0 
         lArq_PDF := .T.
         cFileIni := cPastaTemp + __PATHSEP() + "&cArqIni._" + StrZero( Hb_Random( 99999999 ), 8 ) + ".PI"
         cFileFim := cPastaTemp + __PATHSEP() + "&cArqIni._" + StrZero( Hb_Random( 99999999 ), 8 ) + ".PF"      
         SET PRINTER TO &cFileIni. 
      ENDIF
      
      IF AT( "MAT", cPrefixoInicial ) > 0 
         lArq_MAT := .T.
         cFileIni := cPastaTemp + __PATHSEP() + "&cArqIni._" + StrZero( Hb_Random( 99999999 ), 8 ) + ".PI"
         cFileFim := cPastaTemp + __PATHSEP() + "&cArqIni._" + StrZero( Hb_Random( 99999999 ), 8 ) + ".PF"      
         SET PRINTER TO &cFileIni. 
      ENDIF
      
      SET PRINT ON

   ELSE
      IF lTMPMacro
         @ PRow(),00 SAY Chr(27) + "E"
         lTMPMacro := Nil
         lPreview  := .F.
      ENDIF
      SET PRINT OFF
      SET PRINTER TO
      SET DEVICE TO SCREEN
      SET CONSOLE ON
      IF ! lPreview
         RenameFile( cFileIni, cFileFim )
         IF ! Empty( cArq_USU ) .AND. ! lArq_USU
            RenameFile( cFileIni, cArq_USU )
            lArq_USU := Nil
         ENDIF
         IF ! lArq_PDF = Nil
            IF lArq_PDF
               cFilePDF := StrTran(cFileFim, ".PF", ".PDF" )
               nTimeOut := 60
               nSecondsStart := Seconds()
               DO WHILE ! File( cFilePDF )
                  IF ( Seconds() - nSecondsStart ) > nTimeOut
                     EXIT
                  ENDIF
                  hwg_DoEvents()
               ENDDO
               IF File( cFilePDF )
                  COPY_ARQ( cFilePDF, .F. )
               ENDIF
               lArq_PDF := Nil
            ENDIF
         ENDIF
         ImprimeRaw( cFileFim, Win_PrinterGetDefault() ) //imprime na impressora padrão
      ELSE
          fErase(cFileIni)
      ENDIF
      cFileIni := Nil
      cFileFim := Nil
      cArq_USU := Nil
      lArq_USU := Nil
      lArq_PDF := Nil
      lArq_MAT := Nil
      oDlg_Relatorio:=Nil
   ENDIF
RETURN cFileIni

FUNCTION MacroTMP( aVetor )
LOCAL cFileMacro, nTmpHandle, lExiste, cFile, cArqEntrada___, oElemento
LOCAL cPastaTemp:="D:\TEMPIMP"

   DEFAULT aVetor TO {}

   IF ! Hb_DirExists( cPastaTemp )
      Hb_DirCreate( cPastaTemp )
   ENDIF
   
   cFileMacro := "ERRO NO ARQUIVO DA MACRO"
   
   IF Len( aVetor ) > 0 

      cFileMacro := cPastaTemp +__PATHSEP() + "MAC_" + StrZero( Hb_Random( 99999999 ), 8 ) +".PI"
      
      DO WHILE .T.
         cFile   := FileSeek( cFileMacro )
         lExiste := .F.
         DO WHILE ! Empty( cFile )
            cFileMacro := cPastaTemp + __PATHSEP() + "MAC_" + StrZero( Hb_Random( 99999999 ), 8 ) + ".PI"
            cFile      := FileSeek()
            hwg_DoEvents()
         ENDDO
         IF ! lExiste
            nTmpHandle := fCreate( cFileMacro )
            IF nTmpHandle # - 1
               IF fClose( nTmpHandle )
                  EXIT
               ENDIF
            ENDIF
         ENDIF
      ENDDO
      
      cArqEntrada___ := ""
      
      FOR EACH oElemento IN aVetor 
         cArqEntrada___ += oElemento + IF( ! oElemento:__enumIsLast(), ' + ', '' )
         hwg_DoEvents()
      NEXT

      cArqEntrada___:= '"' + "COPY /B " + cArqEntrada___ + " " + cFileMacro + '"'
      
      COPY_ARQ( &cArqEntrada___., .T. )
      
   ENDIF

RETURN ( cFileMacro )

FUNCTION Eject
   ?? Chr(12)
RETURN Nil

STATIC FUNCTION __PATHSEP
RETURN "\"

FUNCTION ImprimeRaw( cArqImp, cPrinter )
LOCAL cMsg:="", nRet
  
      nRet := Win_PrintFileRaw( cPrinter, cArqImp, 'PRINTWIN' )
      IF nRet < 0
         cMsg := 'Erro Imprimindo: ' + Str( nRet ) + ' '
         DO CASE
         CASE nRet = -1
            cMsg+="Parâmetros inválidos passados para função."  
         CASE nRet = -2
            cMsg+="WinAPI OpenPrinter() falha na chamada."      
         CASE nRet = -3 
            cMsg+="WinAPI StartDocPrinter() falha na chamada."  
         CASE nRet = -4
            cMsg+="WinAPI StartPagePrinter() falha na chamada." 
         CASE nRet = -5
            cMsg+="WinAPI malloc() falha de memória."           
         CASE nRet = -6
            cMsg+="Arquivo " + cArqImp + " não localizado."     
         ENDCASE
         Hwg_MsgStop( cMsg + Hb_Eol() + 'Informe este problema ao HelpDesk', 'Atenção' )
      ENDIF
      Hwg_MsgInfo( Str( nRet ) )
RETURN Nil

#pragma BEGINDUMP
   #pragma comment( lib, "shell32.lib" )
   #include "hbapi.h"
   #include <windows.h>
    
   HB_FUNC( COPY_ARQ )
   {
     SHELLEXECUTEINFO ShExecInfo = {0};     
     
     LPCTSTR lpCommand = (LPTSTR) hb_parc( 1 );
     
     BOOL bRetorno = FALSE;
     
     int iLenlpCommand = hb_parclen( 1 ) + 8;
     
     //char * cfinalCommand = ( char * ) hb_xgrab( hb_parclen( 1 ) + 8 );
     
     char * cfinalCommand = ( char * ) hb_xgrab( ( iLenlpCommand + 8 ) * sizeof( char ) );
     
     hb_snprintf(cfinalCommand, iLenlpCommand, "%s%s", "/C ", lpCommand);
    
     //MessageBox( NULL, cfinalCommand, TEXT( HB_I_("TESTE final") ), MB_ICONASTERISK );
     
     ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
     ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
     ShExecInfo.hwnd = NULL;
     ShExecInfo.lpVerb = NULL;
     ShExecInfo.lpFile = "cmd.exe";        
     ShExecInfo.lpParameters = cfinalCommand;   
     ShExecInfo.lpDirectory = NULL;
     ShExecInfo.nShow = SW_HIDE;
     ShExecInfo.hInstApp = NULL; 
     ShellExecuteEx(&ShExecInfo);
     if(ShExecInfo.hProcess !=NULL)
     {
        if (hb_parl(2))
        {
           //Aguarda até que a execução tenha sido concluída.
           WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
           CloseHandle(ShExecInfo.hProcess);
        }
        bRetorno = TRUE;
     }
     else
     {
        //Retorna .F.
        bRetorno = FALSE;
     }
     hb_xfree( cfinalCommand );
     hb_retl(bRetorno);
   }
#pragma ENDDUMP

►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
dbdc5554
Usuário Nível 3
Usuário Nível 3
Mensagens: 149
Registrado em: 03 Dez 2012 08:49
Localização: uberlandia-MG

BEMATECH MP-4200 TH comprimir e negritar

Mensagem por dbdc5554 »

porter

eu tenho um prg que pega um TXT e imprime em USB

ele e´feito em win32prn

destro dele posso fazer amarrações imprimir log setar cores etc


se o usuário selecionar uma impressora USB gero o txt

se for tipo lx-300(tenho um cadastro com as impressoras e se e´USB ou nao) uso o printfilew caso contrario passo o txt e a impressora para a funcao e ela imprime na USB
Responder