Ayuda con XBrowse

Ayuda con XBrowse

Postby Raymundo Islas M. » Tue Apr 20, 2010 5: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: Select all  Expand view

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  Expand view

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
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Ayuda con XBrowse

Postby nageswaragunupudi » Tue Apr 20, 2010 9: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: Select all  Expand view
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
nageswaragunupudi
 
Posts: 10641
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Ayuda con XBrowse

Postby Raymundo Islas M. » Tue Apr 20, 2010 2: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
User avatar
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Ayuda con XBrowse

Postby sjingo » Tue Apr 20, 2010 3: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: Select all  Expand view
 
   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
sjingo
 
Posts: 229
Joined: Sat Mar 18, 2006 3:42 pm
Location: Ibarra-Ecuador

Re: Ayuda con XBrowse

Postby Raymundo Islas M. » Tue Apr 20, 2010 4: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
User avatar
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Ayuda con XBrowse

Postby sjingo » Tue Apr 20, 2010 5: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
User avatar
sjingo
 
Posts: 229
Joined: Sat Mar 18, 2006 3:42 pm
Location: Ibarra-Ecuador

Re: Ayuda con XBrowse

Postby Raymundo Islas M. » Tue Apr 20, 2010 6:43 pm

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  Expand view

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
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Ayuda con XBrowse

Postby sjingo » Tue Apr 20, 2010 7:16 pm

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

Code: Select all  Expand view

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
sjingo
 
Posts: 229
Joined: Sat Mar 18, 2006 3:42 pm
Location: Ibarra-Ecuador

Re: Ayuda con XBrowse ( SOLUCIONADO )

Postby Raymundo Islas M. » Tue Apr 20, 2010 8: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
User avatar
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Ayuda con XBrowse

Postby nageswaragunupudi » Tue Apr 20, 2010 9:16 pm

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

Code: Select all  Expand view

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  Expand view
oBrw:aCols[ 1 ]:SetCheck( { 'CHECK', 'NOCHECK' }, .t. )
Regards

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

Re: Ayuda con XBrowse

Postby nageswaragunupudi » Tue Apr 20, 2010 9:19 pm

Array Browse sample:
Code: Select all  Expand view
#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
nageswaragunupudi
 
Posts: 10641
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Ayuda con XBrowse

Postby Raymundo Islas M. » 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
User avatar
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Ayuda con XBrowse

Postby JavierVital » Wed Apr 21, 2010 1:55 am

Raymundo, dame tu correo y te mando un ejemplo
User avatar
JavierVital
 
Posts: 105
Joined: Thu Feb 26, 2009 4:08 pm

Re: Ayuda con XBrowse

Postby Raymundo Islas M. » Wed Apr 21, 2010 3:21 am

Hola Javier,

Con todo gusto !!

islasdevsys@hotmail.com


Gracias y Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 45 guests

cron