xBrowse Button del GET

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

xBrowse Button del GET

Post by Daniel Garcia-Gil »

recientemente me encontre con la necesidad de cambiar la imagen del boton del get en el xbrowse y me resulto un trabajo un poco complicado darme cuenta que tenia que primero generar el "DIALOG" o "WINDOW" para poder hacer el cambio de la imagen, que inicialmente es un boton muy pequeño con tres puntos "..."
Image

De esta forma hacia el cambio de imagen pero lo que me pasaba era que tenia el mismo ancho de la imagen al boton de tres puntos
activate dialog aWnd[ 2 ] nowait ;
on init ( aWnd[ 2 ]:move( 0,0 ) , ;
oBrw:aCols[ 3 ]:oBtnElip:cCaption:="",;
oBrw:aCols[ 3 ]:oBtnElip:LoadBitMaps("busca") ) ;
VALID ( !GETKEYSTATE( VK_ESCAPE ) )
Image

encontre pocas personas que tenian ese problema pero no se si lograron una solucion asi que me puse a trabajar y modificar la clase xbrowse a mi necesidad y esto fue lo que hice al final.
no se si sea la forma correcta pero me dio los resultados que quiero... hasta los momentos

1ro. cree una nueva DATA para las COLUMNS
DATA nBtnBmp AS NUMERIC INIT 0
con esta voy a indicar en que posicion de la matriz de oBrw:oCols:aBitmaps esta la imagen que quiero mostrar... para cargar la imagen a oBrw:oCols:aBitmaps se pueden usar los METODOS
METHOD AddResource( cRes ) // Adds a new bitmap to the ::aBitmaps array giving his resource name
METHOD AddBmpFile( cFile ) // Adds a new bitmap to the ::aBitmaps array giving his file name
METHOD AddBmpHandle( hBmp ) // Adds a new bitmap to the ::aBitmaps array giving his bitmap handle

2do. el problema era el tamaño, aqui hay varias cosas, cree una nueva variable local en el metodo METHOD PaintData
local nBtnWidth := 0, esta variable contiene el ancho de la imagen contenida en ::aBitmaps
agrege y cambie una lineas en el mismo metodo

if nType > 1
if ::nBtnBmp > 0 .and. len( ::aBitmaps ) >= ::nBtnBmp
nBtnWidth := ::aBitMaps[ ::nBtnBmp, BITMAP_WIDTH ]
else
nBtnWidth := 10
endif


nButtonRow := nRow
nButtonCol := nCol + nWidth - nBtnWidth
nWidth -= ( nBtnWidth + 5 )
.
.
.
.


if nType > 1
if lSelected
WndBoxRaised(hDC, nButtonRow -1 , nButtonCol - 1,;
nButtonRow + nHeight, nButtonCol + nBtnWidth + 1 )

if nType == EDIT_LISTBOX .or. nType == EDIT_GET_LISTBOX
::oBtnElip:Hide()
::oBtnList:Move( nButtonRow, nButtonCol, nBtnWidth + 1, nHeight, .f.)
::oBtnList:Show()
::oBtnList:GetDC()
FillRect( hDC, {nButtonRow, nButtonCol, nButtonRow + nHeight , nButtonCol + nBtnWidth + 1 },;
::oBtnList:oBrush:hBrush )
::oBtnList:Paint()
::oBtnList:ReleaseDC()
else
::oBtnList:Hide()
::oBtnElip:Move( nButtonRow, nButtonCol, nBtnWidth + 1, nHeight, .f.)
::oBtnElip:Show()
::oBtnElip:GetDC()
FillRect( hDC, {nButtonRow, nButtonCol, nButtonRow + nHeight , nButtonCol + nBtnWidth + 1 },;
::oBtnElip:oBrush:hBrush )
::oBtnElip:Paint()
::oBtnElip:ReleaseDC()
endif
endif

3ro. en el metodo.
METHOD CreateButtons() agrege una lineas mas después de la creacion de botones
if ::nBtnBmp > 0 .and. !empty( ::aBitMaps )
if ::nBtnBmp > len( ::aBitMaps )
::nBtnBmp := len( ::aBitMaps )
endif
::ChangeBitMap( )
endif

::oBtnList:Hide()
::oBtnElip:Hide()

4to. cree un nuevo metodo

METHOD ChangeBitmap( ) CLASS TXBrwColumn

if ::nBtnBmp > 0 .and. len( ::aBitmaps ) >= ::nBtnBmp
::oBtnElip:hBitmap1 := ::aBitMaps[::nBtnBmp, BITMAP_HANDLE ]
::oBtnList:hBitmap1 := ::aBitMaps[::nBtnBmp, BITMAP_HANDLE ]
::oBtnElip:cCaption := ""
else
::oBtnElip:hBitmap1 := 0
::oBtnList:hBitmap1 := 0
::oBtnElip:cCaption := "..."
endif

::oBrw:refresh()

return nil


y ahora puedo cambiar las imagenes de los botones dinamicamente
//********

#include "FiveWin.ch"
#include "xbrowse.ch"

function Test()

local oDlg, oBrw
local aArray := {}
local aList := {"1","2","3","4"}
local nI

for nI = 1 to 20
aadd( aArray, { "Fila:"+StrZero(nI,2)+" Col:01",;
"Fila:"+StrZero(nI,2)+" Col:02",;
"Fila:"+StrZero(nI,2)+" Col:03",;
"Fila:"+StrZero(nI,2)+" Col:04",;
"Fila:"+StrZero(nI,2)+" Col:05",;
"Fila:"+StrZero(nI,2)+" Col:06" } )
next

DEFINE DIALOG oDlg Title "Test de Botones en xBrowse " size 700,300

oBrw:= txbrowse():new( oDlg )
oBrw:nRowHeight := 25
oBrw:nColDividerStyle := LINESTYLE_BLACK
oBrw:nRowDividerStyle := LINESTYLE_BLACK
oBrw:SetArray( aArray )
oBrw:CreateFromCode()

oBrw:aCols[ 2 ]:AddBmpFile("C:\FWH\BITMAPS\16x16\closeall.bmp")
oBrw:aCols[ 2 ]:AddResource("find")
oBrw:aCols[ 2 ]:AddResource("cancel")
oBrw:aCols[ 2 ]:AddResource("exit")
oBrw:aCols[ 2 ]:nEditType( EDIT_GET_BUTTON )
oBrw:aCols[ 2 ]:nBtnBmp := 1
oBrw:aCols[ 2 ]:bEditBlock := {|| msginfo( "Imagen"+strzero( oBrw:aCols[ 2 ]:nBtnBmp, 2 ) ) }


oBrw:aCols[ 3 ]:nEditType( EDIT_GET_LISTBOX )
oBrw:aCols[ 3 ]:aEditListTxt := aList
oBrw:aCols[ 3 ]:bOnPostEdit := {|o,x,k| oBrw:aCols[ 2 ]:nBtnBmp := x , ;
oBrw:aCols[ 2 ]:ChangeBitMap() }

ACTIVATE DIALOG oDlg center;
ON INIT ( oDlg:oClient := oBrw, ;
oDlg:ReSize() )

return nil

PRUEBA 1
Image

PRUEBA 2
Image

PRUEBA 3
Image

igualmente se puede cambiar la flecha del los LISTBOX usando la misma forma.

si existe una forma mas facil por favor quiero saberla, igual esto me ayudo a entender un poco mas la xbrowse e igual espero que a alguien le sirva
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Daniel,

Muchas gracias por esta aportación tan interesante! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Post by Daniel Garcia-Gil »

Antonio Linares wrote:Daniel,

Muchas gracias por esta aportación tan interesante! :-)
antonio gracias a ti por el interes... realmente no se si era la mejor forma de resolverlo, o si utilice de forma debida las variables y metodos de la clase, o si existe otra forma de hacerlo, o si crea un presendente para un aporte sustantivo, el proposito inical fue quitarme la piedra del zapato y aprender un poco mas de la clase.
Yo solo espero que este pequeño cambio no solo me sirva a mi sino a otras personas
User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

Post by Carles »

Daniel,

Me gusta :lol:


Gracies.
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

https://modharbour.app
https://modharbour.app/compass
https://forum.modharbour.app
User avatar
AIDA
Posts: 782
Joined: Fri Jan 12, 2007 8:35 pm

Que bien

Post by AIDA »

Que bien eso lo queria hacer y no encontraba como :(

gracias por el dato :D


Saluditos

Aida :wink:
Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
User avatar
Silvio
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Post by Silvio »

can I have the class with these modifies at mio correo?

gracias
Best Regards, Saludos

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

Post by Daniel Garcia-Gil »

check you email... :D
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
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Post by FranciscoA »

Mcfox:
Puedes enviarme la classe modificada a mi corre f.alegria.p@Gmail.com?
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Post by joseluisysturiz »

FranciscoA wrote:Mcfox:
Puedes enviarme la classe modificada a mi corre f.alegria.p@Gmail.com?
Estoy usando la clase de MCFOX, imagino le ha hecho algunos _, te envie hasta donde estoy actualizado, incluyendo estos que publica.espero te sirva...saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Joe Luis, Francisco,

Le hemos enviado la version mas reciente de xbrowse a Daniel para que la modifique y la pruebe y asi usemos todos la version mas reciente :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Post by FranciscoA »

José Luis, Antonio... Gracias.
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Post by joseluisysturiz »

Antonio Linares wrote:Joe Luis, Francisco,

Le hemos enviado la version mas reciente de xbrowse a Daniel para que la modifique y la pruebe y asi usemos todos la version mas reciente :-)
Buena idea Antonio, de verdad que MCFOX ha hecho unos _ que todos podremos sacarle el mejor provecho a este poderoso xBrowse...saludos...
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Post by Daniel Garcia-Gil »

Listo antonio verifica el correo
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
Post Reply