Win32Prn() Número de cópias sempre 1

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

Win32Prn() Número de cópias sempre 1

Mensagem por lugab »

Pessoal, eu estou fazendo coisa errada no Win32prn(), pra variar.

Eu desejo imprimir 3 vezes o mesmo relatório, mas o código abaixo não está funcionando adequadamente e por isso só esta imprimindo uma única cópia do relatório.

Observem que eu coloquei 3 no parâmetro oPrinter:Copies.

Código: Selecionar todos

*----------------------------------------
Function impWinPrint(cPrinter,xarqtxt)
*-----------------------------------------
#define DMPAPER_A4                   9  // A4 210 x 297 mm 
LOCAL oPrinter:= Win32Prn():New(cPrinter), aFonts, x, nColFixed,nColTTF, nColCharSet
LOCAL ncarpol, i, nHandle, cString
oPrinter:Landscape:= .F.
oPrinter:FormType := DMPAPER_A4
oPrinter:Copies   := 3
oPrinter:SetPrintQuality(1) 
IF !oPrinter:Create()
   Alert(" Impressora näo pode ser criada !!! ")
   RETURN
ELSE
   IF !oPrinter:startDoc("TPRINT("+xarqtxt+")")
     Alert("StartDoc() falhou !!!")
     oPrinter:destroy()
     RETURN
   ENDIF
ENDIF

nHandle:= FOPEN( xarqtxt ) // READ
cString:= ""
xmaxLen:= 0
FOR i:= 1 TO 10
    IF gfreadline( @cString, nHandle )
       IF LEN( cString ) > xmaxLen
          xmaxLen:= LEN( cString )
       ENDIF
    ELSE
       EXIT
    ENDIF
NEXT

IF xmaxLen <= 85
    ncarpol:= 11
ELSEIF xmaxlen <= 100
    ncarpol:= 13
ELSEIF xmaxlen <= 136
    ncarpol:= 18
ELSEIF xmaxlen <= 160
    ncarpol:= 21
ENDIF

oPrinter:SetFont('Courier New',,ncarpol)
fSeek( nHandle, 0 )

cString:= ""
xprow:=0
endof_file=.f.
while !endof_file
    gfreadline( @cString, nHandle )
    IF ( xpos:= AT( CHR(12), cString ) ) > 0
       cString:= LEFT( cString, xpos-1 ) + SUBS( cString, xpos + 1, LEN( cString ) )
    ENDIF
    oPrinter:TextOut(cString)
    oPrinter:NewLine()
    IF xpos > 0
       oPrinter:NewPage()
       oPrinter:SetFont('Courier New',,ncarpol)
       oPrinter:NewLine()
       xprow:=0
    ELSE
       xprow++
    ENDIF
enddo

oPrinter:EndDoc()
oPrinter:Destroy()

fclose(nHandle)

RETURN(NIL)
// EOF - impWinPrint()

*---------------------------
procedure gfreadline(st,handle)
*---------------------------
st=xfgetline(handle)
return .t.


*---------------------------
function xfgetline(script)
*-------------------------
local return_lin, chunk, bigchunk, oldoffset, at_chr13
return_lin = ''
bigchunk = ''
oldoffset = fseek (script, 0, 1)
do while .t.
   chunk = ''
   chunk = freadstr (script, 100)
   if len (chunk) = 0
      endof_file = .t.
      exit
   endif
   bigchunk = bigchunk + chunk
   if at (chr (10), bigchunk) > 0
      at_chr13 = at (chr (10), bigchunk)
      fseek (script, oldoffset)
      return_lin = freadstr (script, at_chr13 - 1)
      exit
   endif
enddo
fseek (script, 1, 1)
if right(return_lin,1)=chr(13)
   return_lin:=left(return_lin,len(return_lin)-1)
end if
return return_lin

Eu usava este código no xharbour 1.0 e agora estou usando-o, sem modificaçoes, no harbour 2.0 e não sei se essa mudança tem algo a ver como o não funcionamento do "oPrinter:copies".

Obrigado a quem dedicar seu tempo a solução do meu problema

Gabriel
lugab
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Re: Win32Prn() Número de cópias sempre 1

Mensagem por Stanis Luksys »

Opa, beleza?

Eu sei que é uma solução idiota, mas enquanto não resolve você poderia fazer um FOR e passar o número de cópias como parâmetro nesta função "impWinPrint"...

Eu nunca usei esta lib, mas de qualquer forma vou dar uma olhadinha aqui e mais tarde vemos se há melhor solução.

Abraços!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Win32Prn() Número de cópias sempre 1

Mensagem por lugab »

É Stanis, eu to me virando é com o "for" mesmo...

Mas não é viável alterar todos as dezenas de relatórios, por conta de uma função tão pequena, com problema de mau funcionamento..

Obrigado , mesmo assim..

Gabriel
lugab
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Win32Prn() Número de cópias sempre 1

Mensagem por sygecom »

Eu uso oPrinter:Copies sem problemas, por acaso você está fazendo o teste no PdfCreator ? se sim, não sei por que mas não funciona as vezes, faça o teste em impressora real.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Win32Prn() Número de cópias sempre 1

Mensagem por lugab »

Oi Leonardo,

É na impressora mesmo, a mesma jato-de-tinta de sempre.

Será que o código q vc etá usando é o mesmo ?

Este código funcionava bem no Xharbour 1.0 , mas agora estou usando ele no Harbour 2.0 e os problemas surgiram.

Além de não enviar N cópias pra impressora, o código tb não imprime a última linha gerada, nem na impressora e nem no Pdfcreator..

É sinsitro !
lugab
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Win32Prn() Número de cópias sempre 1

Mensagem por sygecom »

Olá Gabriel,
Eu uso no xHarbour 1.2.1 e o meu laço que le linha a linha está assim:

Código: Selecionar todos

   nLines := mlcount( cText, 150 )
   for nA := 1 to nLines
      cLine := memoline( cText, 150 , nA, 1, .F. )

      IF Left(AllTrim( cLine ), 1 ) == Chr( 15 ) .or. Left( AllTrim(cLine), 1 ) == Chr( 18 )
         loop
      ENDIF

      If Left(AllTrim(cLine),1)==Chr(12) //SALTO DA PAGINA
         oPrinter:NewPage()
         FOR TT=1 TO 2
            oPrinter:newline()
         NEXT
      endif

      oPrinter:TextOut( cLine, .T. )
      oPrinter:Bold(0) // Normal

      if (oPrinter:MaxRow()-2 ) <= oPrinter:Prow()
         oPrinter:NewPage()
         FOR TT=1 TO 2
            oPrinter:newline()
         NEXT
      endif
   next
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Win32Prn() Número de cópias sempre 1

Mensagem por lugab »

Leonardo, em vez de só o laço, tem como tu postar o impwinprint () todo, com Fgetline() , laço e tudo o mais ?

Acho mais produtivo copiar e testar ele todo, do que comparar linha-a-linha..
lugab
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Win32Prn() Número de cópias sempre 1

Mensagem por sygecom »

Ex:
IMPRIME('TEXTO.TXT',136,GetDefaultPrinter(),2,.F.)

Código: Selecionar todos

*****************************************************************
FUNCTION IMPRIME( cArq, tamrel ,cPrinter, cCopias, vIMPPAISAGEM )
*****************************************************************
local cTexto, nLinhas, nA, cLinha, oBMP, nFileHandle, cLine, nLINE_TEMP:=0
#ifdef __XHARBOUR__
local oPrinter:= win32prn():New(cPrinter)
#else
local oPrinter:= win_prn():New(cPrinter)
#endif

cText := memoread( cArq )

oPrinter:Landscape:= vIMPPAISAGEM
oPrinter:FormType:= 9
oprinter:SetPrintQuality(-1) // qualidade da impressão
oPrinter:Copies:=cCopias

IF !oPrinter:Create()
   MsgStop("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar se a Impressora esta Ligada.","Aviso do Sistema")
   return NIL
else
   IF !oPrinter:StartDoc("Impressao Pelo Sistema")
      MsgStop("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar a Impressora","Aviso do Sistema")
      Return NIL
   endif

   FOR TT=1 TO 2
      oPrinter:newline()
   NEXT

   IF TAMREL=80
      oPrinter:setfont('Courier New',,12,,,,255) // Normal
      nLines2 := 85
   ELSE                                 //{3,-60,160}
      IF vIMPPAISAGEM=.T.
         oPrinter:SetFont("Courier New",13,{3,-50},0,.F.,.F.) // Comprimida
         nLines2 := 190
      ELSE
         oPrinter:SetFont("Courier New",13,{3,-50},0,.F.,.F.) // Comprimida
         nLines2 := 150
      ENDIF
   ENDIF
   oPrinter:Bold(0) // Normal

   nLines := mlcount( cText, nLines2 )
   for nA := 1 to nLines
      cLine := memoline( cText, nLines2, nA, 1, .F. )

      IF Left(AllTrim( cLine ), 1 ) == Chr( 15 ) .or. Left( AllTrim(cLine), 1 ) == Chr( 18 )
         loop
      ENDIF

      If Left(AllTrim(cLine),1)==Chr(12) //SALTO DA PAGINA
         oPrinter:NewPage()
         FOR TT=1 TO 2
            oPrinter:newline()
         NEXT
      endif

      oPrinter:TextOut( cLine, .T. )
      oPrinter:Bold(0) // Normal

      if (oPrinter:MaxRow()-2 ) <= oPrinter:Prow()
         oPrinter:NewPage()
         FOR TT=1 TO 2
            oPrinter:newline()
         NEXT
      endif
   next

   oPrinter:EndDoc()
   oPrinter:Destroy()
ENDIF
RETURN NIL
com Fgetline()
Não sei o que é esse FgetLine() ....
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Win32Prn() Número de cópias sempre 1

Mensagem por lugab »

Obrigao, Leonardo.

Vou checar, claro, porém, eu já vi 2 novidades, pelo menos para mim..

1 ) Tu pode dizer a diferença entre Win32Prn() e win_Prn(), no seu código ?

2) Pode dizer onde acho a função GetDefaultPrinter() ?

Grato,

Gabriel
lugab
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Win32Prn() Número de cópias sempre 1

Mensagem por sygecom »

Olá Gabriel,
lugab escreveu: 1 ) Tu pode dizer a diferença entre Win32Prn() e win_Prn(), no seu código ?
Win32Prn() é para compilar usando xHarbour e win_Prn() é para compilar usando Harbour
2) Pode dizer onde acho a função GetDefaultPrinter() ?
GetDefaultPrinter() é para xHarbour, para Harbour é win_PrinterGetDefault() e ambas serve para buscar a impressora padrão do Windows.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Win32Prn() Número de cópias sempre 1

Mensagem por lugab »

Pronto, Leonardo, o meu problema era só receber essa informação q vc postou:
  • "Win32Prn() é para compilar usando xHarbour e win_Prn() é para compilar usando Harbour"
Obrigado mais uma vez. Só troquei o win32prn(0 por win_prn() no meu código e ai o paramentro "Copies "funcionou.

Entretanto, aproveito o ensejo pra meter o pau no me código, pq ele nunca mandou a última linha do arquivo texto para impressão.
Eu olho o código, o código olha pra mim e nada de acordo. A rotina siumplesmente só imprime até N-1 linhas

Alguém tem tempo de olhar esse código e dizer o que fazer, pra imprimir tb a última linha ?

Código: Selecionar todos

*----------------------------------------
Function impWinPrint(cPrinter,xarqtxt)
*-----------------------------------------
Local oPrinter:= Win_Prn():New(cPrinter), aFonts, x, nColFixed,nColTTF, nColCharSet
Local ncarpol, i, nHandle, cString
oPrinter:FormType := 9
oPrinter:Copies   := 3
oPrinter:SetPrintQuality(-4) // qualidade impressao
oPrinter:Landscape:= .F.  && retrato

IF !oPrinter:Create()
   Alert(" Impressora näo pode ser criada !!! ")
   return
else
   IF !oPrinter:startDoc("TPRINT("+xarqtxt+")")
     Alert("StartDoc() Falha na Impressora !")
     oPrinter:destroy()
     return
   endif
endif

nHandle:= Fopen( Xarqtxt ) // READ
cString:= ""
xmaxLen:= 0
For I:= 1 to 10
    IF gfreadline( @cString, nHandle )
       If len( CString ) > xmaxLen
          xmaxLen:= Len( cString )
       endif
    else
       exit
    endif
next 
// Ncarpol=caracteres por polegada
IF xmaxLen <= 85
       ncarpol:= 11
   Elseif Xmaxlen <= 100
       ncarpol:= 13
   Elseif Xmaxlen <= 136
       ncarpol:= 18
   Elseif Xmaxlen <= 160
       ncarpol:= 21
   Endif
Endif

oPrinter:SetFont('Courier New',,ncarpol)

fSeek( nHandle, 0 )

cString:= ""
xprow:=0
endof_file=.f.
while !endof_file
    gfreadline( @cString, nHandle )
    IF ( xpos:= AT( CHR(12), cString ) ) > 0
       cString:= LEFT( cString, xpos-1 ) + SUBS( cString, xpos + 1, LEN( cString ) )
    ENDIF
    oPrinter:TextOut(cString)
    oPrinter:NewLine()
    IF xpos > 0
       oPrinter:NewPage()
       oPrinter:SetFont('Courier New',,ncarpol)
       oPrinter:NewLine()
       xprow:=0
    ELSE
       xprow++
    ENDIF
enddo

oPrinter:EndDoc()
oPrinter:Destroy()
fclose(nHandle)
RETURN(NIL)


*---------------------------
procedure gfreadline(st,handle)
*---------------------------
st=xfgetline(handle)
return .t.


*---------------------------
function xfgetline(script)
*-------------------------
local return_lin, chunk, bigchunk, oldoffset, at_chr13
return_lin = ''
bigchunk = ''
oldoffset = fseek (script, 0, 1)
do while .t.
   chunk = ''
   chunk = freadstr (script, 100)
   if len (chunk) = 0
      endof_file = .t.
      exit
   endif
   bigchunk = bigchunk + chunk
   if at (chr (10), bigchunk) > 0
      at_chr13 = at (chr (10), bigchunk)
      fseek (script, oldoffset)
      return_lin = freadstr (script, at_chr13 - 1)
      exit
   endif
enddo
fseek (script, 1, 1)
if right(return_lin,1)=chr(13)
   return_lin:=left(return_lin,len(return_lin)-1)
end if
return return_lin


lugab
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Win32Prn() Número de cópias sempre 1

Mensagem por leandrolinauer »

Boa tarde.
Estive pesquisando como colocar varias copias para imprimir usando a win32prn ou em harbour win_prn.
Não obtive exito, não obedece alinha abaixo
oPrinter:Copies :=3 //aqui defini a quantidade para testar e nao da certo

Aproveitando, pergunto como pegar a quantidade de copias alteradas na funcao

hDc := WIN_PRINTDLGDC( @cPrinter, , , ) //mostra a tela de dialog do windows para escolher as impressoras instaladas
função que abre a janela de impressoras do windows, precisava pegar a quantidade para enviar para
oPrinter:Copies := pegar a quantidade da win_printdlgdc()

Grato.
Código abaixo:

Código: Selecionar todos

Function NewImprimePRN_LS(cArq,tamrel,aPo,aTl,aNf,aIA,aIL,aFL,aMo) // arquivo e tamanho da linha
Local cTexto, nLinhas, nA, cLinha, oPrinter, cFILE, aCt:=.T.
Local aAltLetra:=10
Local mAltLetra:=1 //.10
oPrinter:=Win_prn():New(cPrinter) //tem que colocar porque senao nao cria o metodo
//oPrinter:=Win32Prn():new(cPrinter) uso a de cima em harbour 3.4
If oPrinter:create()
   oPrinter:Landscape:=If(aPo=="H",.T.,.F.)  //VERTICAL=.F.  // HORIZONTAL=.T.
   oPrinter:FormType :=If(cPrModel=="MATRICIAL",DMPAPER_LETTER,DMPAPER_A4) //decima
   oPrinter:Copies   :=3 //aqui defini a quantidade para testar e nao da certo
   oPrinter:CharSet(255)
   oPrinter:SetPrintQuality(1) //qualidade da impressãoo 1 rascunho 2 normal 3 media 4melhor
  //Showmessage(,,Str(oPrinter:Copies,2),0) //mostro pra ver se realmente esta em 3 copias e mostra 3
     If oPrinter:StartDoc("Impressao pelo sistema") //DENTRO COLOCO O NOME DO ARQUIVO ! oPrinter:startDoc( "win_Prn(Doc name in Printer Properties)" )
      If cPrModel=="MATRICIAL" 
         If aNF=.F. // se nao for nota fiscal, se for passa reto usando a configuraçãoo da nota fiscal
 	    Prn_HANDLE:=FOpen(cArq,1) //abre o arquivo
            FSeek (Prn_HANDLE,0,1)    //POSICIONE NO INICIO DO ARQUIVO
            FWrite(Prn_HANDLE,cComI,1) //comprimir
            FSeek (Prn_HANDLE,0,2) //POSICIONE NO FIM DO ARQUIVO
            FWrite(Prn_HANDLE,cNorI) //normal
            FClose(Prn_HANDLE)
         EndIf
         If aMo=.T. //imprime
            Win_PrintFileRaw(cPrinter,cArq,"")
         EndIf   
      Else 
         nOrgAlt :=oPrinter:LineHeight()
         oPrinter:LineHeight := nOrgAlt * mAltLetra //1.10 aumenta em 10% a linha erro
         oPrinter:CharSet( 0 )  // Reset default charset
         If aTl# Nil //altura da linha  controla etiqueta
            oPrinter:LineHeight :=Int(nOrgAlt -((nOrgAlt * aTl ) / 100))
         EndIf
         oPrinter:PosY:=0  //linha          |
         oPrinter:PosX:=0  //coluna        x --->
         oPrinter:SetFont("LUCIDA CONSOLE",aAltLetra,{aIA,aIL},0,.F.,.F.) //ficou menos agredido na folha nao aceita negrito
         oPrinter:SetColor( BLACK )
         oPrinter:Bold( 500 )
         oPrinter:TextOut(Space(TamRel),.T.) //captura o camanho
         cTexto  :=MemoRead(cArq)
         nLinhas :=mLCount(cTexto,TamRel,1,.F.)
         oEject  :=.F.
         oNegrito:=.F.
         oItalico:=.F.
         For nA:= 1 To nLinhas
             cLinha:=MemoLine(cTexto,TamRel+2,nA,1,.F.)   //+2 para pegar possivel eject
             oNegrito:=.F.
             oItalico:=.F.
	    aPosCa:=At("",cLinha)  //posicao do eject

             If Left(cLinha,3)=="<b>"
                cLinha:=SubStr(cLinha,4,TamRel-1) //pego da direta para esquerda para nao pegar o segundo caracter do eject
                oNegrito:=.T.
                oPrinter:LineHeight := nOrgAlt * mAltLetra//1.10 aumenta em 10% a linha a proxima linha
                oPrinter:SetFont("Courier New",aAltLetra+1,{1,18},0,.F.,.F.) //ficou menos agredido na folha
                oPrinter:Bold(700)
             EndIf
             If Left(cLinha,3)=="<i>"
                cLinha:=SubStr(cLinha,4,TamRel-1) //pego da direta para esquerda para nao pegar o segundo caracter do eject
                oItalico:=.T.
                oPrinter:Italic(.T.)
             EndIf

             If aPosCa > 0 .And. nA < nLinhas //SALTO_PAGINA  para nao fazer na primeira
             	 oEject:=.T.
                If aPosCa=1 //tem eject
                   cLinha:=Right(cLinha,TamRel)
                Else
                   cLinha:=Left(cLinha,TamRel)
		EndIf   
                If nA+1 < nLinhas .And. (!Empty(cLinha) .Or. oEject=.T.)//se for cabeçalho abre nova pagina com duas linhas em branco senao é rodape, nao abre a pagina
                   oPrinter:NewPage()  //precisa para abrir nova pagina
                EndIf
	     EndIf	      //eject
             If Empty(cLinha) //nova para no grafico ele pular linha quando necessario
                oPrinter:NewLine()
             ElseIf (Left(AllTrim(cLinha), 80)==Repl("Ä",80) .Or.;
                     Left(AllTrim(cLinha), 80)==Repl("-",80) .Or.;
                     Left(AllTrim(cLinha), 80)==Repl("_",80)).And.;
                    !Left(AllTrim(cLinha),100)==Repl("-",100)
                oPrinter:TextOut(Repl(My_OemToAnsi("-"),TamRel),.T.)
             Else
                cLinha:=MyWin_AnsiToOem(cLinha)
      	 	    oPrinter:TextOut(My_OemToAnsi(Left(cLinha,TamRel)),.T.)
             EndIf
   	     If oNegrito=.T.
                oPrinter:LineHeight := nOrgAlt * mAltLetra //1.15
                oPrinter:SetFont("LUCIDA CONSOLE",aAltLetra,{aIA,aIL},0,.F.,.F.) //ficou menos agredido na folha
                oPrinter:SetColor( BLACK )
                oPrinter:Bold(500)
             EndIf
             If oItalico=.T.
                oPrinter:Italic(.F.)
             EndIf
         Next
      EndIf
    EndIf   
   oPrinter:EndDoc()
   oPrinter:Destroy()
   MyFErase(wD_Retorno+nPrinter+".PRN") //apaga prn
Else
   ShowMessage(,,"Erro na criação do arquivo de impressão.",0)
EndIf
Return NIL
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Win32Prn() Número de cópias sempre 1

Mensagem por JoséQuintas »

Eu começaria fazendo um teste ao contrário:

Código: Selecionar todos

? oPrinter:Copies
Pra saber se existe :copies

E outro teste depois da atribuição, talvez seja somente leitura

Conforme o resultado, vai indicar pra onde correr.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Win32Prn() Número de cópias sempre 1

Mensagem por leandrolinauer »

Bom dia,
Já fiz o teste e realmente mostra alterado.
oPrinter:Copies :=3 //aqui defini a quantidade para testar e nao da certo
oPrinter:CharSet(255)
oPrinter:SetPrintQuality(1) //qualidade da impressãoo 1 rascunho 2 normal 3 media 4melhor
Showmessage(,,Str(oPrinter:Copies,2),0) //mostro pra ver se realmente esta em 3 copias e mostra 3

o resto do código é o mesmo e não respeita a quantidade de copies no oprinter.
Até tentei colocar um FOR pra ir refazendo até o final da copia, nem isto obedece, imprime apenas uma.
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Win32Prn() Número de cópias sempre 1

Mensagem por JoséQuintas »

Achei na internet, veja se funciona.

Código: Selecionar todos

oPrinter:SetCopies( 3 )
https://fivewin.com.br/index.php?/topic ... etprintdc/
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder