Jump to content
Fivewin Brasil

FUNCTION ISPRINT() Alguém testou


kapiaba

Recommended Posts

citação:

Eu fiz uns teste, mas em alguns testes me retornou que a impressora não estava instalada, mas estava e se ignorava a mensagem ele imprime sem problema. Por enquanto abortei os testes.

Leonardo Machado

Porto Alegre-RS

Hwgui + Mysql / xHarbour 1.0.0


id=quote>id=quote>

Leonardo, este programa não é de autoria do Rochinha??

Tens como entrar em contacto com ele e reportar os erros, para ver a opinião dele?

Abraços.

João Santos - São Paulo.

kmt_karinha@pop.com.br

kapiaba@brfree.com.br

Fone: (11) 3106-2832

FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe

Link to comment
Share on other sites

citação:

Esta Aqui é boa..


id=quote>id=quote>

ICO. Será que devo cobrar Royalties?

citação:

Galera alguém testou esta postagem do Rochinha?


id=quote>id=quote>

Eu uso esta função em meus sistemas, fiz testes inclusive com impressoras virtuais e uma HP USB para ver o retorno e usar ou não. O codigo na realidade estava em algum exemplo para xHarbour, então traduzi os DEFINES para o bloco IF..ENDIF e transformei em uma função de uso geral.

Mas qual o problema que voce relatou?

Devo lembra-los que uso o Harbour 45.

Editado por - rochinha on 13/11/2008 11:58:11

Link to comment
Share on other sites

citação:

citação:

Esta Aqui é boa..


id=quote>id=quote>

ICO. Será que devo cobrar Royalties?

citação:

Galera alguém testou esta postagem do Rochinha?


id=quote>id=quote>

Eu uso esta função em meus sistemas, fiz testes inclusive com impressoras virtuais e uma HP USB para ver o retorno e usar ou não. O codigo na realidade estava em algum exemplo para xHarbour, então traduzi os DEFINES para o bloco IF..ENDIF e transformei em uma função de uso geral.

Mas qual o problema que voce relatou?

Devo lembra-los que uso o Harbour 45.

Editado por - rochinha on 13/11/2008 11:58:11


id=quote>id=quote>

Rochinha, podes mostrar um exemplo completo na prática?

Obrigado.

João Santos - São Paulo.

kmt_karinha@pop.com.br

kapiaba@brfree.com.br

Fone: (11) 3106-2832

FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe

Link to comment
Share on other sites

citação:

citação:

Esta Aqui é boa..


id=quote>id=quote>

ICO. Será que devo cobrar Royalties?

citação:

Galera alguém testou esta postagem do Rochinha?


id=quote>id=quote>

Eu uso esta função em meus sistemas, fiz testes inclusive com impressoras virtuais e uma HP USB para ver o retorno e usar ou não. O codigo na realidade estava em algum exemplo para xHarbour, então traduzi os DEFINES para o bloco IF..ENDIF e transformei em uma função de uso geral.

Mas qual o problema que voce relatou?

Devo lembra-los que uso o Harbour 45.

Editado por - rochinha on 13/11/2008 11:58:11


id=quote>id=quote>

Olá Rochinha,

O Problema que em meus teste, ele considera que a impressora PDF CREATOR não esta instalada.

Leonardo Machado

Porto Alegre-RS

Hwgui + Mysql / xHarbour 1.0.0

Link to comment
Share on other sites

Aqui:

Codigo:


#include "FiveWin.ch"

Function main()

aArray := GetPrinters()

for i = 1 to len(aArray)

cPrinterName := substr( aArray, 1, at( ",", aArray)-1 )

? "A impressora " + cPrinterName, IsPrint( alltrim( cPrinterName ) )

next

Return nil

Function GetPrinters()

Local aPrinter := {}

Local cAllEntries

Local cEntry

Local nStart

Local cName

Local cPrn

Local cPort

Local nJ

cAllEntries := STRTRAN( GetProfString( "Devices" ), Chr( 0 ), CRLF )

For nStart := 1 To MlCount( cAllEntries )

cName := MemoLine( cAllEntries,,nStart)

cEntry := GetProfString( "Devices",cName,"")

nJ := 2

Do While ! Empty(cPort := StrToken(cEntry,nJ++,","))

Aadd(aPrinter,Trim(cName)+" , "+Trim(cPort))

EndDo

Next

Return(aPrinter)

function IsPrint( QuePrinter )

LOCAL nStatus

DEFAULT QuePrinter := "LPT1:"

nStatus := PrnStatus( QuePrinter )

if nStatus < 1 ; return "Impressora OK"

elseif nStatus = 1 ; return "Impressora Pausada"

elseif nStatus = 2 ; return "Impressora com Erro"

elseif nStatus = 4 ; return "Impressora Deletando"

elseif nStatus = 8 ; return "Impressora em Modo Bandeja"

elseif nStatus = 16 ; return "Impressora Sem Papel"

elseif nStatus = 32 ; return "Impressora em Modo Manual"

elseif nStatus = 64 ; return "Impressora com Problema no Papel"

elseif nStatus = 128 ; return "Impressora OffLine"

elseif nStatus = 256 ; return "Impressora com IO Ativo"

elseif nStatus = 512 ; return "Impressora Ocupada"

elseif nStatus = 1024 ; return "Impressora Imprimindo"

elseif nStatus = 2048 ; return "Impressora Memoria Lotada"

elseif nStatus = 4096 ; return "Impressora Nao Instalada"

elseif nStatus = 8192 ; return "Impressora Aguardando"

elseif nStatus = 16384 ; return "Impressora Processando"

elseif nStatus = 32768 ; return "Impressora Inicializando"

elseif nStatus = 65536 ; return "Impressora em Atencao"

elseif nStatus = 131072 ; return "Impressora Toner Baixo"

elseif nStatus = 262144 ; return "Impressora Sem Toner"

elseif nStatus = 524288 ; return "Impressora PAGE_PUNT"

elseif nStatus = 1048576 ; return "Impressora Intervencao do Usuario"

elseif nStatus = 2097152 ; return "Impressora Sem Memoria"

elseif nStatus = 4194304 ; return "Impressora Tampa Aberta"

elseif nStatus = 8388608 ; return "Impressora Servidor Desconhecido"

elseif nStatus = 16777217 ; return "Impressora POWER_SAVE"

endif

id=code>id=code>

Link http://www.5volution.com/forum/kapiaba.zip

Link to comment
Share on other sites

citação:

Aqui:

Codigo:


#include "FiveWin.ch"

Function main()

aArray := GetPrinters()

for i = 1 to len(aArray)

cPrinterName := substr( aArray, 1, at( ",", aArray)-1 )

? "A impressora " + cPrinterName, IsPrint( alltrim( cPrinterName ) )

next

Return nil

Function GetPrinters()

Local aPrinter := {}

Local cAllEntries

Local cEntry

Local nStart

Local cName

Local cPrn

Local cPort

Local nJ

cAllEntries := STRTRAN( GetProfString( "Devices" ), Chr( 0 ), CRLF )

For nStart := 1 To MlCount( cAllEntries )

cName := MemoLine( cAllEntries,,nStart)

cEntry := GetProfString( "Devices",cName,"")

nJ := 2

Do While ! Empty(cPort := StrToken(cEntry,nJ++,","))

Aadd(aPrinter,Trim(cName)+" , "+Trim(cPort))

EndDo

Next

Return(aPrinter)

function IsPrint( QuePrinter )

LOCAL nStatus

DEFAULT QuePrinter := "LPT1:"

nStatus := PrnStatus( QuePrinter )

if nStatus < 1 ; return "Impressora OK"

elseif nStatus = 1 ; return "Impressora Pausada"

elseif nStatus = 2 ; return "Impressora com Erro"

elseif nStatus = 4 ; return "Impressora Deletando"

elseif nStatus = 8 ; return "Impressora em Modo Bandeja"

elseif nStatus = 16 ; return "Impressora Sem Papel"

elseif nStatus = 32 ; return "Impressora em Modo Manual"

elseif nStatus = 64 ; return "Impressora com Problema no Papel"

elseif nStatus = 128 ; return "Impressora OffLine"

elseif nStatus = 256 ; return "Impressora com IO Ativo"

elseif nStatus = 512 ; return "Impressora Ocupada"

elseif nStatus = 1024 ; return "Impressora Imprimindo"

elseif nStatus = 2048 ; return "Impressora Memoria Lotada"

elseif nStatus = 4096 ; return "Impressora Nao Instalada"

elseif nStatus = 8192 ; return "Impressora Aguardando"

elseif nStatus = 16384 ; return "Impressora Processando"

elseif nStatus = 32768 ; return "Impressora Inicializando"

elseif nStatus = 65536 ; return "Impressora em Atencao"

elseif nStatus = 131072 ; return "Impressora Toner Baixo"

elseif nStatus = 262144 ; return "Impressora Sem Toner"

elseif nStatus = 524288 ; return "Impressora PAGE_PUNT"

elseif nStatus = 1048576 ; return "Impressora Intervencao do Usuario"

elseif nStatus = 2097152 ; return "Impressora Sem Memoria"

elseif nStatus = 4194304 ; return "Impressora Tampa Aberta"

elseif nStatus = 8388608 ; return "Impressora Servidor Desconhecido"

elseif nStatus = 16777217 ; return "Impressora POWER_SAVE"

endif

id=code>id=code>

Link http://www.5volution.com/forum/kapiaba.zip


id=quote>id=quote>

ValeW garoto, obrigado!

Dúvida:

Posso trocar esta FUNCAO ISPRINT() POR ISPRINTER() DO XHARBOUR?? O que achas??

Abraços.

João Santos - São Paulo.

kmt_karinha@pop.com.br

kapiaba@brfree.com.br

Fone: (11) 3106-2832

FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe

Link to comment
Share on other sites

Tirado do Manual do Clipper 5.2


ISPRINTER( )

Propósito:Testar se a impressora conectada na LPT1 está pronta para impressões.

Sintaxe: ISPRINTER( ).

Exemplo:

:

RESPOSTA := "S"

@ 22,10 SAY "CONFIRMA SAÃDA DO RELATÓRIO...:" GET RESPOSTA

READ

IF .NOT. ISPRINTER( ) // verifica se a impressão não se

// encontra pronta.

@ 23,10 SAY "IMPRESSÃO NÃO PRONTA"

TONE(300,1) // emite um som

INKEY(3) // aguarda três segundos

LOOP // sobe até a linha do DO WHILE

ENDIF

REPORT FORM RELFOLHA TO PRINT // saída do relatório.

id=code>id=code>

Abraços..

Luiz Arruda icon_smile_8ball.gif

FWH24-WS-xHB 9950-xDev

ico.corumba@gmail.com

Editado por - ico on 17/11/2008 10:11:14

Link to comment
Share on other sites

Sintaxe: ISPRINTER( ).

BOA, MUITO BOA!!! KKKKKKKKKKK

É POR ESTAS E OUTRAS, QUE SEMPRE USEI CLIPPER 5.3B.

Obrigado Luiz, o que quero, é a SINTAXE INTERNA DO COMANDO.

O que a funçao faz, eu SAY.

Mesmo assim, valew()

Abraços.

João Santos - São Paulo.

kmt_karinha@pop.com.br

kapiaba@brfree.com.br

Fone: (11) 3106-2832

FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe

Link to comment
Share on other sites

  • 5 years later...

Estou com esse mesmo problema com o IsPrinter()

Vez por outra ele retorna .F., mesmo tendo uma impressora instalada. Espero alguns segundos SysWait(1) e tento novamente e ele retorna .T.

Muuuuito estranho!

Então, substitui pela função:

   // Verifica se tem impressora instalada no MS-Windows -> Substitui a função IsPrinter()   //
   // Na visualização essa rotina não é necessária porque o FWH já checa se tem impressoras. //
   PRINT oPrn
      if Empty( oPrn:hDC )
         MsgStop("Não encontrei nenhuma impressora instalada no seu MS-Windows ou não está ligada!" + CRLF + CRLF + ;
                 "É necessário ter pelo menos uma impressora configurada no MS-Windows para visualizar ou imprimir relatórios no sistema.",;
                 "(OASyS) Relatórios - ATENÇÃO: Verifique a impressora.")
         Return (.F.)
      endif
   ENDPRINT

Link to comment
Share on other sites

Em harbour, eu acho que é: HB_IsPrinter() ou FT_IsPrint().


Exemplo:



IF ! ft_IsPrint()
? "PRN is not ready!"
ENDIF

IF ! ft_IsPrint( "COM2" )
? "Check the device on COM2. Something is wrong."
ENDIF

IF ! ft_IsPrint( "/dev/lp0" )
? "Oops, not available."
ENDIF


Link:





Em xHarbour:


oPrn:= GetPrinters()

oPrn retorna um array com o nome das impressoras instaladas, se for passado o parametro <lPorts> como .T. um 2º array sera retornado {Nome da impressora, Porta da Impressora}



cPrinter := GETDEFAULTPRINTER()

Retorna o nome da impressora padrão.


XISPRINTER()

Não encontrei informações, mas creio que seja uma especie de SPRINTER() adequado ao SO Windows.


? PRINTEREXISTS("HP LaserJet 1200 Series PCL")

Retorna .T. se a impressora passada estiver instalada.



IF EMPTY( PRINTERPORTTONAME( "lpt1", .T. ) )
Alert( "No printer installed - cannot continue" )
QUIT
ENDIF


Pode ser passado uma porta COM tambem.



em xharbour\doc existem documentos.txt dos quais podem ser geradas a documentação do xharbour, tem uns .BATS que fazem isso. De uma olhadinha.


Um exemplo:



FUNCTION CHECAIMP(cLPT)

LOCAL lVOLTA := .F., lLPT_VALID := .F., lLPTMAPOK := .F. ,;
cLPT_LIDA, cLPT_STATUS, cLPT_MAP
cLPT := UPPER(STRTRAN(cLPT,':'))
IF LEN(cLPT)==1
IF VAL(cLPT)>=1 .AND. VAL(cLPT)<=3
cLPT := 'LPT'+cLPT
ENDIF
ENDIF
IF cLPT $ 'LPT1|LPT2|LPT3'
lLPT_VALID := .T.
ENDIF
IF lLPT_VALID
cCOMANDO := 'NET USE > NETIMP' + RIGHT(cNETNAME,2) +'.TXT'
!(cCOMANDO)
IF FILE('NETIMP' + RIGHT(cNETNAME,2) +'.TXT')
HANDLE = FOPEN('NETIP'+cVOLTA+'.TXT')
WHILE .NOT. FEOF(HANDLE)
TEMP = FREADLINE(HANDLE)
IF ' LPT'$TEMP
cLPT_STATUS := UPPER(TOKEN(TEMP,' ',1))
cLPT_LIDA := UPPER(TOKEN(TEMP,' ',2))
cLPT_MAP := UPPER(TOKEN(TEMP,' ',3))
IF 'DESCON'$cLPT_STATUS
lLPTMAPOK := NETREDIR(cLPT_LIDA+":",cLPT_MAP)
ENDIF
IF cLPT$cLPT_LIDA .AND. lLPTMAPOK
lVOLTA := .T.
ENDIF
ENDIF
ENDDO
FCLOSE(HANDLE)
ELSE
lVOLTA := ISPRINTER()
ENDIF
ELSE
DBOX('Porta de Impressora Invalida: '+cLPT)
lVOLTA := .F.
ENDIF
RETURN (lVOLTA)


Link to comment
Share on other sites

Descobri essa função dentro do Printer.prg que funciona legalzinha: ComDlgXErr()

Não achei a documentação dela, mas detecta se tem impressora instalada ou não no Windows.

   // Verifica se tem impressora instalada no MS-Windows -> Substitui a função IsPrinter()   //
   // Na visualização essa rotina não é necessária porque o FWH já checa se tem impressoras. //
   if ComDlgXErr() != 0
      MsgStop("Não estou conseguindo me conectar à sua impressora para iniciar o processo de "+iif(lTela,"visualização.","impressão.") + CRLF + CRLF + ;
              "Por favor, verifique se a impressora está instalada corretamente no seu MS-Windows." + CRLF + CRLF + ;
              "É necessário ter pelo menos uma impressora configurada no MS-Windows para "+iif(lTela,"visualizar","imprimir")+" relatórios no sistema.",;
              "(OASyS) Relatórios - ATENÇÃO: Verifique a impressora.")
      lRet := .F.
   endif

Link to comment
Share on other sites

O bom da bagça, é que não falta alternativa:

isprint.c
/ * 
  * $ Id: isprint.c 7892 2007-11-01 16:03:54 Z druzus $ 
  * / 
  / * 
  * Código fonte Harbour Projeto: 
  Função * ISPRINTER () 
  * 
  * Copyright 1999-2007 Viktor Szakats <viktor.szakats@syenar.hu> 
  * Www - http://www.harbour-project.org 
  * 
  * Este programa é software livre, você pode redistribuí-lo e / ou modificá- 
  * Sob os termos da GNU General Public License conforme publicada pela 
  * Free Software Foundation, versão 2, ou (a seu critério) 
  * Qualquer versão posterior. 
  * 
  * Este programa é distribuído na esperança de que ele possa ser útil, 
  Mas SEM NENHUMA GARANTIA, nem mesmo a garantia implícita de 
  * COMERCIALIZAÇÃO ou de ADEQUAÇÃO A UM DETERMINADO FIM.  Veja o 
  * Licença Pública Geral GNU para obter mais detalhes. 
  * 
  * Você deve ter recebido uma cópia da Licença Pública Geral GNU 
  * Junto com este programa, veja a cópia de ficheiros.  Se não, escreva para 
  * A Free Software Foundation, Inc., 59 Temple Street, Suite 330, 
  * Boston, MA 02111-1307 EUA (ou visite o http://www.gnu.org/ site). 
  * 
  * Como uma exceção especial, o Projeto Harbour dá permissão para 
  * usos adicionais do texto contido em sua versão de Harbour. 
  * 
  * A exceção é que, se você ligar as bibliotecas Porto com outro 
  * Arquivos para produzir um executável, isso não, por si só fazer com que o 
  * Resultando executável a ser cobertos pela Licença Pública Geral GNU. 
  * O uso do executável que não é de forma restrita por conta de 
  * Ligando o código da biblioteca Harbour nele. 
  * 
  * Esta excepção, contudo, não invalida quaisquer outros motivos 
  * O arquivo executável pode ser cobertos pela Licença Pública Geral GNU. 
  * 
  * Esta excepção aplica-se apenas ao código liberado pelo Porto 
  * Projeto sob o nome Harbour.  Se você copiar o código de outro 
  * Harbour Projeto ou Free Software Foundation lança em uma cópia de 
  * Porto, como as licenças General Public License, a exceção não 
  * Não se aplica ao código que você adiciona dessa maneira.  Para evitar enganosa 
  * Ninguém quanto ao status de tais arquivos modificados, você deve excluir 
  * Este aviso exceção deles. 
  * 
  * Se você escrever modificações de seu próprio para Harbour, a escolha é sua 
  * Se permitir essa exceção para aplicar às suas modificações. 
  * Se você não deseja que, apague este aviso de exceção. 
  * 
  * / 
  # Include "hbapi.h" 
  # Include "hbapifs.h" 
  HB_EXPORT BOOL hb_printerIsReady (char * pszPrinterName) 
  { 
  BOOL bIsPrinter; 
  # If defined (HB_OS_DOS) 
  / * NOTA: solução específica DOS, usando interrupção BIOS * / 
  { 
  USHORT uiPort; 
  if (pszPrinterName == NULL) 
  pszPrinterName = "LPT1"; 
  if (hb_strnicmp (pszPrinterName, "PRN", 3) == 0) 
  { 
  união REGS regs; 
  . regs h ah = 2.; 
  . regs HB_XREGS dx = 0;. / * LPT1 * / 
  HB_DOS_INT86 (0x17, & regs, & regs); 
  bIsPrinter = (regs. h ah == 0x90.); 
  } 
  else if (strlen (pszPrinterName)> = 4 && 
  hb_strnicmp (pszPrinterName, "LPT", 3) == 0 && 
  (UiPort = atoi (pszPrinterName + 3))> 0) 
  { 
  união REGS regs; 
  . regs h ah = 2.; 
  . regs HB_XREGS dx = uiPort - 1.; 
  HB_DOS_INT86 (0x17, & regs, & regs); 
  bIsPrinter = (regs. h ah == 0x90.); 
  } 
  outro 
  bIsPrinter = false; 
  } 
  # Elif defined (HB_OS_WIN_32) 
  / * NOTA: Plataforma método independente, pelo menos, ele irá compilar e executar 
  em qualquer plataforma, mas o resultado pode não ser o esperado, 
  desde Unix / Linux não suporta LPT / COM por natureza, outros SOs 
  pode não refletir a presença física da impressora quando 
  tentando abri-la, uma vez que estamos a falar para o spooler. 
  [Vszakats] * / 
  { 
  Fhandle fhnd; 
  if (pszPrinterName == NULL) 
  pszPrinterName = "LPT1"; 
  fhnd = hb_fsOpen ((BYTE *) pszPrinterName, FO_WRITE | FO_SHARED | FO_PRIVATE); 
  bIsPrinter = (fhnd = FS_ERROR!); 
  hb_fsClose (fhnd); 
  } 
  # Else 
  { 
  / * TODO * / 
  HB_SYMBOL_UNUSED (pszPrinterName); 
  bIsPrinter = false; 
  } 
  # Endif 
  voltar bIsPrinter; 
  } 
  HB_FUNC (HB_ISPRINTER) 
  { 
  hb_retl (hb_printerIsReady (hb_parc (1))); 
  } 
  / * NOTA: O parâmetro é um XBase + + extensão ao longo do CA-Cl * pper.  [Vszakats] * / 
  HB_FUNC (ISPRINTER) 
  { 
  # Ifdef HB_COMPAT_XPP 
  HB_FUNC_EXEC (HB_ISPRINTER); 
  # Else 
  hb_retl (hb_printerIsReady (NULL)); 
  # Endif 
  } 
kkkkkkkkkkkkkkkkkk
Link to comment
Share on other sites

Isprinter()

A funçãi retorna (.T.) se a impressora conectada ao computador na porta LPT1, estiver em linha e pronta para imprimir.

Crisvam, se a impressora estiver instalada, e desligada, ele retorna .T. o que não é possivel controlar se ela está fora de linha.

Só retorna .F., se ela não estiver instalada, o que não está correto. Deveria avisar que não está LIGADA, a função que o rochinha postou seria a ideal, pois avisa se não está ligada, mas não funciona corretamente.

abs,

Link to comment
Share on other sites

Crisvam, você não entendeu, esta mensagem somente entrará, se não existir uma impressora instalada na pasta de impressoras do rWindows, Se existir e estiver desligada, o IsPrinter() não retorna .F., entende??

Você deve elaborar a mensagem:

Algo assim:

If !Isprinter()

MsgInfo("A impressora não está conectada a porta LPT1 ou está desligada","Sistema: Informa")

Return

Endif

abs,

Link to comment
Share on other sites

  • 1 year later...

Olá kapiaba boa noite!

desde que migrei de clipper para harbour (janeiro/2015) também, como todos perceberam que a função ISPRINTER(), bem como as novas funções modernas do harbour não informam corretamente o estado da impressora matricial (on/off line), como você muito bem explanou...

então no fórum pctoledo.com.br/forum e também no fórum oficial do harbour no google groups onde o Viktor Szakats participa, dentre outros, criadores, mantenedores, desenvolvedores do harbour estão... aí o próprio Viktor me respondeu, com esta função desenvolvida por ele mesmo entre 1999-2007 que chama-se "ISPRINT.C" - a qual você a reportou aqui, traduzindo-a até mesmo para o português.

Bom, mas, uma coisa nem o Viktor e nem V.Sa. ensina como chamá-la no nosso código fonte .PRG, pois o harbour já tem nativo a função ISPRINT() também dentro de uma de suas LIBs.

Então, prezado, como colocar, chamar e usar esta função em C++ no nosso código em harbour?

Qual sua sintaxe?

grato!

MVinfo - W de Paula.

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...