Migrar a XBrowse
- manuelcalerosolis
- Posts: 149
- Joined: Mon Oct 10, 2005 9:30 am
- Location: Huelva - Spain
Migrar a XBrowse
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
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
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
Re: Migrar a XBrowse
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....
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
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
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
- manuelcalerosolis
- Posts: 149
- Joined: Mon Oct 10, 2005 9:30 am
- Location: Huelva - Spain
Re: Migrar a XBrowse
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.
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
Mi problema ahora es el tratamiento de las imagenes, que no me salen bien.
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
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
Re: Migrar a XBrowse
se ve algo extraño en la imagen, pero no distingo el efecto, solo te sucede cuando la fila esta seleccionada?
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Migrar a XBrowse
Manuel,
Como se veia esa imagen cuando la usabas en un wbrowse ?
Puedes copiarla aqui usando www.imageshack.us ? gracias,
Como se veia esa imagen cuando la usabas en un wbrowse ?
Puedes copiarla aqui usando www.imageshack.us ? gracias,
- manuelcalerosolis
- Posts: 149
- Joined: Mon Oct 10, 2005 9:30 am
- Location: Huelva - Spain
Re: Migrar a XBrowse
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
Muchas gracias.
Manuel Calero Soís
http://www.apolosoftware.com
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
Re: Migrar a XBrowse
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
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
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
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
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
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
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
- manuelcalerosolis
- Posts: 149
- Joined: Mon Oct 10, 2005 9:30 am
- Location: Huelva - Spain
Re: Migrar a XBrowse
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
Puede ser posible igualar este comportamiento en XBrowse ?
Gracias.
Manuel Calero Solís
http://www.apolosoftware.com
Re: Migrar a XBrowse
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.
Saludos.
- manuelcalerosolis
- Posts: 149
- Joined: Mon Oct 10, 2005 9:30 am
- Location: Huelva - Spain
Re: Migrar a XBrowse
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
Saludos.
Manuel Calero Solís
http://www.apolosoftware.com