Mi pelea con xbrowsw

Post Reply
groiss
Posts: 206
Joined: Tue Sep 01, 2009 7:55 am
Location: Plasencia - ESPAÑA

Mi pelea con xbrowsw

Post 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
User avatar
VPOZO
Posts: 32
Joined: Tue Jun 24, 2008 5:19 pm
Location: Punta Arenas, Chile

Re: Mi pelea con xbrowsw

Post 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...
groiss
Posts: 206
Joined: Tue Sep 01, 2009 7:55 am
Location: Plasencia - ESPAÑA

Re: Mi pelea con xbrowsw

Post 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
User avatar
VPOZO
Posts: 32
Joined: Tue Jun 24, 2008 5:19 pm
Location: Punta Arenas, Chile

Re: Mi pelea con xbrowsw

Post 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:
groiss
Posts: 206
Joined: Tue Sep 01, 2009 7:55 am
Location: Plasencia - ESPAÑA

Re: Mi pelea con xbrowsw

Post 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()
 
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Mi pelea con xbrowsw

Post by Daniel Garcia-Gil »

Saludos Groiss

colocale a cada columna que quieras sea editada oCol:nEditType = EDIT_GET //1
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Post Reply