Cambiar imagen de un BottonBMP en tiempo de ejecucion

Cambiar imagen de un BottonBMP en tiempo de ejecucion

Postby JmGarcia » Wed Jan 25, 2012 7: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: Select all  Expand view
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
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Cambiar imagen de un BottonBMP en tiempo de ejecucion

Postby Bayron » Wed Jan 25, 2012 11:09 am

Code: Select all  Expand view

oBtnF[x]:SetFile( ltrim(Camino + 'graficos\botones\brush' + botonfam->nombre) )
obtnF[x]:cCaption:= AllTrim(familia->texto_tecl)
oBtnF[x]:oFont:= oFont1
oBtnF[x]:Refresh()
=====>

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

FWH12.04||Harbour 3.2.0 (18754)||BCC6.5||UEstudio 10.10||
Windows 7 Ultimate

FiveWin, One line of code and it's done...
User avatar
Bayron
 
Posts: 815
Joined: Thu Dec 24, 2009 12:46 am
Location: Philadelphia, PA

Re: Cambiar imagen de un BottonBMP en tiempo de ejecucion

Postby JmGarcia » 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]:cCaption:= AllTrim(familia->texto_tecl) y oBtnF[x]:oFont:= 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
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Cambiar imagen de un BottonBMP en tiempo de ejecucion

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

Re: Cambiar imagen de un BottonBMP en tiempo de ejecucion

Postby JmGarcia » Thu Jan 26, 2012 8: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
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Cambiar imagen de un BottonBMP en tiempo de ejecucion

Postby carlos vargas » Thu Jan 26, 2012 6:10 pm

este ejemplo sta aplicado a una toolbar que contiene botones btnbmp, puede ser facilmente
implementado en botones solitarios.

Code: Select all  Expand view

/*-------------------------------------------------------------------------------------------------*/
/*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: Select all  Expand view

   /*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: Select all  Expand view

/*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)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Cambiar imagen de un BottonBMP en tiempo de ejecucion

Postby Daniel Garcia-Gil » Thu Jan 26, 2012 6: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
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Cambiar imagen de un BottonBMP en tiempo de ejecucion

Postby carlos vargas » Thu Jan 26, 2012 10:38 pm

copiado, daniel, gracias.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 94 guests