Migrar a XBrowse

Migrar a XBrowse

Postby manuelcalerosolis » Fri Jan 16, 2009 12:44 pm

Quiero migrar mi aplicación para q use XBrowse ( q le veo muchas ventajas ) y deshacerme poco a poco del viejo WBrowse.

Uso una clase para mostrar los datos que hace muchas cosas, pero maneja las expresiones optimas para el antiguo Wbrowse, el problema concreto esta en los bitmaps, como conoces, antes si la columna traía un numero montaba el bitmap.

Ejemplo :

hBmp := LoadBitmap( 0, 32760 )
hSel := LoadBitmap( GetResources(), "Send16" )


FIELDS if( ( dbfFamilia )->lSelDoc, hSel, 0 ),;
(dbfFamilia)->cCodFam,;
(dbfFamilia)->cNomFam,;
(dbfFamilia)->cCodGrp,;
(dbfFamilia)->cCodPrp1,;
(dbfFamilia)->cCodPrp2,;
if( ( dbfFamilia )->lIncTpv, hBmp, 0 ),;
if( ( dbfFamilia )->lPubInt, hBmp, 0 );

donde hSel y hBmp son los handles a los bitmaps

he intentado de la siguiente forma en el nuevo código

// Creacion de columnas ----------------------------------------------------

for n := 1 to ( ::nFlds )
oCol := ::oBrw:AddCol()
if Valtype( Eval( ::aFlds[ n ] ) ) == "N"
oCol:bBmpData := ::aFlds[ n ]
else
oCol:bStrData := ::aFlds[ n ]
end if

No me da errores pero no me muestra el bitmap, ¿necesito igualar alguna otra cosa en la columna para indicar q es un bitmap?

Muchas gracias.

Saludos.
Manuel Calero Soís.

http://www.apolosoftware.com
User avatar
manuelcalerosolis
 
Posts: 149
Joined: Mon Oct 10, 2005 9:30 am
Location: Huelva - Spain

Re: Migrar a XBrowse

Postby Daniel Garcia-Gil » Fri Jan 16, 2009 2:18 pm

Manuel...
La forma de hacerlo es muy facil...
cada columna del xbrowse le puedes asignar la cantidad de bitmap que desees, de forma independiente,
cada columna posee una data llamada ::aBitmaps, ese array puedes llenarlo de la siguiente manera...

oCol = oBrw:addcol()
oCol:AddResource( cRecurso ) //para usar desde recursos
oCol:AddBmpFile( cFile ) //para usar Archivos
oCol:AddBmpHandle( hBmp ) //para usar Hansles de bitmaps

puedes usarlas como quieras, juntas o separadas, eso lo unico que hace es llenar ::aBitmaps con un subarray de 5 posisciones con la informacion del bitmaps
1 = HANDLE ( BITMAP_HANDLE )
2 = PALETTE( BITMAP_PALETTE )
3 = WIDTH ( BITMAP_WIDTH )
4 = HEIGHT ( BITMAP_HEIGHT )
5 = ZEROCLR ( BITMAP_ZEROCLR )
una vez que llenas ::aBitmaps con los arrays que vas a usar para esa columna, para mostrarlos en cada celda se usa esta data bBmpData, aqui vas a cargar el codeblock que te retornara el valor de la posicion del bitmap a usar dentro de ::aBitmaps

oCol:bBmpData := {|| if ( oBrw:aRow[ 3 ], 1,2 ) } // dependiendo del valor de la columna 3 en la fila x va mostrar el bitmaps ubicado en la posicion 1 u 2

si no deseas que muetre la data la celda usas ::bStrData que retorne NIL,
oCol:bStrData := {|| NIL }
recuerda estas datas que comienzan con b son code block y debes usar esa sintaxis como lo son bStrData, bBmpData

usando tu mismo ejemplo te quedaria algo asi....

Code: Select all  Expand view
for n := 1 to ( ::nFlds )
oCol := ::oBrw:AddCol()
oCol:AddResource( cRecurso1 ) //pensando que usas recursos
oCol:AddResource( cRecurso2 ) //colocando 3 elementos dentro de ::abitmaps
oCol:AddResource( cRecurso3 ) // puedes usar mas si los deseas
if Valtype( Eval( ::aFlds[ n ] ) ) == "N"
    oCol:bBmpData := {|| condicion que te retorne la posicion del bitmap } // se debe usar un code block
else
    oCol:bStrData := {|| ::aFlds[ n ] } // se debe usar un code block
end if
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Migrar a XBrowse

Postby manuelcalerosolis » Sat Jan 17, 2009 12:11 pm

Viendo las diferencias entre ambos Controles he optado por reescribir el codigo para sacar todo el provecho de XBrowse.

Mi problema ahora es el tratamiento de las imagenes, que no me salen bien.

Image

Quiero q se vea siempre como la que aparece en la fila no seleccionada.

Este es el código q uso para añadir una columna.

with object ( oWndBrw:AddXCol() )
:AddResource( "Send16" )
:AddResource( "" )
:bStrData := {|| "" }
:bBmpData := {|| if( ( dbfFamilia )->lSelDoc, 1, 2 ) } //::aFlds[ n ]
:lBmpStretch := .f.
:cHeader := "V"
:nWidth := 17
end with

Muchas Gracias.

Manuel Calero Solís.
http://www.apolosoftware.com
User avatar
manuelcalerosolis
 
Posts: 149
Joined: Mon Oct 10, 2005 9:30 am
Location: Huelva - Spain

Re: Migrar a XBrowse

Postby Daniel Garcia-Gil » Sat Jan 17, 2009 1:26 pm

se ve algo extraño en la imagen, pero no distingo el efecto, solo te sucede cuando la fila esta seleccionada?
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Migrar a XBrowse

Postby Antonio Linares » Sat Jan 17, 2009 4:20 pm

Manuel,

Como se veia esa imagen cuando la usabas en un wbrowse ?

Puedes copiarla aqui usando www.imageshack.us ? gracias,
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42073
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Migrar a XBrowse

Postby manuelcalerosolis » Sat Jan 17, 2009 9:55 pm

La fila seleccionada rellena el fondo de azul e inunanda parte de la imagen no quiero q eso suceda, no desdeo q se rellene la imagen.

Muchas gracias.

Manuel Calero Soís
http://www.apolosoftware.com
User avatar
manuelcalerosolis
 
Posts: 149
Joined: Mon Oct 10, 2005 9:30 am
Location: Huelva - Spain

Re: Migrar a XBrowse

Postby Daniel Garcia-Gil » Sun Jan 18, 2009 3:24 am

Hola manuel te expongo 2 opciones, de no querer ninguna de las 2 coloca la imagen como se veia cuando usabas el wbrowse

1ra. usa la data bClrSelFocus, que devuelva los colores que usas por default para tu browse, en la columna donde usas el bitmaps

Code: Select all  Expand view
with object ( oWndBrw:AddXCol() )
   :AddResource( "Send16" )
   :AddResource( "" )
   :bStrData := {|| "" }
   :bBmpData := {|| if( ( dbfFamilia )->lSelDoc, 1, 2 ) } //::aFlds[ n ]
   :lBmpStretch := .f.
   :cHeader := "V"
   :nWidth := 17
   :bClrSelFocus := {||{|| eval( oWndBrw:bClrStd ) } }
end with

Image

la 2da opcion es modificando la clase...
le agregas una nueva data a CLASS TXBrwColumn (buscala que esta sobre la linea 5000 de la xbrowse)

DATA lBmpTransparent AS LOGICAL

en el METHOD NEW de esa clase inicializas ese valor en .T.

::lBmpTransparent := .T.

por ultimo en el METHOD PAINTDATA busca estas lineas...

PalBmpDraw( hDC, nBmpRow, nBmpCol,;
aBitmap[ BITMAP_HANDLE ],;
aBitmap[ BITMAP_PALETTE ],;
aBitmap[ BITMAP_WIDTH ],;
aBitmap[ BITMAP_HEIGHT ];
,, .t., aColors[ 2 ] )

y cambias ese valor ( .T. ) por ::lBmpTransparent

deberia quedarte asi...
PalBmpDraw( hDC, nBmpRow, nBmpCol,;
aBitmap[ BITMAP_HANDLE ],;
aBitmap[ BITMAP_PALETTE ],;
aBitmap[ BITMAP_WIDTH ],;
aBitmap[ BITMAP_HEIGHT ];
,,::lBmpTransparent, aColors[ 2 ] )

depues usas esa data para darle transparencia o no a la imagen
Code: Select all  Expand view
with object ( oWndBrw:AddXCol() )
   :AddResource( "Send16" )
   :AddResource( "" )
   :bStrData := {|| "" }
   :bBmpData := {|| if( ( dbfFamilia )->lSelDoc, 1, 2 ) } //::aFlds[ n ]
   :lBmpStretch := .f.
   :cHeader := "V"
   :nWidth := 17
   :lBmpTransparent :=.f. // en caso de no querarla transparente, recuerda que por default es .T.
end with


Image
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Migrar a XBrowse

Postby manuelcalerosolis » Sun Jan 18, 2009 9:26 pm

Daniel muchas gracias por tu respuesta, he optado por la segunda opcion que me parece mucho mas simple y que da mas posibilidades al objeto Column, pero el comportamiento no es igual que en WBrowse, en Wbrowse se utiliza el primer pixel de la esquina superior izquierda para determinar cual es el color de fondo del bitmap.

Puede ser posible igualar este comportamiento en XBrowse ?

Gracias.

Manuel Calero Solís
http://www.apolosoftware.com
User avatar
manuelcalerosolis
 
Posts: 149
Joined: Mon Oct 10, 2005 9:30 am
Location: Huelva - Spain

Re: Migrar a XBrowse

Postby José Ríos » Mon Jan 19, 2009 4:12 am

Pues yo la verdad estoy un poco decepcionado con xbrowse. Hay cosas que yo manejaba con tsbrowse desde las versiones mas antiguas y que no existen en txbrowse: En txbrowse no hay checkboxes, la clausula when apenas se acaba de implementar, hay problemas con el refresh y otras cositas con las que me he topado. Apenas lo empeze a usar con el ultimo desarrollo que estoy haciendo, pero si hubiera sabido de las limitaciones en el funcionamiento con respecto tsbrowse no lo estaria usando.

Saludos.
José Ríos
 
Posts: 119
Joined: Fri Nov 04, 2005 12:23 am

Re: Migrar a XBrowse

Postby manuelcalerosolis » Mon Jan 19, 2009 7:26 pm

José hay q tener paciencia, seguro q no esta al 100% pero veo versión tras versión el control mejorar, y entre todos conseguiremos un gran control, esencial para la mayoria de las aplicaciones.

Saludos.

Manuel Calero Solís
http://www.apolosoftware.com
User avatar
manuelcalerosolis
 
Posts: 149
Joined: Mon Oct 10, 2005 9:30 am
Location: Huelva - Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: russimicro and 51 guests