Page 1 of 1

Mi pelea con xbrowsw

Posted: Mon Sep 21, 2009 11:37 am
by groiss
Hola.
Tengo un grograma en el que utilizo el twbrowse de Hernan, y quiero rehacerlo pero con txbrowse, supongo que todo será posible, pero no acabo de ver la forma de hacerlo. Las columnas del browse no siempre son las mismas, la edición es por celda aunque no todas las columnas son editables, las cabeceras de las columnas tienen definidas acciones, y está definido en los recursos, paso aponer parte del código:

Code: Select all

rdefine->(dbgotop())
while !rdefine->(eof())
    ccampos:=ccampos+",rtiempo->tiempo"+ALLTRIM(STR(indice,2,0))
    aadd(acargo,"rtiempo->tiempo"+ALLTRIM(STR(indice,2,0)))
    aadd(acabezas,rdefine->inicial)
    aadd(atamano,75)
    aadd(aacion,{|a,row,col|olbx:drawheaders(a:natcol(col)),rcheck(a:natcol(col),a)})
    aadd(acargo,"rtiempo->pena"+ALLTRIM(STR(indice,2,0)))
    ccampos:=ccampos+",str(rtiempo->pena"+ALLTRIM(STR(indice,2,0))+",4,0)"
    aadd(acabezas,"Pen.")
    aadd(atamano,35)
    aadd(aacion,{|a,row,col|olbx:drawheaders(a:natcol(col)),rcheck(a:natcol(col)-1,a)})
    indice++
    rdefine->(dbskip())
enddo
ccampos:=ccampos+",rtiempo->clasificar,str(rtiempo->penalizar)}}"
aadd(acargo,"rtiempo->clasificar")
aadd(acargo,"rtiempo->penalizar")
aadd(acabezas,"Clasificación")
aadd(acabezas,"Penalización")
aadd(atamano,90)
aadd(atamano,90)
aadd(aacion,{|a,row,col|olbx:drawheaders(a:natcol(col)),rcheck(a:natcol(col),a)})
aadd(aacion,{|a,row,col|olbx:drawheaders(a:natcol(col)),rcheck(a:natcol(col)-1,a)})
rtiempo->(dbsetfilter({||rtiempo->autorizado},"rtiempo->autorizado"))
rtiempo->(dbgotop())
olbx:=txbrowse():new(60,60,100,100,&ccampos,acabezas,atamano,rodlg,,,,,,,supfont,,,,,,"rtiempo")
olbx:bRClicked:={|nrow,ncol,nflag| rdescal(olbx,olbx:natcol(ncol))}
olbx:bldblclick:={|nrow,ncol,nflag| dblral(nrow,ncol,nflag,olbx,osay1)}
oLbx:bkeydown := { | nkey, nFlags | KBDral(nkey,nflags,olbx,osay1)}
olbx:leditcell:=.t.
olbx:lcellstyle:=.t.
OLBX:LAUTOEDIT:=.f.
olbx:nfreeze:=2
olbx:ldrawfooters:=.t.
olbx:aheaders:=acabezas
olbx:afooters:=acabezas
olbx:aactions:=aacion
olbx:cargo:=acargo
olbx:bbkcolor:={|r,c| olbxreg:=&(olbx:cAlias)->(OrdKeyNo()),if(olbxreg%2=0,rgb(255,255,150),16777215)}
olbx:btextcolor:={|r,c| 0}
olbx:lAdjBrowse:=.t.
olbx:lAdjLastCol:=.f.
olbx:nlinestyle:=10
 
Como podría hacer algo similar con xbrowse?
Un saludo y muchas gracias
José Luis

Re: Mi pelea con xbrowsw

Posted: Mon Sep 21, 2009 3:00 pm
by VPOZO
Hola..! no manejo muy bien el tema del xbrowse pero quizás te ayude ver el ejemplo \FWH\SAMPLES\TESTXBRW.PRG... ojala te ayude...

Re: Mi pelea con xbrowsw

Posted: Tue Sep 22, 2009 12:14 pm
by groiss
Muchas gracias, he mirado los distintos ejemplos, pero no acabo de ver la forma de crear las columnas, en funcion de la estructura del dbf abierto, por que sólo se pueden mostrar las columnas de _ y no todas, pero es que además no siempre es el mismo número de campos.
Agradecería alguna ayuda
Un saludo
José Luis

Re: Mi pelea con xbrowsw

Posted: Tue Sep 22, 2009 1:20 pm
by VPOZO
Por lo que yo he visto si tu haces algo asi:

USE CUSTOMER NEW
GO TOP
oBrw := TXBrowse():New( oWnd )
oBrw:SetRDD()
oBrw:CreateFromCode()

debiera crear un browse con todos _ de la tabla customer, lo que yo estoy haciendo para filtrar solo _ de la tabla es algo asi:

FUNCTION MAIN()
Select Rubros
Go Top
aNcamp:={1,2} //--> son los numeros correspondientes a la ubicacion de _
aTCamp:={"COD","DESCRIPCION"} //--> titulos de las columnas en el browse
Explora("RUBROS","TABLA DE RUBROS", aNCamp, aTCamp)
*
CLOSE DATA
RETURN Nil


*-------------------------------------------------------------------*
* Mantenedor de Tablas Pequeñas
* cAlias = Alias de la Tabla
* cTitu = Titulo del Formulario
* aNcamp = Numero del Campo dentro de la Tabla
* aTcamp = Titulo para el campo o columa en l browse
*-------------------------------------------------------------------*
FUNCTION EXPLORA(cAlias, cTitu, aNcamp, aTcamp)

DEFINE DIALOG oDlgExp FROM 2,3 TO 40, 40 TITLE cTitu RESOURCE "DLG_MANTENEDOR"
oDlgExp:lHelpIcon := .F.

//--> Construye el Browse
DbselectArea(cAlias)
DbGotop()

//--> Arma el Browse
oBrwEx = TXBrowse():New( oDlgExp )
oBrwEx:nMarqueeStyle := MARQSTYLE_HIGHLROW
oBrwEx:nColDividerStyle := LINESTYLE_BLACK
oBrwEx:nHeaderLines := 1
oBrwEx:lVScroll := .F.
oBrwEx:lHScroll := .F.
oBrwEx:nFreeze := 1
oBrwEx:lFastEdit := .T.

For i:= 1 To Len(aNcamp)
Aadd( aCol, oBrwEx:AddCol() )
aCol:cHeader := aTcamp
aCol:bStrData := GenFieldBlock( cAlias, aNcamp)

Next i

//--> Crea el Brw
oBrwEx:CreateFromResource( 900 )
oBrwEx:SetRDD()

ACTIVATE DIALOG oDlgExp CENTERED
RETURN Nil


*-----------------------------------*
* Retorna el Campo dentro de una tabla
*-----------------------------------*
STATIC FUNCTION GenFieldBlock( cAlias, nField )
RETURN {|| cValToChar( ( cAlias )->( FieldGet( nField ) ) ) }


Lo que hago es llenar _ que voy a mostrar en arreglos, La funcion GenFieldBlock retorna el nombre del campo en caracter, pero creo que igual funcionaria si en el arreglo con los numeros de _ pusiera el numbre del campo en forma literar como string.

Ojala lo soluciones..Suerte..!! :wink:

Re: Mi pelea con xbrowsw

Posted: Wed Sep 23, 2009 12:22 pm
by groiss
Muchas gracias, parece que con tu ayuda esto empieza a ir para adelante, lo que me sucede es que soy incapaz de editar ninguna celda, aquí pongo mi código, a ver si me ayudas a ver en donde meto la pata.
Muchisimas gracias nuevamente

Code: Select all

@ 2,2 xbrowse olbx of rodlg

ocol:=olbx:addcol()
ocol:bstrdata:={||rtiempo->nombre}
ocol:cheader:="Corredor"
ocol:odatafont:=supfont
ocol:cargo:="rtiempo->nombre"
ocol:nwidth:=200

ocol:=olbx:addcol()
ocol:bstrdata:={||rtiempo->dorsal}
ocol:cheader:="Nº"
ocol:odatafont:=supfont
ocol:cargo:="rtiempo->dorsal"
ocol:nwidth:=30

ocol:=olbx:addcol()
ocol:bstrdata:={||rtiempo->Vehiculo}
ocol:cheader:="Vehiculo"
ocol:odatafont:=supfont
ocol:cargo:="rtiempo->vehiculo"
ocol:nwidth:=160

ocol:=olbx:addcol()
ocol:bstrdata:={||alltrim(rtiempo->clase)+alltrim(rtiempo->division)}
ocol:cheader:="GR"
ocol:odatafont:=supfont
ocol:cargo:="rtiempo->clase"
ocol:nwidth:=40

indice:=1
rdefine->(dbgotop())
while !rdefine->(eof())
    ocol:=olbx:addcol()
    ocol:bstrdata:=GenFieldBlock( "rtiempo->tiempo", indice )//{||rtiempo->nombre}
    ocol:cheader:=rdefine->inicial
        ocol:cfooter:=""
    ocol:odatafont:=supfont
        ocol:cargo:="rtiempo->tiempo"+ALLTRIM(STR(indice,2,0))
        ocol:nwidth:=75
        ocol:blclickheader:={|row,col,falg,self|rcheck(ocol:cargo,self)}
    ocol:=olbx:addcol()
    ocol:bstrdata:=GenFieldBlocktext( "rtiempo->pena", indice )//{||rtiempo->nombre}
    ocol:cheader:="Pen."
    ocol:cfooter:=""
    ocol:odatafont:=supfont
        ocol:cargo:="rtiempo->pena"+ALLTRIM(STR(indice,2,0))
        ocol:nwidth:=30
    indice++
    rdefine->(dbskip())
enddo

    ocol:=olbx:addcol()
    ocol:bstrdata:={||rtiempo->clasificar}
    ocol:cheader:="Clasificación"
        ocol:cfooter:=""
    ocol:odatafont:=supfont
        ocol:cargo:="rtiempo->clasificar"
        ocol:blclickheader:={|row,col,falg,self|rcheck(ocol:cargo,self)}
        ocol:nwidth:=75
    ocol:=olbx:addcol()
    ocol:bstrdata:={||str(rtiempo->penalizar,5,0)}
    ocol:cheader:="Penalización"
        ocol:cfooter:=""
    ocol:odatafont:=supfont
        ocol:cargo:="rtiempo->penalizar"
        ocol:nwidth:=90
rtiempo->(dbsetfilter({||rtiempo->autorizado},"rtiempo->autorizado"))
rtiempo->(dbgotop())
dbselectarea("rtiempo")
olbx:nmarqueestyle:=3
olbx:lfastedit:=.t.
olbx:ncoldividerstyle:=LINESTYLE_BLACK
olbx:lcoldividercomplete:=.t.
olbx:lfooter:=.t.
olbx:calias:="rtiempo"
olbx:l2007:=.t.
olbx:bskip:={|n| rtiempo->(dorskip(n,osay1,"rtiempo"))}
olbx:bclrstd:={||{ CLR_BLACK , if((rtiempo->(ordkeyno()))%2=0,rgb(255,255,150),16777215)}}
olbx:nfreeze:=2
olbxladjust:=.t.
for indice=5 to len( olbx:acols)
    olbx:acols[indice]:bRClickData:={|nrow,ncol,nflag,o| rdescal(olbx,o:cargo)}

        olbx:acols[indice]:nedittype(1)
next indice
olbx:createfromcode()
 

Re: Mi pelea con xbrowsw

Posted: Wed Sep 23, 2009 12:45 pm
by Daniel Garcia-Gil
Saludos Groiss

colocale a cada columna que quieras sea editada oCol:nEditType = EDIT_GET //1