Página 1 de 1

Do with

Enviado: 30 Abr 2011 17:25
por Paulo Pereira
Ola..
Sei que no harbour nao se pode usar do whit, devesse chamar a funcao.. mas nesta rotina abaixo é parte de uma funcaao que trata da impressao.
vrotina é o nome da rotina a ser chamada. pode assumir varios nomes de funcoes:
do relgrupos with 1,2
do relmarcas with 2,1
entao sempre preciso usar a macro & (e comercial) nao tem um equivalente no harbour ??
podeia fazer
if vrotina=''relgrupos'
relgrupos(1,2)
elseif vrotinta='relvendas'
relvendas(2,1)
elseif..
..
.,mas ai nao fica generica

Código: Selecionar todos

.
.
if vret=1  // tela arq
    do &(vrotina) with 1,vordem  // tela/arq
else
     if ligaimp(.t.)
          do &(vrotina) with 2,vordem
     endif
endif
.


Re: Do with

Enviado: 30 Abr 2011 22:53
por alxsts
Olá!

Modernize-se! Esqueça macro (E comercial), Do, Do With, variávais Public e Private...

Código: Selecionar todos

FUNCTION Main()

   _Execute_( 1, 2 )   

   _Execute_( 2, 1 )

   RETURN NIL
//-------------------------------------------------------------------------------------------
PROCEDURE _Execute_( nPar1, vOrdem )

   LOCAL abRotinas:= { { |x,y| RelGrupos( x,y ) }, { |x,y| RelVendas( x,y ) } }
 
   if vret=1  // tela arq
       Eval( abRotinas[ 1 ], nPar1, vOrdem )      // do &(vrotina) with 1,vordem  // tela/arq
   Else
      If LigaImp( .t. )
         Eval( abRotinas[ 2 ], nPar1, vOrdem )   // do &(vrotina) with 2,vordem
      Endif
   Endif 

   RETURN
//-------------------------------------------------------------------------------------------

Re: Do with

Enviado: 03 Mai 2011 10:40
por Paulo Pereira
Valeu...

Re: Do with

Enviado: 03 Mai 2011 12:02
por alxsts
Olá!

Paulo: desculpe se te assustei...

Resolveu o teu problema? Conte detalhes por favor.

Re: Do with

Enviado: 03 Mai 2011 23:33
por Paulo Pereira
Oi,
O valeu ai, foi sem sarcasmo..
agradeco a tua solucao.. depois acabei vendo que esta funcao era chamada umas 10 rotinas diferentes, entao acabei mudando a funcao para nao ter que usar o EVAL..
Mas agradeço a atencao..

Obrigado