Estou com dificuldades em colocar um CodeBlock no evento ON CHANGE de um CheckBox.
O detalhe é que esse CodeBlock está em um elemento de uma matriz.
Queria fazer exatamente como fazemos com a macro substituição, mas no caso do codeblock atribuído a uma variável, está ficando sempre o conteúdo da última variável (pois trata-se de um codeblock)
Ex.:
No lugar disso
Código: Selecionar todos
on change {||ManipulaCheckAcessos(6,24,This.Value)}
Código: Selecionar todos
aCaixas:="{ { 10 , "teste" , {||ManipulaCheckAcessos(6,24,This.Value)} } , ;
{ 20 "teste2" , "" }
bBloco:= aCaixas[1][3]
// e ao criar o controle, que o evento seja
on change bBloco
Segue um código de exemplo que fiz, se eu colocar um IF lá na criação do controle, até resolvo meu problema, mas para o futuro gostaria de saber como se faz.
Código: Selecionar todos
#include "minigui.ch"
//-----------------------------------------------------------
Function Main()
//-----------------------------------------------------------
local nCaixa, nLinha, nColuna, bBloco, cNomeControle, nValorAcesso, aCaixas
define window form_acesso;
at 000,000;
width 760;
height 560;
title 'Teste';
main ;
nosize
define tab tab_acesso;
of form_acesso;
at 003,010;
width form_acesso.width-020;
height form_acesso.height-090;
font 'verdana';
size 010;
bold;
value 001;
flat
page 'Clientes'
// Coluna01 Coluna02 Coluna03
// aCaixas:={ { 005 , "Menu Clientes" , "{||ManipulaCheckAcessos(6,24,This.Value)}" } , ; // Enable ou Disable os chkbox_acesso_006 a 024
aCaixas:={ { 005 , "Menu Clientes" , "ManipulaCheckAcessos(6,24,This.Value)" } , ; // Enable ou Disable os chkbox_acesso_006 a 024
{ 007 , "Menu Clientes->Incluir" , "" } , ;
{ 008 , "Menu Clientes->Ver" , "" } , ;
{ 010 , "Menu Clientes->Transferir" , "" } , ;
{ 011 , "Menu Clientes->Pesquisar" , "" } , ;
{ 013 , "Tela do cliente->Botao Editar" , "" } }
nLinha=20
nColuna=120
FOR nCaixa = 1 to LEN(aCaixas)
nLinha = nLinha + 30
// msgbox("teste "+STR(nCaixa)+" " +HB_VALTOSTR(Empty(aCaixas[nCaixa][03]) ) )
IF Empty(aCaixas[nCaixa][03]) // Se não houver codeblock na coluna 3
bBloco:="Nothing()"
// bBloco:="{||Nothing()}"
ELSE
// AQUI, NAO SEI COMO COLOCAR O CODEBLOCK DENTRO DA VARIAVEL
// DE MODO QUE CADA "ON CHANGE" DE CADA CONTROLE CRIADO ABAIXO
// RECEBA O CODEBLOCK DA COLUNA 3 DA MATRIZ aCaixas, CASO POSSUA.
// bBloco := aCaixas[nCaixa][03]
// bBloco := &( "{ || " + aCaixas[nCaixa][03] + " }" )
// bBloco := & ( {||ManipulaCheckAcessos(6,24,This.Value)} )
// bBloco := "ManipulaCheckAcessos(6,24,This.Value)"
// bBloco:=aCaixas[nCaixa][03]
bBloco := "{||ManipulaCheckAcessos(6,24,This.Value)}"
ENDIF
cNomeControle="chkbox_acesso_"+RIGHT( "00"+ALLTRIM( STR( aCaixas[nCaixa][01] ) ) ,3 )
define checkbox &cNomeControle
caption aCaixas[nCaixa][02]
col nColuna
row nLinha
width 350
value .T.
fontname 'verdana'
fontsize 10
fontbold .T.
transparent .F.
on change &(bBloco)
// on change {||ManipulaCheckAcessos(6,24,This.Value)}
// on change & ( {||ManipulaCheckAcessos(6,24,This.Value)} )
// on change &bBloco
// on change bBloco
end checkbox
NEXT
end page
end tab
on key escape action thiswindow.release
end window
form_acesso.center
form_acesso.activate
Return
//-------------------------------------------------
//-------------------------------------------------
Function ManipulaCheckAcessos(nInicio,nFinal,lMostra)
// Caso, por exemplo, se nInicio=6 e nFinal=24, entao, confomre lMostra
// habilita ou desabilita os controles checkBox_006 ate checkbox_Acesso_024
// caso existam.
//-------------------------------------------------
Local nControleCount, cNomeControle
FOR nControleCount=nInicio TO nFinal
cNomeControle="chkbox_acesso_"+RIGHT("00"+ALLTRIM(STR(nControleCount)) ,3)
IF _IsControlDefined(cNomeControle,"Form_Acesso")
SETPROPERTY("Form_Acesso",cNomeControle,"ENABLED",lMostra)
ENDIF
NEXT
// MSGBOX("Funcionou-> "+Str(nInicio)+ " " + Str(nFinal) + " "+Hb_ValToStr(lMostra) )
Return
//-------------------------------------------------
//-----------------------------------------------------------
Function Nothing() // Retorna NIL
//-----------------------------------------------------------
MSGBOX("NADA")
Return Nil
//-----------------------------------------------------------
Grato por enquanto.


