Page 1 of 1

Ayuda con XBrowse

Posted: Tue Apr 20, 2010 5:49 am
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

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 9:16 am
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.

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 2:53 pm
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

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 3:37 pm
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

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 4:53 pm
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

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 5:09 pm
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

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 6:43 pm
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

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 7:16 pm
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

Re: Ayuda con XBrowse ( SOLUCIONADO )

Posted: Tue Apr 20, 2010 8:50 pm
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.

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 9:16 pm
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. )

Re: Ayuda con XBrowse

Posted: Tue Apr 20, 2010 9:19 pm
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.

Re: Ayuda con XBrowse

Posted: Wed Apr 21, 2010 12:22 am
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

Re: Ayuda con XBrowse

Posted: Wed Apr 21, 2010 1:55 am
by JavierVital
Raymundo, dame tu correo y te mando un ejemplo

Re: Ayuda con XBrowse

Posted: Wed Apr 21, 2010 3:21 am
by Raymundo Islas M.
Hola Javier,

Con todo gusto !!

islasdevsys@hotmail.com


Gracias y Saludos