[firebase-br] dbeval e Aeval

Mário Reis secretariadogeral em acra.pt
Qui Jun 2 20:47:15 -03 2016


Bom 

Talvez devessesmos discutir o assunto para os emails pessoais de cada um
(secretariadogeral em acra.pt), mas como não consigo saber o seu aqui vai.
A ideia é lançar/chamar os programas a partir de menus parameterizados
O depois do Outm86 que eu nunca usei assim como o Summer 87 o salto foi 
significativa para o clipper5.# estagnou no clipper 5.3c.
Porém o DBEval começou logo na vaersão 5.0 e fucnionava muito bem alem 
de leve; fiz com um amigo uma aplicação toda parameterizadas desde 
menus, forms e reports, operações contabilisticas tudo era 
parameterizado foi desenhado ainda nos 286, era rápido no 486 e voava a 
jacto nos Pentium
Só que as caixas de texto sairam de moda e fori preciso avançar
A Partir de um dbeval V/executava qualquer codblock definido numa linha 
de texto de um ficheiro... Usavamos o dbeval a par do AEVAL, assim:

Function DefineBrowse( lin1,col1,lin2,col2, aCampos )
 // aRet, aCampos e nLinha sÆo Private em Ecr_Geral

 Local obMenu,nM:=1,oColumn, nT:=0
 Private nN
 M->nN:=0
 obMenu:=TBrowseNew(lin1, Col1, Lin2, Col2)
 obMenu:GoTopBlock:={|| nLinha := 1}
 obMenu:GoBottomBlock:={|| nLinha := Len(aRet)}

 If Len(aRet)=0
  AR_Append(aRet,aCampos,obMenu)
 EndIf
 // Actualiza os campos do Say
 AEval(aCampos,{|aEle| If(aEle[1]='S' .And.;
                 Eval(&(aEle[3])),EVal(&(aEle[4])),NIL)})

 // Actualiza os Campos de Totais e Mostra no Ecran
 For nN:=1 to Len(aCampos)
  If aCampos[nN][1]='T' .And. Eval(&(aCampos[nN][3]))
   DevPos(aCampos[nN][5][1],aCampos[nN][5][2])
   DevOutPict(EVal(&(aCampos[nN][4])),&(aCampos[nN][6])) 
  EndIf 
 Next

 obMenu:SkipBlock:={|nSkip, nStart| nStart  := nLinha,;
    nLinha := MAX( 1, MIN(Len(aRet), nVar := (nLinha + nSkip) ) ),;
    nLinha - nStart }
 obMenu:headsep:= "Ä"
 obMenu:colsep := "³"
 obMenu:Footsep:= "Ä"

 // 19:17 1995 Aug,16 Reis & Martins
 // !aEle[9] ==> Esconder=Sim e nÆo monta a coluna.
 //obMenu:AddColumn(TBColumnNew(aEle[2],&(aEle[5])))

* AEval(aCampos,{|aEle| If(aEle[1] $ 'SGM' .AND. !aEle[9],;
*       obMenu:AddColumn( TBColumnNew( aEle[2],&(aEle[5]) )),NIL)})
*   SETCOLOR("W+/B,W+/GB+,,,W+/B")
   For i=1 to Len(aCampos)
    If aCampos[i,1] $ 'SGM' .and. aCampos[i,9]!='T' // Esconder
     // Determina  larg Col p/ Padc()
     Nt:= oK( Eval( &(aCampos[i,5]) ) )
     nT:=IF( Len(aCampos[i,2])>nT,len(aCampos[i,2]),nT)
     oColumn:=TBColumnNew( Padc( aCampos[i,2] , nT ), &(aCampos[i,5]) )
     obMenu:AddColumn( oColumn )
    Else
     
     oColumn:=Nil                    // SenÆo esconde a Coluna

    Endif

   Next
 obMenu:GoBottom()
 obMenu:ForceStable()
Return(obMenu)


Mais detalhes sobre a lista de discussão lista