Página 1 de 1

Tbrowse c/array automático

Enviado: 10 Mai 2005 19:23
por MARCELOG
Na minha função de tbrowse com array utilizo o seguinte procedimento

aMatriz:={{a,b,c,d}{a,b,c,d}{a,b,c,d}{a,b,c,d}}
aTitu :={T1,T2,T3,T4)
aLarg :={10,10,10,10}

TbrArray(00,00,22,79,aMatriz,aTitu,aLarg)

FUNCTION TbrArray(Li,Ci,Lf,Cf,aMatriz,aTitu,aLarg)

LOCAL i:=1,a,oTbc

oTbr:=TBrowseNew(Li,Ci,Lf,Cf)
oTbr:HeadSep :="ÍÍÍ"
oTbr:ColSep :=" ³ "
oTbr:FootSep :="ÍÍÍ"

For a:=1 To Len(aTitu)
oTbc:= tbcolumnnew(aTitu[a],{|x|If(x == NIL,aMatriz[i,a],aMatriz[i,a]:=x)})
oTbc:Width:=aLarg[a]
oTbr:AddColumn(oTbc)
Next

oTbr:gotopblock :={||i:=1}
oTbr:gobottomblock :={||i:=LEN(aMatriz)}
oTbr:skipblock :={|n,nSavei|;
nSavei:=i,;
i:=If(n > 0,;
Min(Len(aMatriz),i + n),;
Max(1,i + n)),;
i - nSavei}

RETURN (oTbr)

Entretanto, o Loop FOR/NEXT não funciona.
Do jeito que está, ele dá erro BASE/1132 ao estabilizar.

Se criar uma variável e igualá-la a "a", eu vejo o Tbrowse com a array, mas todos os dados referem-se, no caso, a aMatriz[1,4], ou seja, todos os dados são iguais a letra "d".

For a:=1 To Len(aTitu) //com DBF e FieldWBlock() funciona
y:=a
oTbc:= tbcolumnnew(aTitu[a],{|x|If(x == NIL,aMatriz[i,y],aMatriz[i,y]:=x)})
oTbc:Width:=aLarg[y]
oTbr:AddColumn(oTbc)
Next

Se eu fizer conforme abaixo, no braço, criando uma rotina separada para cada array, funciona beleza.

Alguém sabe porquê?

Atenciosamente.

MGS

/*
oTbc:= tbcolumnnew("T1",{|x|If(x == NIL,aMatriz[i,1],aMatriz[i,1]:=x)})
oTbc:Width:=15
oTbr:AddColumn(oTbc)

oTbc:= tbcolumnnew("T2",{|x|If(x == NIL,aMatriz[i,2],aMatriz[i,2]:=x)})
oTbc:Width:=15
oTbr:AddColumn(oTbc)

oTbc:= tbcolumnnew("T3",{|x|If(x == NIL,aMatriz[i,3],aMatriz[i,3]:=x)})
oTbc:Width:=15
oTbr:AddColumn(oTbc)

oTbc:= tbcolumnnew("T4",{|x|If(x == NIL,aMatriz[i,4],aMatriz[i,4]:=x)})
oTbc:Width:=15
oTbc:ColorBlock:={|x|If(!x,{6,5},Nil)}
oTbr:AddColumn(oTbc)
*/