Página 1 de 2

como alterar LPT_TIMEOUT do windows 7

Enviado: 10 Jul 2013 09:42
por porter
ola pessoal, meu sistema esta rodando em um windows 7 64 bits, mas a impressao demora para comecar, no windows xp eu alterava o LPT_TIMEOUT de 15 para 1, no windows 7 como faço essa alteracao ? pelo regedit nao consegui localizar o LPT_TIMEOUT.
O sistema foi migrado de clipper para xHarbour.

obrigado.

como alterar LPT_TIMEOUT do windows 7

Enviado: 10 Jul 2013 12:49
por Jairo Maia
Olá Porter,

Se você fecha seu sistema, a impressão é liberada em seguida? Se sim, você tem certeza que está fechando a porta ou arquivo da impressora? Coloque um exemplo da função que você está usando. Acho que fica mais fácil opinar.

como alterar LPT_TIMEOUT do windows 7

Enviado: 10 Jul 2013 13:44
por porter
ola Jairo, estou fazendo assim :

Código: Selecionar todos

SET DEVICE TO PRINT
SET PRINT ON 
SET PRINT TO C:\LOJA\TESTE.TXT
SETPRC(0,0)
?? "$IMP$=1;"
DO WHILE !EOF()
      @ contl,01 say "teste tste teste"
      skip
      contl++
ENDDO
SET PRINTER TO
SET PRINTER OFF
SET DEVICE TO SCREEN
IF CONFIRMA("Imprimir relatorio") = 1
    ! COPY TESTE.TXT C:\JATO
ENDIF
RETURN
faco uma copia de teste.txt para a pasta c:\jato que esta sendo monitorada pelo prwin, com o xHarbour tem como mandar imprimir direto na USB ? nao precisarei mais usar o prwin ?

obrigado.

como alterar LPT_TIMEOUT do windows 7

Enviado: 10 Jul 2013 13:54
por Pablo César
Porter, por favor estou te pedindo gentilmente que obedeça as regras do fórum (mensagens repetidas e falta de uso das tags). Eu já adverti você uma vez por escrito, evite por favor que isto volte a acontecer, ok ?

como alterar LPT_TIMEOUT do windows 7

Enviado: 10 Jul 2013 14:15
por porter
voce tem razao Pablo, principalmente a tag na correria eu sempre esqueco de usar, desculpa.

como alterar LPT_TIMEOUT do windows 7

Enviado: 11 Jul 2013 09:21
por Jairo Maia
Olá Porter,

Não entendi o significado de ?? "$IMP$=1;", mas veja se o exemplo abaixo ajuda. Sugiro substituir o Copy por PrintFileRaw(), veja se resolve.

Código: Selecionar todos

Function Main()
 Local cPrinter
 Local contl := 1
 cFileName := "C:\LOJA\TESTE.TXT"
 
 Use SeuDBF Shared New

 SET DEVICE TO PRINT
 SET PRINT TO ( cFileName )
 SETPRC(0,0)
 ?? "$IMP$=1;"
 DO WHILE !EOF()
      @ contl,01 say "teste tste teste"
      skip
      contl++
 ENDDO
 SET PRINTER TO
 SET DEVICE TO SCREEN

 IF CONFIRMA("Imprimir relatorio") = 1

  // sintaxe da PrintFileRaw()
  // PrintFileRaw( cPrinterName, cFileName, cJobTitle )

  // Se desejar imprimir direto na impressora padrao, use assim:
  // cPrinDefault := GetDefaultPrinter()
  // PrintFileRaw( cPrinDefault, cFileName, "Teste de Impressao" )

  // Para dar op‡Æo ao usuario para escolher a impressora, use assim:
  cPrinter := PegaPrinter()
  If !Empty( cPrinter )
   PrintFileRaw( cPrinter, cFileName, "Teste de Impressao" )
  EndIf

 ENDIF

Return Nil

Function PegaPrinter()  // seleciona impressora
 Local i, nPrn := 1, oPrn, nMaxLen := 0, aPNomes := {}
 Local cPrinter := "", aPrn := GetPrinters( .t. )
 Local cPrinDefault := GetDefaultPrinter()

 If Empty( aPrn )
  Alert( "Nenhuma impressora Instalada" )
  Return ( cPrinter )
 Endif

 For i=1 To Len( aPrn )
  AaDd( aPNomes , aPrn[i,1] )
  nPrn := If( aPrn[i,1] = cPrinDefault, i, nPrn )
  nMaxLen := If( Len( aPrn[i,1] ) > nMaxLen, Len( aPrn[i,1] ), nMaxLen )
 Next

 Clear Screen
 nPrn := AChoice( 3, 10, Len( aPNomes )+3, nMaxLen+10, aPNomes, .T., Nil , nPrn )
 If nPrn = 0
  Return ( cPrinter )
 Endi

 cPrinter := Alltrim( aPNomes[nPrn] )

Return ( cPrinter )

como alterar LPT_TIMEOUT do windows 7

Enviado: 11 Jul 2013 12:17
por Vander
Olá Porter;
faco uma copia de teste.txt para a pasta c:\jato que esta sendo monitorada pelo prwin, com o xHarbour tem como mandar imprimir direto na USB ? nao precisarei mais usar o prwin ?
Tem como imprimir diretamente para impressoras USB, veja em:
http://pctoledo.com.br/forum/viewtopic. ... t=win32prn

Vander

como alterar LPT_TIMEOUT do windows 7

Enviado: 16 Ago 2013 09:08
por porter
ola pessoal, desculpe a demora em dar uma resposta, só estou podendo mexer nessa duvida agora. Senhor Jairo, estou testando a rotina acima que o senhor passou, e ela funciona corretamente quando escolho uma impressora matricial, mas quando seleciono uma impressora com USB(HP Deskjet 3510 series), ela ate tenta imprimir vejo que entra rapidamente na filha de impressao, mas nao imprime nada.
Na impressora matricial esta imprimindo corretamente, mas na HP nao.

obrigado pela atençäo.

como alterar LPT_TIMEOUT do windows 7

Enviado: 16 Ago 2013 12:48
por Jairo Maia
Olá Porter,
porter escreveu:ela funciona corretamente quando escolho uma impressora matricial
Na verdade, para usar a função PrintFileRaw() a impressora precisa ter suporte ao modo RAW, ou estar com ele habilitado caso ela tenha.

Mas como você está migrando seu sistema, então será bom você começar a estudar a classe Win32Prn (no Harbour é Win_Prn), que com pequenos ajustes em seu sistema, acabam os problemas de impressoras.

No exemplo, mantive o raciocínio de gerar o arquivo de impressão antes, mas você pode fazer a impressão de forma direta a medida que for adequando seu sistema.

Nota: Usando esta classe, os comandos de tipos de fonte, cores, tamanho etc constantes no arquivo, serão ignorados. Estes ajustes precisam ser feito na rotina de impressão.

Veja o exemplo simples abaixo como funciona a Win32Prn. Compile e veja que vai imprimir em qualquer impressora:

Código: Selecionar todos

#include "WinGdi.ch"

Function Main()
 Local cPrinter
 Local contl := 1
 cFileName := "C:\LOJA\TESTE.TXT"
 
 Use DBFTeste Shared New

 SET DEVICE TO PRINT
 SET PRINT TO ( cFileName )
 SETPRC(0,0)
 //?? "$IMP$=1;"
 DO WHILE !EOF()
  @ contl,01 say "Teste de impressao Usando a Clase Win32Prn"
  skip
  contl++
 ENDDO
 SET PRINTER TO
 SET DEVICE TO SCREEN

 If Alert( "Imprimir relatorio?", { "Sim", "Nao" } ) = 1

  If !File( cFileName )
   Return Nil
  Else  // Vamos colocar seu arquivo num Array

   cLinha := Nil
   aLinesPrint := {}
   cBuffer := FOpen( cFileName, 2 )

   Do While Hb_FReadLine( cBuffer, @cLinha, Nil, 255 ) = 0
    AaDd( aLinesPrint, cLinha )
   EndDo

   FClose( cBuffer )

  EndIf

  cPrinter := PegaPrinter()  // escolhe a impressora
  If !Empty( cPrinter )

   nCopias := 1  // n£mero de c¢pias

   oPrinter           := Win32Prn():new( cPrinter )
   oPrinter:landscape := .F.
   oPrinter:formType  := DMPAPER_A4  // folha A4
   oPrinter:copies    := nCopias
 
   IF .NOT. oPrinter:create()
    Alert("Erro Tentando Acessar a Impressora")
    Return Nil
   ENDIF

   IF .NOT. oPrinter:startDoc( "Impressao Teste" )
    Alert("Erro Tentando Enviar os Dados de Impressao")
    Return Nil
   ENDIF

   // impressao comprimida: { 3, -50 } ‚ igual 50/3, ou seja 16.6 cpp
   //oPrinter:SetFont( "Lucida Console", 10, { 3, -50 } )

   // impressao normal
   oPrinter:SetFont( "Lucida Console", 10 )
   oPrinter:CharSet( 0 )

   oPrinter:bold( FW_NORMAL )  // nao negrito, nao it lico, etc...

   For i = 1 To Len ( aLinesPrint )
    oPrinter:textOut( aLinesPrint[ i ] )  // imprime a linha
    oPrinter:newLine()  // passa para proxima linha
   Next

   oPrinter:endDoc()   // envia a impressora
   oPrinter:destroy()  // fecha documento de impressao

  EndIf

 EndIf

Return Nil

Function PegaPrinter()  // seleciona impressora
 Local i, nPrn := 1, oPrn, nMaxLen := 0, aPNomes := {}
 Local cPrinter := "", aPrn := GetPrinters( .t. )
 Local cPrinDefault := GetDefaultPrinter()

 If Empty( aPrn )
  Alert( "Nenhuma impressora Instalada" )
  Return ( cPrinter )
 Endif

 For i=1 To Len( aPrn )
  AaDd( aPNomes , aPrn[i,1] )
  nPrn := If( aPrn[i,1] = cPrinDefault, i, nPrn )
  nMaxLen := If( Len( aPrn[i,1] ) > nMaxLen, Len( aPrn[i,1] ), nMaxLen )
 Next

 Clear Screen
 nPrn := AChoice( 3, 10, Len( aPNomes )+3, nMaxLen+10, aPNomes, .T., Nil , nPrn )
 If nPrn = 0
  Return ( cPrinter )
 Endi

 cPrinter := Alltrim( aPNomes[nPrn] )

Return ( cPrinter )

como alterar LPT_TIMEOUT do windows 7

Enviado: 17 Ago 2013 13:12
por Toledo
Amigos, vejam este exemplo de visualizador de relatórios que coloquei na seção Download, acho que vai ser útil.

https://pctoledo.org/forum/fileba ... t=c&page=1

Abraços,

como alterar LPT_TIMEOUT do windows 7

Enviado: 18 Ago 2013 04:18
por Jairo Maia
Show de bola Toledo. Excelente exemplo.

De quebra, duas funções muito legais: Ascii para Pdf e a de envio de email.
:-Y

como alterar LPT_TIMEOUT do windows 7

Enviado: 18 Ago 2013 10:43
por Toledo
Jairo, a função CovertAsciiPDF() copiei de um exemplo txt2pdf.prg do Massiano Belgrano. Quando estiver com mais tempo, vou tentar incluir nesta função as formatações de negrito, condensado, expandido, etc.

Abraços,

como alterar LPT_TIMEOUT do windows 7

Enviado: 19 Ago 2013 12:52
por porter
ola Jairo, adaptei a rotina que voce passou e funcionou corretamente no sistema quero te agradecer e perguntar se para fazer impressao direta usa-se essa mesma rotina, senao tem algum exemplo para que eu possa usar ?

obrigado.

como alterar LPT_TIMEOUT do windows 7

Enviado: 20 Ago 2013 06:10
por Jairo Maia
Olá Porter,
porter escreveu:para fazer impressao direta usa-se essa mesma rotina
O exemplo passado leva em consideração um arquivo texto pré existente. Para imprimir direto, usa-se a mesma classe, os mesmos comandos, mas não esta mesma rotina.

Coloque um exemplo da sua função que gera o arquivo texto usando o SET PRINTER TO, mostrando qual ou quais dados do DBF você usa para gerar o arquivo de impressão para que possamos montar um exemplo para você entender melhor o uso da classe Win32Prn e impressão direta.

como alterar LPT_TIMEOUT do windows 7

Enviado: 20 Ago 2013 10:12
por porter
SET DEVICE TO PRINT
SET PRINT ON
SET PRINT TO C:\LOJA\TESTE.TXT
SETPRC(0,0)
USE PRODUTOS SHARED NEW
GOTO TOP
DO WHILE !EOF()
@ contl,01 say CODIGO
@ contl,10 say DESCRICAO
skip
contl++
ENDDO
SET PRINTER TO
SET PRINTER OFF
SET DEVICE TO SCREEN
IF CONFIRMA("Imprimir relatorio") = 1
W32PRN() // rotina que voce passou, dei o nome a ela de w32prn
ENDIF
RETURN