Quintas,
Essa é a função onde é executada a função escolhida no menu.
Código: Selecionar todos
***************************************************************************
FUNCTION PullDown( aMenu1, nLi, nCi, nChr1, nChr2, lNivel)
LOCAL cArea, nLargura, nNumPro, nLf, nCf, nI,nOpcao
LOCAL aMenu_Tmp, nQtde_Lin, nCf_Est := 0
LOCAL cSTRING
IF(lNivel==NIL,lNivel:=.T.,)
FOR nI := 1 TO LEN(aMenu1)
ASIZE(aMenu1[nI],7)
NEXT
aMenu_Tmp := aMenu1
aMenu1:= {}
FOR nI := 1 TO LEN(aMenu_Tmp)
IF lNivel .OR. IF(aMenu_Tmp[nI,3] == NIL, .T., aMenu_Tmp[nI,3] <= VAL(NIVEL))
AADD(aMenu1, aMenu_Tmp[nI] )
ENDIF
NEXT
nLargura := LenLargura( aMenu1 )
nNumPro := LEN( aMenu1 )
IF nLi+nNumPro > 22; nQtde_Lin := 22 - nLi; nCf_Est += 3 ; ELSE; nQtde_Lin := nNumPro; ENDIF
nLf := nLi + nQtde_Lin + 1
nCf := nCi + nLargura + 1 + nCf_Est
IF nCf > 78
nCi -= nLargura + 1 + nCf_Est
nCf := nCi + nLargura + 1 + nCf_Est
ENDIF
IF nCi < 2
nCi := 2
nCf := nCi + nLargura + 1 + nCf_Est
ENDIF
cArea := SAVESCREEN( nLi, nCi-2, nLf + 1, nCf+nChr1+nChr2)
COR("BOX DA JANELA DO MENU")
JANELA2(nLi, nCi, nLf, nCf+nChr1+nChr2, .T.)
COR("MENU")
nOpcao := 1
WHILE nOpcao != 0
SET KEY K_LEFT TO Tecla()
SET KEY K_RIGHT TO Tecla()
FOR nI := 1 TO nNumPro
@ nLi + nI, nCi + 1 + nChr1 PROMPT PAD( aMenu1[ nI, 1 ], nLargura) NIVEL aMenu1[nI,3] ;
MESSAGE aMenu1[nI,4] WHEN aMenu1[nI,5]
NEXT
MENU TO nOpcao CHR LINHA nQtde_Lin COLOR VERTICAL
SET KEY K_LEFT TO
SET KEY K_RIGHT TO
IF nOpcao > 0
IF VALTYPE( aMenu1[ nOpcao, 2 ] ) == "B"
*cSTRING := BLOCKTOSTRING( aMENU1[nOPCAO,2] )
*cSTR1 := CBNEW( aMENU1[nOPCAO,2] )
*cSTR2 := CBSTRING( aMENU1[nOPCAO,2] )
*@ 23,10 SAY SUBSTR( cSTRING, AT( '||',cSTRING )+2, LEN(LEFT( cSTRING, RAT( ')',cSTRING ) ) )-AT( '||',cSTRING ) )
*INKEY(0)
EVAL( aMenu1[ nOpcao, 2] )
ELSE
IF SET(36) > 0
@ SET(36),00 SAY SPACE(80) COLOR COR(39)
ENDIF
PullDown( aMenu1[ nOpcao, 2 ], nOpcao + nLi + 1, 1 + nCi + (nLargura / 2),nChr1,nChr2, lNivel)
ENDIF
ENDIF
ENDDO
RESTSCREEN( nLi, nCi-2, nLf + 1, nCf+nChr1+nChr2, cArea )
RETURN NIL
Nessa parte do código é que executa o bloco de código:
Código: Selecionar todos
IF VALTYPE( aMenu1[ nOpcao, 2 ] ) == "B"
*cSTR1 := CBNEW( aMENU1[nOPCAO,2] )
*cSTRING := CBSTRING( cSTR1 )
*@ 23,10 SAY SUBSTR( cSTRING, AT( '||',cSTRING )+2, LEN(LEFT( cSTRING, RAT( ')',cSTRING ) ) )-AT( '||',cSTRING ) )
*INKEY(0)
EVAL( aMenu1[ nOpcao, 2] ) // Aqui executa o bloco de código
ELSE
O
aMEnu1[nOpcao,2] é o codeblock que tem a string da funcao { " &Por Condicao de venda ",
{||RELVEN10()}},;
Eu quero pegar essa string. Porque daí antes da linha do Eval() eu imprimo na tela o nome da função
@ 23,10 SAY SUBSTR( cSTRING, AT( '||',cSTRING )+2, LEN(LEFT( cSTRING, RAT( ')',cSTRING ) ) )-AT( '||',cSTRING ) )
Mas pelos testes quando usa a função CBNew direto no vetor funciona tipo: cSTR1 = CBNew( {||RELVEN10()} )
Agora quando vem por referencia que é o caso em questão: cSTR1 = CBNew( aMENU1[nOPCAO,2] ) não funciona... Para mim o problema tá aqui. O que é enviado para a função CBNew() ou do jeito que é enviado.
Daí já não consigo pegar a string....
Rubens