Page 1 of 1
Twbrowse de Hernan
Posted: Mon Feb 12, 2007 12:41 pm
by Frafive
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
Posted: Tue Feb 13, 2007 3:25 am
by sjingo
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:
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))
Espero que te sirva
Un saludo
Marcelo Jingo
Posted: Tue Feb 13, 2007 4:13 pm
by R.F.
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)
Posted: Thu Feb 15, 2007 11:50 am
by Frafive
Gracias por vuestra ayuda, ahora me funciona perfecto.