Hola Foro
Se podria montar un browse en tiempo de ejecucion ? con array le cambio el bLine y funciona perfecto pero con una dbf no me va.
Un saludo
Twbrowse de Hernan
Sí se puede, usando el mismo bline. En el bline colocaremos la variable que contiene _ a mostrar. Yo lo he usado así y no he tenido problemas. Aquí tienes lo más principal de la función que uso, a lo mejor hay mejores formas pero al menos a mí me funciona:
Espero que te sirva
Un saludo
Marcelo Jingo
Code: Select all
//ctit = titulo de la ventana con el browse
//cfile = nombre de la tabla a mostrar (archivo)
//calias = alias de la tabla
function Ed1(ctit,cfile,calias)
// bla,bla
// bla,bla
nfields:=fcount()
encabeza:=array(nfields)
ancho1:=array(nfields)
campos:=array(nfields)
justif:=array(nfields)
///campos2 es la variable que usaremos en el bline
campos2:="{"
campos3:=array(nfields)
malias:=alias()+"->"
campo_tip:=array(nfields)//tipo de dato
for i=1 to nfields
encabeza[i]:=field(i)
tmpvar:=&(field(i))
campos[i]:=field(i)
campos3[i]:=malias+campos[i]
campo_tip[i]:=valtype(&(field(i)))
justif[i]:=.f.
if campo_tip[i]=="N"
tmpvar:=str(tmpvar)
campos2+="str("+malias+campos[i]+")"
justif[i]:=.t.
elseif campo_tip[i]=="D"
tmpvar:=dtoc(tmpvar)
campos2+="DTOC("+malias+campos[i]+")"
elseif campo_tip[i]=="M"
campos2+='"<MEMO>"'
tmpvar:="<MEMO>"
else
campos2+=malias+campos[i]
endif
if i!=nfields
campos2+=","
endif
fontwith:=GetFontInfo(oFont)
ancho1[i]:=(len(tmpvar)+1)*fontwith[2] // en pantalla
next
campos2+="}"
DEFINE FONT ofont NAME "MS Sans Serif" size 0,-12 //OF Dialog_ed
DEFINE WINDOW oWinGen MDICHILD OF oWin ;
TITLE ctit+". Archivo: "+cfile COLOR "W+/W"
@2,175 listbox oList fields ;
of oWinGen size 313,172 update font ofont pixel
olist:calias=calias
oList:ajustify:=justif
oList:acolsizes:=ancho1
oList:aheaders:=encabeza
oList:lcellstyle:=.t.
oList:nlinestyle:=1
olist:lAdjLastCol:=.f.
olist:lAdjBrowse:=.f.
oList:bline:={||&campos2}
// y más bla,bla
//////////////////////////
////////////////////////////////////////////////////
// La función la llamo de la siguiente manera
lfamtr:=cGetNewAlias("lfamtr")
use &cfilefam shared alias (lfamtr) new
index on (lfamtr)->cod_fam to famt_i
(lfamtr)->(ED1("Actualizar Familias de Trabajadores",cfilefam,lfamtr))
Un saludo
Marcelo Jingo
Lo que yo hago es crear el array para bLine como si fuera una cadena de caracteres, yluego la convierto en el bloque de codigo necesario para bLIne
Code: Select all
LOCAL cArray := "{"
FOR nContador := 1 TO LEN(aFields) // del DBSTRUCT
DO CASE
CASE VALTYPE(aFields[nContador,1]) = "C"
IF LEN(aFields[nContador]) = 7
IF aFields[nContador,7]
cArray += aFields[nContador,1]+","
ENDIF
ELSE
IF aFields[nContador,3] <> NIL
cArray += "TRANSFORM("+::cAlias+"->"+aFields[nContador,1]+",'"+aFields[nContador,3]+"'),"
ELSE
cArray += ::cAlias+"->"+aFields[nContador,1]+","
ENDIF
ENDIF
ENDCASE
NEXT nContador
cArray := SUBSTR(cArray,1,LEN(cArray)-1)+"}"
/* hasta este punto tenemos el array como texto, ahora tenemos que convertilro en un bloque de codigo */
::oBrowse:bLine := cToBlock(cArray)
Saludos
R.F.
R.F.