Jump to content
Fivewin Brasil

Nome da Impressora Selecionada


Luiz Arruda (ICO)

Recommended Posts

Bom dia Pessoal

Trocamos as maquinas aqui do escritorio e todas vieram com Win 7 64, até ai tudo bem, só que para imprimir em matricial tive que usar o PrintFileRaw em todos fonts porque ainda uso o velho e rápido padrão Clipper para matricial. O problema é que tenho que colocar o nome da impressora na linha assim

PRINTFILERAW( "EPSON LX-300+ /II", "\caminho\MOSTRA13.PRN", "Relatório" )

O problema é que tem outras impressoras matriciais com nomes diferentes,

tô tentando assim, porém sem resultados.

hDC := GetPrintDC( GetActiveWindow() )
if hDC == 0

cImpressoras := prnGetname()
MSGINFO("Impressão cancelada pelo usuário","..::Impressão")
Return .f.
endif
Msginfo("&cImpressoras") Aqui não retorna a impressora selecionada com cImpressoras

e não imprime nada

Eu gostaria de algo assim

cImpressoras := prnGetname()

PRINTFILERAW( "&cImpressoras", "\caminho\arquivo.PRN", "Relatório" )

Tem Jeito ??

Desde já obrigado..

Link to comment
Share on other sites

Tente assim e reporte:





//--- imprime no spool do windows, liberando o micro para trabalhar.
ImpSpool( "CUPOM.TXT",, .T. ) // esta em DBMANT.PRG impressora USB/matricial
//--- opcionamente pode-se apagar o arquivo passando .t. no 3o. parametro.


FUNCTION ImpSpool( cFileTxt, cPorta, lErase )

LOCAL CPRINTER

// para capturar antes da impressão
// cPorta := PrnGetPorta()
// WinExec( cPorta )
// depois da impressão
// WinExex( "Net Use Lpt1: \Delete" )
// Ficou mais facil e simples do que criar as portas na Classe TDosPrn
// cPorta := If( cPorta == nil, Alltrim( PrnGetPort() ), cPorta ) ; lErase := If( lErase == nil, .T., lErase );

//cPorta := PrnGetPort()
Default cPorta := Alltrim( PrnGetPort() ), lErase:= .t.

cPrinter := PrinterPortToName( cPorta )

IF EMPTY( cPrinter )

cPrinter := PrinterPortToName( "USB002" )

IF EMPTY(cPrinter)

cPrinter := PrinterPortToName( "USB001" )

ENDIF

ENDIF

IF .NOT. FILE( cFileTxt )

MsgInfo( OemToAnsi( "NÇO ACHEI O ARQUIVO MODO TEXTO PARA IMPRIMIR NA MATRICIAL" ), ;
OemToAnsi( "NÇO ACHEI O ARQUIVO MODO TEXTO PARA IMPRIMIR NA MATRICIAL" ) )

RETURN( .F. )

ENDIF

IF .NOT. EMPTY( cPrinter ) // TEM USB

PrintFileRaw( cPrinter, TrueName( "CUPOM.TXT" ), "Impressão de Vendas" )

ELSEIF LEN( cPorta ) <= 5 .and. Left( Upper(cPorta), 4 ) = "LPT1"

//--- Spool Local - Matricial em LPT1
cPorta:= "PRN"

WAITRUN("COMMAND.COM /C COPY /B " + cFileTxt + " " + cPorta, 0 )

// By Marcelo Ferro
ELSEIF Left( Upper(cPorta),4) = "BEMA" .OR. Left( Upper(cPorta),3) = "COM" ) // Impressao em impressoras de rede com im

Set Printer To ( cPorta ) // Somente para setar a impressora
PrintFileRaw( cPorta , cFileTxt)
Set Printer To ( cImpPadrao )
FErase( cFileTxt )

ELSE

//--- Spool Remoto - Matricial em LPT1
WAITRUN("COMMAND.COM /C COPY /B " + cFileTxt + " " + cPorta, 0 )

ENDIF

IF lErase // Vem .T. da tela de vendas
FERASE( cFileTxt )
ENDIF

RETURN( .T. )

Link to comment
Share on other sites

*******************************
Function Imprime(cArq,cPrint)
*******************************
*
*
Local oPrn, aPrn:=GetPrinters()
if empty(aPrn)
   MsgInfo('Não há impressoras instaladas')
   return .f.
endif
If cPrint == Nil
 cPrint := GetDefaultPrinter()
EndIf
 
 nRet := PrintFileRaw(cPrint,cArq,'Pedido')
 if nRet < 1
    cMsg := 'Erro Imprimindo: '
   SWITCH nRet
      CASE -1
         cMsg += "Invalid parameters passed to function" ; EXIT
      CASE -2
         cMsg += "WinAPI OpenPrinter() call failed"      ; EXIT
      CASE -3
         cMsg += "WinAPI StartDocPrinter() call failed"  ; EXIT
      CASE -4
         cMsg += "WinAPI StartPagePrinter() call failed" ; EXIT
      CASE -5
         cMsg += "WinAPI malloc() of memory failed"      ; EXIT
      CASE -6
         cMsg += "Arquivo " + cArq + " não Localizado"   ; EXIT
      END
      MsgInfo(cMesg)
 EndIf
 
 Return .t.

http://www.pctoledo.com.br/forum/download/file.php?id=113&sid=e454b765df7a2625fd31b19ef84f5f28

Link to comment
Share on other sites

Faça assim:

PrinterSetup()

PRINTFILERAW(PrnGetName(), "\caminho\arquivo.PRN", "Relatório" )

Bom dia Pessoal

Trocamos as maquinas aqui do escritorio e todas vieram com Win 7 64, até ai tudo bem, só que para imprimir em matricial tive que usar o PrintFileRaw em todos fonts porque ainda uso o velho e rápido padrão Clipper para matricial. O problema é que tenho que colocar o nome da impressora na linha assim

PRINTFILERAW( "EPSON LX-300+ /II", "\caminho\MOSTRA13.PRN", "Relatório" )

O problema é que tem outras impressoras matriciais com nomes diferentes,

tô tentando assim, porém sem resultados.

hDC := GetPrintDC( GetActiveWindow() )
if hDC == 0

cImpressoras := prnGetname()
MSGINFO("Impressão cancelada pelo usuário","..::Impressão")
Return .f.
endif
Msginfo("&cImpressoras") Aqui não retorna a impressora selecionada com cImpressoras

e não imprime nada

Eu gostaria de algo assim

cImpressoras := prnGetname()

PRINTFILERAW( "&cImpressoras", "\caminho\arquivo.PRN", "Relatório" )

Tem Jeito ??

Desde já obrigado..

Link to comment
Share on other sites

Legal saber Ico, boa sorte.

Mas vale só o lembrete da dica do João, onde voce mesmo pode fazer a sua dialog de seleção das impressoras. Por muitos anos usei na forma como te passei a solucao, mas hoje em dia nas dialogs onde solicito dados para gerar relatorio sempre mantenho um combobox com as impressoras e confirmando ja vai direto. Fica menos trabalhoso para o usuario. E para pegar a lista das impressoras uso a funcao que o Joao colocou.

Veja a tela como é:

post-74-0-65524400-1385051306.jpg

abraços

Link to comment
Share on other sites

Fica muito legal mesmo, assim que tiver tempo vou tentar fazer isso

Eu ainda uso assim :)

hDC := GetPrintDC( GetActiveWindow() )

if hDC == 0

cImpressoras := prnGetname()

MSGINFO("Impressão cancelada pelo usuário","..::Impressão")

Return .f. ; endif

Isso para jatos e Laser, para as portas LPT1 sempre vai direto, basta escolher a impressora.

Já vou pensando nisso, as maquinas novas não estão imprimindo em um programa

de comtabilidade MS-DOS 16 bits feito em FoxBase, nem com o emulador, e acho que já tá hora

de converte-lo. :)

Link to comment
Share on other sites

  • 4 years later...
 

O que voce usa?

Te recomendo a NODOSIMP.EXE, muito boa, resolve seus problemas com impressão em modo texto.

abs,

Olá Pessoal,

Apesar do post ser antigo, estou precisando de uma ajuda.

Um cliente com um sistema de orçamentos rodando há mais de 20 anos, me procurou querendo que o mesmo imprime numa HP M1132, com o NODOSIMP consegui imprimir perfeito, porém estou tendo problema com orçamentos grandes, mesmo utilizando o parametro tamanho 160, o mais reduzido, não coube numa página, utilizo da seguinte forma:

Run NODOSIMP <nome do arquivo txt> 160

Existe algum parametro que trata essa questão de mais de uma página ou ele é limitado para imprimir em apenas uma página ?

Grato desde já, quem puder me ajudar.

 

Link to comment
Share on other sites

Veja se ajuda:

   SET PRINTER TO
	   SET DEVI TO PRINT
	   @ PROW(),00 SAY CHR(15)  // REDUZ 140
	   // SE QUERO LOGO
   RUN NODOSIMP &WARQ_WIN_TXT 80 SEL/GRA"LOGO.DAT"
   RUN NODOSIMP &WARQ_WIN_TXT 80 SEL
   RUN NODOSIMP &WARQ_WIN_TXT 96 SEL
   RUN NODOSIMP &WARQ_WIN_TXT 96 SEL/PRE/NOANSI
   RUN NODOSIMP &WARQ_WIN_TXT 120 SEL/APA/MAR9
   RUN NODOSIMP &WARQ_WIN_TXT 140 SEL/APA
	   SET PRINTER TO &WARQ_WIN_TXT

Link to comment
Share on other sites

Então Kapiaba,

O sistema é em Clipper, até peço desculpa pque o fórum aqui é Fivewin, mas como vi este post sobre o nodosimp, resolvi pedir ajuda aqui, no fórum do clipper, ninguém soube me informar.

Vc sabe que no Clipper, qdo está imprimindo, chegando no final da folha, só mandar um @ 01,00 say <alguma coisa>, imprime na próxima página, estou fazendo desta maneira no txt que gero p/ chamar com o nodosimp, porém não salta página.

Preciso saber qual o comando que o nodosimp interpreta para saltar página. 

Link to comment
Share on other sites

 

Amiguinhos,

Tente CHR(12) para o comando Eject, mas tinha um macete. Mas pelo que lembro se você enviar uma impressão em um numero de linha menor que o PROW() atual o eject acontece normalmente quando usado diretamente no momento da impressão.

Olá Rochinha,

É exatamente isso que faço em impressoras matriciais, mas na HP não deu certo, vou tentar o CHR(12) conforme sugeriu.

 

Link to comment
Share on other sites

Deu certo o CHR(12) Rochinha,

Obrigado pela ajuda.

Agradeço tbém o Kapiaba e o Jorge pelo apoio moral em migrar para XHARBOUR, é meu sonho, programo em Clipper desde 1992, fiz curso de Java em 2010 mas não entrou na minha cabela, agora HARBOUR ainda não tive oportunidade em dedicar tempo para estudar e por a mão na massa, mas em breve começarei, se Deus quiser, contarei com a ajuda de todos.

Grato.

 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...