Jump to content
Fivewin Brasil

Uso do GetPrintDC()


oribeiro

Recommended Posts

Pessoal,

Mudanças no comando: GetPrintDC()

Eu sempre usei esse comando para permitir que o usuário trocasse a impressora que está como padrão dentro do sistema.

O usuário selecionava uma nova impressora e enquanto ele estava com o sistema aberto ela é que era acionada.

Agora com a versão FWH 18.01 ele não funciona mais porque ele abre a tela de seleção da impressora mas sem nenhum efeito sobre o sistema, ou seja, o sistema continua enviando para a impressora padrão definida no Windows.

Alguém já lidou com isso?

 

Link to comment
Share on other sites

Tente assim:

// Modifica a Impressora Default do Windows
FUNCTION DefaultPrinter()
	   LOCAL nPrn, nRet
	   // Abre a tela para a seleção da impressora
   /*
   GetPrintDC( GetActiveWindow() )
	   // Coloca a impressora selecionada como Default do Windows
   SetDefaultPrinter( PRNGETNAME() )
   */
	   nRet := PrinterSetUp()
	   nPrn := PrnGetName()
	   IF( nRet # 0 )
	      // NADA A FAZER MUDA O DEFULT DA IMPRESSORA EM TEMPO REAL.
      SetDefaultPrinter( PRNGETNAME() ) // MUDA O DEFAULT DA IMPRESSORA
	      MsgInfo( OemToAnsi( "Aten‡Æo Usu rio:                        " )+CRLF+ ;
               OemToAnsi( "Sua Impressora DEFAULT(PadrÆo) ‚:       " )+CRLF+ ;
                        ( "-> " + nPrn                               ),      ;
               OemToAnsi( "Sua Impressora DEFAULT(PadrÆo) ‚...     " ) )
	      sGetDefaultPrinter := GetDefaultPrinter()
	      IF PrnStatus( sGetDefaultPrinter ) = 4096
	         // Verifica se SPOOLER esta desligado e tenta liga-lo
         MsgRun( sGetDefaultPrinter +": "+isprint( GetDefaultPrinter() ) + ;
                         " ou Spooler Desligado.", "Status da Impressora", ;
                 {|| WinExec( "NET START SPOOLER", 7 ) } )
	      ENDIF
	      //? GetPrinter()
	   ELSE
	      MsgInfo( OemToAnsi( "ATEN€ÇO USUµRIO:                         " )+CRLF+ ;
               OemToAnsi( "VERIFIQUE SUA IMPRESSORA SE ESTµ LIGADA. " )+CRLF+ ;
               OemToAnsi( "OU SE ESTµ INSTALADA CORRETAMENTE...     " )+CRLF+ ;
               OemToAnsi( "TEM ALGUMA COISA ERRADA COM A IMPRESSORA?" )+CRLF+ ;
               OemToAnsi( "TECLE <ENTER> PARA CONTINUAR...          " ),      ;
               OemToAnsi( "VERIFIQUE SUA IMPRESSORA SE ESTµ LIGADA. " ) )
	      RETURN( .F. )
	   ENDIF
	RETURN NIL


 

Link to comment
Share on other sites

João,

Obrigado pela sua prontidão. Essa sua função é bem legal, mas o comando...

SetDefaultPrinter( PRNGETNAME() ) // MUDA O DEFAULT DA IMPRESSORA

...muda a impressora DEFAULT do Windows e esse é o meu problema. Antes, a função GetPrintDC() mudava a impressora apenas dentro do sistema e não no windows. 

Existe algum modo de voltar a funcionar como antes?

Link to comment
Share on other sites

Ou eu estou doido, ou não estou entendendo o que vc. quer.   PrinterSetup()  você escolhe uma das impressoras instaladas, mas não mexe com a impressora padrão, mas vai imprimir na impressora escolhida, ao sair da impressão, a impressora DEFAULT volta ao normal, se é que entendi sua pergunta;

Link to comment
Share on other sites

Nessa nova versão do FWH, com PrinterSetup() ou GetPrintDC() eu seleciono uma nova impressora e quando eu imprimo ele vai para a impressora DEFAULT do Windows e não para a que eu acabei de selecionar. Antes ele funcionava exatamente como você disse, ele imprimia na impressora que eu selecionei num desses comandos. Agora, parece que esses comandos não fazem nada. 

Eu tive esse mesmo problema em 2008 mas não sei como resolvi. Risos

Veja: http://forums.fivetechsupport.com/viewtopic.php?f=3&t=27403&hilit=GETPRINTDC

Estava funcionando até instalar a FWH18.01

 

Link to comment
Share on other sites

Simples, verifique a PRINTER.PRG da versão anterior e a PRINTER.PRG da versão atual. O que você modificou na versão anterior, faça uma copia da PRINTER.PRG anterior para PRINTER.OLD e copie a PRINTER.PRG E RPREVIEW.PRG da versão nova para a pasta do sistema e veja se tem necessidade de modificar a nova PRINTER.PRG

Link to comment
Share on other sites

Valeu a dica.

Apenas cancelei a linha 438 do PRINTER.PRG

METHOD End() CLASS TPrinter

   if ::hDC != 0
      if ! ::lMeta
         if ::lStarted
            EndDoc(::hDC)
         endif
      else
         Aeval(::aMeta,{|val| ferase(val) })
         ::aMeta  := {}
         ::hDCOut := 0
      endif
      if ::nOrient != nil
         if ::nOrient == DMORIENT_PORTRAIT
            ::SetPortrait()
         else
            ::SetLandscape()
         endif
      endif
      // PrinterEnd() // 01/03/2018 (Oscar): Tirei essa linha para que ele mantenha a impressora selecionada no GetPrintDC() sem mudar a impressora Default do Windows.
      DeleteDC( ::hDC )
      ::hDC := 0
   endif

   if ::oFont != nil
      ::oFont:End()
   endif

   oPrinter := nil

return nil

 

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