xBrowse Button del GET

xBrowse Button del GET

Postby Daniel Garcia-Gil » Mon Sep 29, 2008 3:00 am

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
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Postby Antonio Linares » Mon Sep 29, 2008 8:16 am

Daniel,

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

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

Postby Daniel Garcia-Gil » Mon Sep 29, 2008 6:21 pm

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
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Postby Carles » Wed Oct 01, 2008 6:31 am

Daniel,

Me gusta :lol:


Gracies.
Salutacions, saludos, regards

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

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1137
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Que bien

Postby AIDA » Sun Oct 19, 2008 4:09 am

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
AIDA
 
Posts: 879
Joined: Fri Jan 12, 2007 8:35 pm

Postby Silvio » Mon Dec 01, 2008 9:42 am

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

gracias
Best Regards, Saludos

Falconi Silvio
User avatar
Silvio
 
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Postby Daniel Garcia-Gil » Mon Dec 01, 2008 1:06 pm

check you email... :D
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Postby FranciscoA » Mon Dec 01, 2008 2:06 pm

Mcfox:
Puedes enviarme la classe modificada a mi corre f.alegria.p@Gmail.com?
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Postby joseluisysturiz » Mon Dec 01, 2008 3:18 pm

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 nuevos cambios, 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
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Postby Antonio Linares » Mon Dec 01, 2008 3:19 pm

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
Antonio Linares
Site Admin
 
Posts: 42107
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby FranciscoA » Mon Dec 01, 2008 10:10 pm

José Luis, Antonio... Gracias.
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Postby joseluisysturiz » Tue Dec 02, 2008 2:32 am

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 buenos cambios que todos podremos sacarle el mejor provecho a este poderoso xBrowse...saludos...
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Postby Daniel Garcia-Gil » Tue Dec 02, 2008 2:43 pm

Listo antonio verifica el correo
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 53 guests