Ayuda con XBrowse

Post Reply
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Ayuda con XBrowse

Post by Raymundo Islas M. »

Hola a todos,

Durante todos los años que he usado FW, tanto en 16 como en 32, siempre use el browse de Hernan bajo el siguiente esquema :

Code: Select all

Con arrays :
Static lbCmpEqv, aCmpEqv, pCmpEqv

aCmpEqv := { {"X","DESC X",10},{"Y","DESC Y",20},{"Z","DESC Z",30} }
pCmpEqv := 1
REDEFINE LISTBOX lbCmpEqv ;
    FIELDS aCmpEqv[pCmpEqv,1],aCmpEqv[pCmpEqv,2],aCmpEqv[pCmpEqv,3] ;
    HEAD "NUM. PARTE","DESCRIPCION","EXST" ;
    FIELDSIZES 120,405,75 ;
    ID 123 ;
    FONT aSysFnts[1] ;
    ON DBLCLICK SetEqv2Cmp( ) ;
    OF oFldMntPqs:aDialogs[1]

    lbCmpEqv:SetArray( aCmpEqv )
    lbCmpEqv:nLineStyle     := 2
    lbCmpEqv:lDrawFocusRect := .F.
    lbCmpEqv:nClrLine       := CLR_WHITE
    lbCmpEqv:BGOTOP         := { || pCmpEqv :=1}
    lbCmpEqv:BGOBOTTOM      := { || pCmpEqv := eVal( lbCmpEqv:bLogicLen ) }
    lbCmpEqv:BSKIP          := { | nWant, nOld | nOld := pCmpEqv , pCmpEqv += nWant,;
        pCmpEqv := Max( 1, Min( pCmpEqv, eVal( lbCmpEqv:bLogicLen ) ) ), pCmpEqv - nOld }
    lbCmpEqv:BLOGICLEN      := { || Len( aCmpEqv ) }
    lbCmpEqv:AJUSTIFY       := { .F.,.F.,.T. }
    lbCmpEqv:nClrPane       := { || IIF( pCmpEqv%2 == 0, aBrwClrs[1], aBrwClrs[2] ) }

..
..

Static Function SetEqv2Cmp( )
msginfo( aPaqEnc[pPaqEnc,2] )  -- > "DESC X"
Return NIL
 
Y ultimamente con RecordSets de MySql

Code: Select all

REDEFINE LISTBOX lbCmpEqv ;
    FIELDS ;
    IIF( aRSCmpsEqvs[3], aRSCmpsEqvs[2]:Fields("PPART"):Value, "" ), ;
    IIF( aRSCmpsEqvs[3], aRSCmpsEqvs[2]:Fields("PDESC"):Value, "" ), ;
    IIF( aRSCmpsEqvs[3], TransForm( aRSCmpsEqvs[2]:Fields("ITMEXST"):Value, "999.99" ), "" ) ;
    HEAD "NUM. PARTE","DESCRIPCION","EXST" ;
    FIELDSIZES 120,405,75 ;
    FONT aSysFnts[1] ;
    ID 123 ;
    OF oFldMntPqs:aDialogs[1]

    lbCmpEqv:BLOGICLEN      := { || aRSCmpsEqvs[2]:RecordCount }
    lbCmpEqv:BGOTOP         := { || aRSCmpsEqvs[2]:MoveFirst() }
    lbCmpEqv:BGOBOTTOM      := { || aRSCmpsEqvs[2]:MoveLast()  }
    lbCmpEqv:BSKIP          := { | nSkip | Skipper( aRSCmpsEqvs[2], nSkip ) }
    lbCmpEqv:cAlias         := "ARRAY"
    lbCmpEqv:nLineStyle     := 2
    lbCmpEqv:lDrawFocusRect := .F.
    lbCmpEqv:nClrLine       := CLR_WHITE
    lbCmpEqv:nClrPane       := { || IIF( aRSCmpsEqvs[2]:AbsolutePosition%2 == 0, aBrwClrs[1], aBrwClrs[2] ) }
 
Y aunque varias veces lo intente de manera tibia, nunca me atrevi a dar el "salto" a cambiar todos mis queridos TWBrowses a XBrowses, el dia de hoy, acabo de adquirir la actualizacion de FWH y tengo la firme conviccion de usar esta clase en todas mis apps.
Sin embargo, me encuentro con varias trabas :

- Casi todos los ejemplos existentes son para usarlo por codigo y yo uso recursos.
- Los pocos (poquisimos) ejemplos que manejan recursos, son muy diferentes a los acostumbrados.
- Los posts que encontre en el foro estan excelentes, pero para un novato en esta clase como yo, los veo algo complicados.

Segun el archivo .CH del XBrowse, la sintaxis es muy parecida a la del TWBrowse, por lo que mi pregunta es :

Es posible seguir usando casi la misma sintaxis que uso, pero aplicandola a la clase XBrowse ? o tengo que "rehacer" muchas lineas de codigo para poder lograrlo ?

Quiero comentar que el 90% de los browses que uso, son casi siempre solo para mostrar datos, ya despues los ire ajustando para sacar provecho de todas las funciones que ofrece esta clase.

Cualquier ejemplo es bienvenido :P

Gracias y Saludos
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Ayuda con XBrowse

Post by nageswaragunupudi »

According to the file. xBrowse MC, the syntax is very similar to the TWBrowse, so my question is:

Is it possible to continue using almost the same syntax I use, but applied to the xBrowse class? or I have to redo many lines of code to achieve that?
Very similar but much simpler syntax. We can get the work done in much shorter code. But some minor changes in the code are necessary.

The above code may probably be reduced to something like this:

Code: Select all

REDEFINE XBROWSE lbCmpEqv ID 123 OF oFldMntPqs:aDialogs[1] ;
   COLUMNS 'PPART', 'PDESC', 'ITMEXST' ;
   HEADERS 'NumParte', 'Description', 'Exst' ;
   PICTURES nil, nil, '999.99' ;
   RECORDSET aRsCmpsEqvs[ 2 ] ;
   FONT aSysFnts[ 1 ] CELL LINES
   
lbCmpEqv:bClrStd := { || { CLR_WHITE, If( lbCmpEqv:KeyNo() % 2 == 0, aBrwClrs[1], aBrwClrs[2] ) } }
 
Navigation blocks are automatically constructed by XBrowse.
Regards

G. N. Rao.
Hyderabad, India
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Ayuda con XBrowse

Post by Raymundo Islas M. »

Hola Mr. Rao,

Agradezco mucho su respuesta, por lo que me comenta veo que me sera posible hacer mi acometido sin morir en el intento :wink:

Espero no abusar de su generosidad si pudiera ofrecerme ulgun ejemplo para el manejo de los arrays, ya que con este tengo para los browses que manejo con RecordSets.

Muchas Gracias y Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
sjingo
Posts: 229
Joined: Sat Mar 18, 2006 3:42 pm
Location: Ibarra-Ecuador

Re: Ayuda con XBrowse

Post by sjingo »

Estimado Raymundo

Ya también usaba el excelente trabajo Hernán. Es más mis desarrollos anteriores siguen con dicho Browse, y por falta de tiempo no los migro aún. Pero en los nuevos desarrollos que estoy realizando sólo uso Xbrowse, y la verdad no te arrepentirás te facilita muchas cosas, y conforme lo vayas descubriendo quedarás muy satisfecho.
Para el caso de los recordsets prácticamente no tienes que hacer casi nada, todo está automatizado. Una vez abierto el recordset sólo tienes que cargarlo al xbrowse y listo, la edición es transparente y las altas y bajas no serán problema para tí. En el siguiente ejemplo cargo toda la tabla en un diálogo desde recursos:

Code: Select all

   
   DEFINE DIALOG oDlg RESOURCE "SELEC"
   oBrw := TXBrowse():New( oDlg ) 
   oBrw:SetAdo(oRs) 
    //oBrw:SetArray(adatos)  //para arreglos 
   oBrw:CreateFromResource( 101 )
   oBrw:acols[1]:nwidth:=50
   oBrw:acols[1]:cHeader:="Encabezado1"
   ACTIVATE DIALOG oDlg
 

Yo uso Resource Builder allí escogo "custom control" y en la parte de propiedades en ControlClassName coloco "TXBrowse"

Un saludo

Marcelo Jingo
Marcelo Jingo
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Ayuda con XBrowse

Post by Raymundo Islas M. »

Hola Marcelo,

Gracias por tu aporte a la causa :wink: este excelente !!

Ojala y tengas por ahi alguno para el manejo del array.


Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
sjingo
Posts: 229
Joined: Sat Mar 18, 2006 3:42 pm
Location: Ibarra-Ecuador

Re: Ayuda con XBrowse

Post by sjingo »

Raymundo

Como ya te indiqué, para arrays en lugar de oBrw:SetAdo(), usas oBrw:SetArray(adatos) eso es todo.

Un Saludo

Marcelo Jingo
Marcelo Jingo
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Ayuda con XBrowse

Post by Raymundo Islas M. »

Marcelo,

Tal y como lo comentas se ve mas facil :D

Mi ultima pregunta seria, como hacer para "manejar" algunos datos de las celdas :

Code: Select all

msginfo( aPaqEnc[pPaqEnc,2] )  -- > "DESC X"
 
Si la clase se encarga de todo el asunto de navegacion, cuales serian los metodos/funciones/datas a usar para hacer referencia a un dato en X linea Y columna, tal y como lo expreso en mi codigo, esto por si necesito usar tal dato para alguna otra operacion.

Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
sjingo
Posts: 229
Joined: Sat Mar 18, 2006 3:42 pm
Location: Ibarra-Ecuador

Re: Ayuda con XBrowse

Post by sjingo »

Te pongo un corto ejemplo de como se usa para acceder a los datos de un array:

Code: Select all

obrw:bLDblClick:= { ||iif(oBrw:aArrayData[oBrw:nArrayAt][1],;
     oBrw:aArrayData[oBrw:nArrayAt][1]:=.f.,oBrw:aArrayData[oBrw:nArrayAt][1]:=.t.),;
     oBrw:Drawselect()}
    oBrw:aCols[1]:AddResource("CHECK")
    oBrw:aCols[1]:AddResource("NOCHECK")
    oBrw:aCols[1]:bBmpData :={ || iif(oBrw:aArrayData[oBrw:nArrayAt][1],1,2)

oBrw:aArrayData[oBrw:nArrayAt][columna]

Marcelo Jingo
Marcelo Jingo
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Ayuda con XBrowse ( SOLUCIONADO )

Post by Raymundo Islas M. »

Mi estimado Marcelo,

Te agradezco muchisimo la ayuda que me has brindado, con esto tengo para empezar a hacer mis pruebas para migrar mis browses.

Saludos y un fuerte abrazo.
FWH 10.6 + xHarbour + Borland 582
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Ayuda con XBrowse

Post by nageswaragunupudi »

sjingo wrote:Te pongo un corto ejemplo de como se usa para acceder a los datos de un array:

Code: Select all

obrw:bLDblClick:= { ||iif(oBrw:aArrayData[oBrw:nArrayAt][1],;
     oBrw:aArrayData[oBrw:nArrayAt][1]:=.f.,oBrw:aArrayData[oBrw:nArrayAt][1]:=.t.),;
     oBrw:Drawselect()}
    oBrw:aCols[1]:AddResource("CHECK")
    oBrw:aCols[1]:AddResource("NOCHECK")
    oBrw:aCols[1]:bBmpData :={ || iif(oBrw:aArrayData[oBrw:nArrayAt][1],1,2)

oBrw:aArrayData[oBrw:nArrayAt][columna]

Marcelo Jingo
Instead of the above code, we can write only one line :

Code: Select all

oBrw:aCols[ 1 ]:SetCheck( { 'CHECK', 'NOCHECK' }, .t. )
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Ayuda con XBrowse

Post by nageswaragunupudi »

Array Browse sample:

Code: Select all

#include "FiveWin.Ch"
#include "xbrowse.ch"

function Main()

   local aData := { ;
     { 1, 'One',     45, date(),   .t. }, ;
     { 2, 'Two',   2222, date()-1, .f. } , ;
     { 3, 'Three', 3333, date()-2, .t. }, ;
     { 4, 'Four',  4444, date()-3, .f. } }
   local oDlg, oBrw, oFont

   DEFINE FONT oFont NAME 'TAHOMA' SIZE 0,-12
   DEFINE DIALOG oDlg SIZE 440,240 PIXEL FONT oFont

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      COLUMNS 1, 2, 3, 5, 4 ;
      HEADERS 'No', 'Description', 'Number', 'Status', 'Date' ;
      PICTURES '99', nil, '@E 99,999.99', nil, 'dd-mmm-yyyy' ;
      ARRAY aData CELL LINES NOBORDER FASTEDIT

   oBrw:Status:SetCheck( , .t. )
   AEval( oBrw:aCols, { |o| o:nEditType := EDIT_GET } )

   oBrw:nStretchCol  := STRETCHCOL_WIDEST
   oBrw:CreateFromCode()

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFont

return ( 0 )
 
Screenshot:
Image

Using command syntax helps faster, shorter, bug-free and portable coding than using methods like oBrw:SetArray, oBrw:SetRDD, etc. This approach also helps taking the best advantage of the full built-in power of xBrowse.
Regards

G. N. Rao.
Hyderabad, India
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Ayuda con XBrowse

Post by Raymundo Islas M. »

Hola Mr. Rao,

Muchas gracias por los ejemplos que indica, los voy a estudiar a fondo y junto con lo aportado por Marcelo, seguramente le encontrare el hilo a esto.


Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
JavierVital
Posts: 105
Joined: Thu Feb 26, 2009 4:08 pm
Contact:

Re: Ayuda con XBrowse

Post by JavierVital »

Raymundo, dame tu correo y te mando un ejemplo
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Ayuda con XBrowse

Post by Raymundo Islas M. »

Hola Javier,

Con todo gusto !!

islasdevsys@hotmail.com


Gracias y Saludos
FWH 10.6 + xHarbour + Borland 582
Post Reply