FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Cambiar imagen de un BottonBMP en tiempo de ejecucion
Posts: 654
Joined: Mon May 29, 2006 03:14 PM
Cambiar imagen de un BottonBMP en tiempo de ejecucion
Posted: Wed Jan 25, 2012 07:31 AM
Quisiera cambiar, en tiempo de ejecuci贸n, el bmp de un bottonBMP segun un criterio deseado.

Este c贸digo fuente me da error en ejecuci贸n:
Code (fw): Select all Collapse
Ok:=.T.
@ 35*25+5,225 BTNBMP OkBtn NAME "Ok_rojo" SIZE 20,20 OF ::oWndChild PIXEL ;
ACTION {Ok:=(.not.Ok),iif(Ok,OkBtn:cResName1:="Ok_rojo",OkBtn:cResName1:="Ok_verde"),OkBtn:Refresh()}

Fichero RC:
Ok_rojo BITMAP "ok_rojo.bmp"
Ok_verde BITMAP "ok_verde.bmp"

Me da este error:
Error description: Warning BASE/1004 Message not found: TBTNBMP:OK
Mi abuelo dec铆a: Los aviones vuelan porque Dios quiere, y los helic贸pteros ni Dios sabe porque vuelan.

FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
Posts: 883
Joined: Thu Dec 24, 2009 12:46 AM
Re: Cambiar imagen de un BottonBMP en tiempo de ejecucion
Posted: Wed Jan 25, 2012 11:09 AM
Code (fw): Select all Collapse
oBtnF[x]:SetFile( ltrim(Camino + 'graficos\botones\brush\' + botonfam->nombre) )
obtnF[x]:= AllTrim(familia->texto_tecl)
oBtnF[x]:= oFont1
oBtnF[x]:Refresh()

=====>

Bayron Landaverry
xBasePHP.com
(215)2226600 Philadelphia,PA, USA
MayaBuilders@gMail.com
Guatemala

FWH25.06--Harbour 3.0.0--BCC7.7--UEstudio 10.10
Windows 10

FiveWin, One line of code and it's done...

Posts: 654
Joined: Mon May 29, 2006 03:14 PM
Re: Cambiar imagen de un BottonBMP en tiempo de ejecucion
Posted: Wed Jan 25, 2012 12:20 PM
Gracias por tu ayuda pero no entiendo lo de [x]
Los BMPs los tengo en recursos 驴 valdr铆a ? oBtnF[x]:SetFile("ok_verde.bmp")
驴 Que significa ? obtnF[x]:= AllTrim(familia->texto_tecl) y oBtnF[x]:= oFont1
Mi abuelo dec铆a: Los aviones vuelan porque Dios quiere, y los helic贸pteros ni Dios sabe porque vuelan.

FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Cambiar imagen de un BottonBMP en tiempo de ejecucion
Posted: Wed Jan 25, 2012 12:48 PM
JmGarcia

Supongo que "obtnF" es un array de objetos y los accede por medio de la variable "x"

viendo el titulo de tu post, no concuerda con el codigo de tu ejemplo, porque existe una clase ButtonBMP y una Clase BTNBMP...

Como expreso en mi firma, nuestra mejor documentacion es el codigo fuente, yo en lo personal cuando tengo que trabajar con una clase (incluso con las que yo mismo he dise帽ado), mantengo la clase abierta en el editor para recordar todas sus propiedades y metodos, de esa forma mantengo a la mano todas las caracteristicas del objeto, esto lo puedo llamar una "tecnica" para programar, como puedes ver todo lo tenemos a nuestro alcance y es mas facil que lo que nos imaginamos, espero te sirva este simple consejo

ahora abriendo el archivo btnbmp.prg, podemos examiarlo y estudiar sus metodos, que tienen nombres bastante intuitivos para un mejor entendimiento de lo que hacen

oBtn:SetFile( "ruta_nombre_imagen_para_buttonup", "ruta_nombre_imagen_para_buttondown" ) // para imagenes en disco

para ti ese metodo no sirve, pues lo necesitas desde recurso

existe otro metodo llamado LoadBitmaps( cResName1, cResName2, cBmpFile1, cBmpFile2, cResName3, cBmpFile3, cResName4, cBmpFile4 )
alli podemos ver cuales son los parametros usados para el nombre de los recurso y el usado para lso archivos

para los recursos son los parametros 1, 2, 5 y 7

el codigo del metodo nos dice para que son cada uno de esos parametros
cResName1 = Button Up (imagen en estado normal )
cResName2 = Button Down (imagen cuando se tiene el boton del mouse abajo )
cResName3 = imagen cuando el boton esta en estado "disable"
cResName4 = imagen cuando el mouse pasa sobre el boton

Nota... es importante antes de asignar nuevas imagenes, liberar las imagenes anteriores primero usa FreeBitmaps()
Posts: 654
Joined: Mon May 29, 2006 03:14 PM
Re: Cambiar imagen de un BottonBMP en tiempo de ejecucion
Posted: Thu Jan 26, 2012 08:09 AM
Daniel Garcia-Gil wrote:viendo el titulo de tu post, no concuerda con el codigo de tu ejemplo, porque existe una clase ButtonBMP y una Clase BTNBMP...
Quer铆a decir Bot贸n BMP en vez de BottonBMP.
Desconoc铆a que hubiera dos clases BTNBMP y ButtonBMP y he empezado por querer usar la primera.

Sea como fuere tu explicaci贸n es estupenda pero me encuentro en la texitura de no saber cual usar.

Voy a tratar de explicarme.
Necesito un bot贸n con clausula ACTION donde al pulsarlo pueda hacer algunas cosas. Ese boton en principio nace con un bmp con forma de aspa roja, al pulsarlo quiero cambiarlo a un aspa (o similar) de color verde. Es decir quiero cambiar el bmp en tiempo de ejecuci贸n. Adem谩s este bmp tiene que estar en recursos (en un RC).

驴 Podr铆as ponerme un peque帽o c贸digo fuente de como ser铆a ?

Desde ya muchas gracias por tu ayuda, por vuestra ayuda.
Mi abuelo dec铆a: Los aviones vuelan porque Dios quiere, y los helic贸pteros ni Dios sabe porque vuelan.

FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Cambiar imagen de un BottonBMP en tiempo de ejecucion
Posted: Thu Jan 26, 2012 06:10 PM
este ejemplo sta aplicado a una toolbar que contiene botones btnbmp, puede ser facilmente
implementado en botones solitarios.

Code (fw): Select all Collapse
/*-------------------------------------------------------------------------------------------------*/
/*procedimiento que muestra toolbar en dialogo*/
PROCEDURE Clientes_Toolbar()
聽 聽LOCAL oToolbar

聽 聽DEFINE BUTTONBAR oToolBar OF oDlg SIZE 70, 60 2010

聽 聽DEFINE BUTTON NAME "TB_CLOSE" 聽 聽 聽 OF oToolBar ACTION oDlg:END() 聽 聽 聽 聽 聽 聽 聽 聽 PROMPT "&Salir"
聽 聽DEFINE BUTTON NAME "TB_ADD" 聽 聽 聽 聽 OF oToolBar ACTION Clientes_Editar( TRUE 聽) 聽 PROMPT "&Nuevo" 聽 聽 聽GROUP
聽 聽DEFINE BUTTON NAME "TB_EDIT" 聽 聽 聽 聽OF oToolBar ACTION Clientes_Editar( FALSE ) 聽 PROMPT "&Editar"
聽 聽DEFINE BUTTON NAME "TB_DELETE" 聽 聽 聽OF oToolBar ACTION Clientes_Borrar() 聽 聽 聽 聽 聽PROMPT "&Borrar"
聽 聽DEFINE BUTTON NAME "TB_SEARCH" 聽 聽 聽OF oToolBar ACTION Clientes_BuscarXPrestamo() PROMPT "B&uscar"
聽 聽DEFINE BUTTON NAME "TB_EXPORTXLS" 聽 OF oToolBar ACTION Clientes_Exportar() 聽 聽 聽 聽PROMPT "&Exportar" 聽 GROUP
聽 聽DEFINE BUTTON NAME "TB_PRINTER" 聽 聽 OF oToolBar ACTION Clientes_Listar() 聽 聽 聽 聽 聽PROMPT "&Imprimir"
聽 聽DEFINE BUTTON NAME "TB_TABLESMONEY" OF oToolBar ACTION Clientes_Prestamos() 聽 聽 聽 PROMPT "&Prestamos" 聽GROUP
聽 聽DEFINE BUTTON NAME "TB_FILTERADD" 聽 OF oToolBar ACTION Clientes_FiltroAplicar() 聽 PROMPT "&Filtrar" 聽 聽GROUP


聽 聽/*muestra barra de estado*/
聽 聽SET MSGBAR OF oDlg TO "INS=Nuevo, DEL=Borrar, ENTER=Editar, F2=Prestamos, F3=Buscar, F4=Filtrar, F5=Imprimir, F8=Exportar, F9=Refrescar" 2010

聽 聽oDlg:SetControl( oBrw )
聽 聽oBrw:nTop 聽 聽+= 1
聽 聽oBrw:nHeight -= 1

聽 聽oToolBar:bRClicked := {|| TRUE }
聽 聽oToolBar:bLClicked := {|| TRUE }

聽 聽/*objeto boton para manejar boton del filtro*/
   oBtnFilter := oToolbar:aControls[ 9 ] /*aca tomo el control no. 9 del arreglo aControls que todo control contenedor tiene*/

RETURN

Code (fw): Select all Collapse
聽 聽/*si selecciono filtrar info*/
聽 聽IF lFiltrado

聽 聽 聽 IF nFNumCiu = 0 .and. ;
聽 聽 聽 聽 聽nFNumRut = 0 .and. ;
聽 聽 聽 聽 聽nFAmbito = 1 .and. ;
聽 聽 聽 聽 聽nFSaldo 聽= 1 .and. ;
聽 聽 聽 聽 聽Empty( dFFecIni ) .and. Empty( dFFecFin )

聽 聽 聽 聽 聽Clientes_FiltroQuitar()

聽 聽 聽 聽 聽RETURN

聽 聽 聽 ELSE

聽 聽 聽 聽 聽STORE "" TO cFilter0, cFilter1, cFilter2, cFilter3, cFilter4, cFilter5

聽 聽 聽 聽 聽IF nFNumCiu > 0
聽 聽 聽 聽 聽 聽 cFilter1 := StrFormat( "NUM_CIUD=%1", AllTrim( Str( nFNumCiu ) ) )
聽 聽 聽 聽 聽ENDIF

聽 聽 聽 聽 聽IF nFNumRut > 0
聽 聽 聽 聽 聽 聽 cFilter2 := StrFormat( "NUM_RUTA=%1", AllTrim( Str( nFNumRut ) ) )
聽 聽 聽 聽 聽ENDIF

聽 聽 聽 聽 聽IF nFAmbito > 1
聽 聽 聽 聽 聽 聽 IF nFAmbito=2
聽 聽 聽 聽 聽 聽 聽 聽cFilter3 := "ACTIVO=.T."
聽 聽 聽 聽 聽 聽 ELSE
聽 聽 聽 聽 聽 聽 聽 聽cFilter3 := "ACTIVO=.F."
聽 聽 聽 聽 聽 聽 ENDIF
聽 聽 聽 聽 聽ENDIF

聽 聽 聽 聽 聽IF !Empty( dFFecIni ) .and. !Empty( dFFecFin )
聽 聽 聽 聽 聽 聽 cFilter4 := StrFormat( "(FECHA_ING>=%1 .and. FECHA_ING<=%2)", Var2Str( dFFecIni ), Var2Str( dFFecFin ) )
聽 聽 聽 聽 聽ENDIF

聽 聽 聽 聽 聽IF nFSaldo > 1
聽 聽 聽 聽 聽 聽 cFilter5 := "SALDO_ACT>0"
聽 聽 聽 聽 聽ENDIF

聽 聽 聽 聽 聽cFilter0 := IIf( !Empty( cFilter1 ), cFilter1 + " .and. ", "" ) +;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽IIf( !Empty( cFilter2 ), cFilter2 + " .and. ", "" ) +;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽IIf( !Empty( cFilter3 ), cFilter3 + " .and. ", "" ) +;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽IIf( !Empty( cFilter4 ), cFilter4 + " .and. ", "" ) +;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽IIf( !Empty( cFilter5 ), cFilter5 + " .and. ", "" )

聽 聽 聽 聽 聽cFilter0 := StrTran( AllTrim( cFilter0 ), " 聽", " " )

聽 聽 聽 聽 聽IF Right( cFilter0, 5)==".and."
聽 聽 聽 聽 聽 聽 cFilter0 := SubStr( cFilter0, 1, Len( cFilter0 ) - 5 )
聽 聽 聽 聽 聽ENDIF

聽 聽 聽 聽 聽oBtnFilter:LoadBitmaps( "TB_FILTERDEL" )
聽 聽 聽 聽 聽oBtnFilter:cTooltip := "Elimina filtro aplicado a tabla de datos"
聽 聽 聽 聽 聽oBtnFilter:Refresh()

聽 聽 聽 聽 聽IF !Empty( cFilter0 )
聽 聽 聽 聽 聽 聽 CLIE->( cmFilter( cFilter0 ) )
聽 聽 聽 聽 聽ENDIF

聽 聽 聽 ENDIF

聽 聽ENDIF

聽 聽Refrescar_Browse( oBrw )

RETURN

Code (fw): Select all Collapse
/*procedimiento para eliminar filtro en lista de clientes*/
PROCEDURE Clientes_FiltroQuitar()

聽 聽IF lFiltrado

聽 聽 聽 oBtnFilter:LoadBitmaps( "TB_FILTERADD" )
聽 聽 聽 oBtnFilter:cTooltip := "Agrega filtrado a tabla de datos"
聽 聽 聽 oBtnFilter:Refresh()

聽 聽 聽 CLIE->( cmFilter( "" ) )

聽 聽 聽 lFiltrado := FALSE

聽 聽ENDIF

聽 聽Refrescar_Browse( oBrw )

RETURN
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Cambiar imagen de un BottonBMP en tiempo de ejecucion
Posted: Thu Jan 26, 2012 06:25 PM

Carlos

tienes que liberar los bitmap anteriores antes de cargar uno nuevo, sino te quedaras sin recursos

usa el metodo FreeBitMaps(), pero ojo eso libera todos los bitmaps del objeto

Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Cambiar imagen de un BottonBMP en tiempo de ejecucion
Posted: Thu Jan 26, 2012 10:38 PM

copiado, daniel, gracias.

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)

Continue the discussion