Es posible crear un listbox de un array que es una matriz que se arma en tiempo de ejecucion ?
Yo estoy haciendo esto pero no me resulta, o como podria hacerlo usando el Xbrowse, creo q es mejor alternativa por que luego quiero modiciar una de las celdas?? .
- Code: Select all Expand view
FUNCTION mibrow()
********************** EJEMPLO CREA LA MATRIZ POR VIZUALIZAR
local Matriz_SINO:={}
local i :=0
LOCal j:=0
* esto es una matriz FICTICIA , EN ESTE CASO DE 6 FILAS Y 5 COLUMNAS, ESTOS VALORES PUEDEN CAMBIAR
FOR I = 1 TO 6
AADD(Matriz_SINO,{"S","N","S","S","N"})
NEXT
VERMATRIZ(Matriz_SINO) && LLAMO A LA FUNCION PARA VER LA MATRIZ CON UN BROWSE
return .t.
FUNCTION VerMatriz(Matriz_SINO)
******************************
* Funcion de Mantenimiento de Vector Matriz
************************************************
LOCAL oDlg, oBrw
local i :=0
local V_Header:={} && Vector de titulos
local V_ColSize:={} && Vector de tamaños de Columnas
local nColumnas:= 0
local B_Line:={}
nColumnas:=LEN(Matriz_SINO[1])
*Creamos encabezados y anchos de columnas del browse
for i = 1 to nColumnas
AADD(V_Header ,str(i,3,0))
AADD(V_ColSize,20)
next i
*Creamos la macro para armar el codeblock para los campos Arrays a visalizar
* y formar este modelo.. {|| Mat[oBrw:nAt, 1] ,Mat[oBrw:nAt, 2], Mat[oBrw:nAt, 3], ....Mat[oBrw:nAt, nColumnas] }
B_Line:=""
for i = 1 to nColumnas
B_Line=B_Line + "Matriz_SINO[oBrw:nAt]["+alltrim(str(i,10,0))+"]"+if(i=45,"",",")
next i
B_Line= "{ || {"+B_Line+"} }" && Se Arma el codeblock macro final
DEFINE DIALOG oDlg FROM 2, 2 TO 30,150 TITLE "Matriz de Si o NO "
@ 0, 0 SAY "Matriz " OF oDlg
@ 1, 2 LISTBOX oBrw FIELDS "" HEADERS "" OF oDlg
oBrw:aHeaders := V_Header && Cargo los titulos
oBrw:aColSizes := V_ColSize && Cargo los anchos de culumna (Size)
oBrw:nAt = 1
// bLine is a codeblock that returns an array
// if you need a 'traditional column based browse' have a look at TcBrowse
oBrw:bLine := &B_Line && asigno la macro { || B_Line } AQUI FALLA !!!! NO EXISTE VARIABLE: Matriz_SINO
oBrw:bGoTop = { || oBrw:nAt := 1 }
oBrw:bGoBottom = { || oBrw:nAt := Eval( oBrw:bLogicLen ) }
oBrw:bSkip = { | nWant, nOld | nOld := oBrw:nAt, oBrw:nAt += nWant,;
oBrw:nAt := Max( 1, Min( oBrw:nAt, Eval( oBrw:bLogicLen ) ) ),;
oBrw:nAt - nOld }
oBrw:bLogicLen = { || Len( Matriz_SINO ) }
oBrw:cAlias = "Array" // Just put something
@ 09, 04 BUTTON "&Editar" OF oDlg ACTION msginfo("estoy en la linea " + str(oBrw:nAt,10,0),"oki ")
@ 09, 20 BUTTON "&Salir" OF oDlg ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTERED
RETURN nil
Muchas gracias
Lubin