FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ayuda con XBrowse
Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM

Ayuda con XBrowse

Posted: Tue Apr 20, 2010 05:49 AM
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 (fw): Select all Collapse
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 (fw): Select all Collapse
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 :-)

Gracias y Saludos
FWH 10.6 + xHarbour + Borland 582
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 09:16 AM
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 (fw): Select all Collapse
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
Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 02:53 PM

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
Posts: 229
Joined: Sat Mar 18, 2006 03:42 PM

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 03:37 PM
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 (fw): Select all Collapse
   
   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
Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 04:53 PM

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
Posts: 229
Joined: Sat Mar 18, 2006 03:42 PM

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 05:09 PM

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
Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 06:43 PM
Marcelo,

Tal y como lo comentas se ve mas facil :-)

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

Code (fw): Select all Collapse
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
Posts: 229
Joined: Sat Mar 18, 2006 03:42 PM

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 07:16 PM
Te pongo un corto ejemplo de como se usa para acceder a los datos de un array:

Code (fw): Select all Collapse
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][columna]

Marcelo Jingo
Marcelo Jingo
Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM

Re: Ayuda con XBrowse ( SOLUCIONADO )

Posted: Tue Apr 20, 2010 08:50 PM

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
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 09:16 PM
sjingo wrote:Te pongo un corto ejemplo de como se usa para acceder a los datos de un array:

Code (fw): Select all Collapse
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][columna]

Marcelo Jingo


Instead of the above code, we can write only one line :
Code (fw): Select all Collapse
oBrw:aCols[ 1 ]:SetCheck( { 'CHECK', 'NOCHECK' }, .t. )
Regards



G. N. Rao.

Hyderabad, India
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 09:19 PM
Array Browse sample:
Code (fw): Select all Collapse
#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:


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
Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM

Re: Ayuda con XBrowse

Posted: Wed Apr 21, 2010 12:22 AM

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
Posts: 105
Joined: Thu Feb 26, 2009 04:08 PM

Re: Ayuda con XBrowse

Posted: Wed Apr 21, 2010 01:55 AM

Raymundo, dame tu correo y te mando un ejemplo

Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM

Re: Ayuda con XBrowse

Posted: Wed Apr 21, 2010 03:21 AM

Hola Javier,

Con todo gusto !!

islasdevsys@hotmail.com

Gracias y Saludos

FWH 10.6 + xHarbour + Borland 582

Continue the discussion