Cambio de imagen a 1 boton

Cambio de imagen a 1 boton

Postby José Camilo » Wed Feb 14, 2024 1:45 am

Buenas noches.
necesito que al oprimir un boton de una ButtonBar este cambie su archivo bmp.
esta declarado asi:

DEFINE BUTTON oBoton1 OF oBar FILE "Efectivo.bmp" ;
ACTION Cobros() ;
MESSAGE "Mantenimiento de Cobros";
PROMPT "Cobros"
oBoton1:lTransparent = .t.

necesito que al oprimirlo muestre la imagen "cheque.bmp"

Gracias
José Camilo
 
Posts: 212
Joined: Wed Apr 07, 2021 3:56 pm

Re: Cambio de imagen a 1 boton

Postby nageswaragunupudi » Wed Feb 14, 2024 2:07 am

Try
Code: Select all  Expand view  RUN
DEFINE BUTTON oBoton1 OF oBar FILE cBmp1, cBmp2, cBmp3, cBmp4 ;
ACTION ...

Then see how the 4 bmp files are used when clicking, hovering, disabled, etc
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10690
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Cambio de imagen a 1 boton

Postby José Camilo » Wed Feb 14, 2024 3:17 am

Gracias por su tiempo Mr. Rao.
Lo que busco es que cambie la imagen y quede fija la nueva imagen hasta volverlo a oprimir y alli retome la primera imagen del boton.
Como Ud. me lo indico solo lo cambia al oprimir pero no queda fija la nueva imagen.
me explico? solo quiero que el boton inicie con una imagen "efectivo.BMP" y al oprimirlo cambie a la imagen "cheque4.bmp" hasta que lo oprima nuevamente y regrese a la imagen de "efectivo.bmp".

he intentado de esta forma pero solo me cambia el CAPTION

DEFINE BUTTON oBoton1 OF oBar FILE "Efectivo.bmp" ;
ACTION (oBoton1:cCaption:='Cheque',oBoton1:FreeBitmaps(),oBoton1:LoadBitMaps("Cheque4.Bmp"),oBoton1:Paint(),oBoton1:refresh(),Cobros()) ;
MESSAGE "Mantenimiento de Cobros";
PROMPT "Cobros"
oBoton1:lTransparent = .t.


y se que solo estoy cambiando 1 vez la imagen

Gracias igualmente!!!!
José Camilo
 
Posts: 212
Joined: Wed Apr 07, 2021 3:56 pm

Re: Cambio de imagen a 1 boton

Postby cmsoft » Wed Feb 14, 2024 12:04 pm

Jose:
Puedes usar algo asi:
Code: Select all  Expand view  RUN

#include "FiveWin.ch"

static oWnd

//----------------------------------------------------------------------------//

function Main()

   local oBrush, oBar, oBoton1

   DEFINE BRUSH oBrush STYLE TILED

   DEFINE WINDOW oWnd FROM 1, 5 TO 20, 65 ;
      TITLE "FiveWin ButtonBar & Menu Management" ;
      BRUSH oBrush

   DEFINE BUTTONBAR oBar SIZE 60, 60 _3D OF oWnd

   DEFINE BUTTON OF oBar FILE "..\bitmaps\Exit.bmp" PROMPT "Salir"    MESSAGE "End this session" ;
      ACTION If( MsgYesNo( "Seguro de Salir ?", "Elija por favor" ),;
                 oWnd:End(), )

   DEFINE BUTTON oBoton1 OF oBar FILE "..\bitmaps\Cut.bmp"  PROMPT "Cambiar"   MESSAGE "Copy" GROUP ;
      ACTION Cambiarboton(oBoton1)  
   

   ACTIVATE WINDOW oWnd

return nil

//----------------------------------------------------------------------------//

STATIC FUNCTION Cambiarboton(oBot)
IF oBot:cCaption == 'Cambiar'
   oBot:SetImages('..\bitmaps\paste.bmp')
   oBot:cCaption := "Cambiar2"
   ELSE
   oBot:SetImages('..\bitmaps\Cut.bmp')
   oBot:cCaption := "Cambiar"
ENDIF
RETURN nil  
User avatar
cmsoft
 
Posts: 1293
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Cambio de imagen a 1 boton

Postby nageswaragunupudi » Wed Feb 14, 2024 1:19 pm

This can be achieved with far simpler code:
Code: Select all  Expand view  RUN
function BarBtnToggle()

   local oWnd, oBar, oBtn
   local nBmp  := 1

   DEFINE WINDOW oWnd
   DEFINE BUTTONBAR oBar OF oWnd SIZE 64,64 2007
   DEFINE BUTTON oBtn OF oBar ;
      PROMPT { || If( nBmp == 1, "Open", "Close" ) } ;
      FILE "\fwh\bitmaps\open32.bmp", "\fwh\bitmaps\close32.bmp" ;
      ACTION ( nBmp := nXor( nBmp, 3 ), oWnd:Refresh() )
   oBtn:bBmpNo := { || nBmp }

   ACTIVATE WINDOW oWnd CENTERED ;
      ON PAINT oWnd:SayText( If( nBmp == 1, "CLOSED", "OPENED" ) )

return nil


We can toggle both prompt and image using codeblocks as suggested above.
No need to keep loading bitmap again and again.

Image
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10690
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Cambio de imagen a 1 boton

Postby cmsoft » Wed Feb 14, 2024 1:50 pm

Gracias por la aclaración y el código optimizado Mr. Rao
User avatar
cmsoft
 
Posts: 1293
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Cambio de imagen a 1 boton

Postby José Camilo » Wed Feb 14, 2024 1:57 pm

Muchas Gracias Mr. Rao y Cesar !!! por su tiempo y soluciones.
José Camilo
 
Posts: 212
Joined: Wed Apr 07, 2021 3:56 pm

Re: Cambio de imagen a 1 boton

Postby karinha » Wed Feb 14, 2024 3:55 pm

Usando RECURSOS:

Code: Select all  Expand view  RUN

   DEFINE BUTTON oSaida RESOURCE "FECHAR", "FECHAR2" OF oBar                 ;
      NOBORDER GROUP PROMPT "Saida"                                          ;
      MESSAGE "Sair do Programa"                                             ;
      ACTION( oSaida:Toggle(), ENCERRA( oWnd ), oSaida:GoUp() )              ;
      TOOLTIP { "Encerrar Programa - Finalizar",                             ;
                "Encerrar o Programa Agora?   ", 1, CLR_WHITE, CLR_HBLUE }

   oSaida:nWidth := 80 // 120

   oSaida:oCursor := oHand
   // Acionar processo em um movimento do Mouse sobre um botao...
   oSaida:bMMoved = { | nRow, nCol, nFlags | MsgBeep() }
   oSaida:lBoxSelect := .F.
 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7872
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Cambio de imagen a 1 boton

Postby nageswaragunupudi » Wed Feb 14, 2024 4:28 pm

Yes, we can use oBtn:Toggle()
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10690
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Cambio de imagen a 1 boton

Postby nageswaragunupudi » Wed Feb 14, 2024 4:44 pm

Sample using oBtn:Toggle()
Code: Select all  Expand view  RUN
function BarBtnToggle()

   local oWnd, oBar, oBtn

   DEFINE WINDOW oWnd MDI
   DEFINE BUTTONBAR oBar OF oWnd SIZE 64,64 2007
   DEFINE BUTTON oBtn OF oBar ;
      PROMPT { || If( oBtn:lPressed, "Close", "Open" ) } ;
      FILE "\fwh\bitmaps\open32.bmp", "\fwh\bitmaps\close32.bmp" ;
      ACTION Child( oBtn )

   ACTIVATE WINDOW oWnd CENTERED

return nil

static function Child( oBtn )

   static oWnd

   if oBtn:lPressed
      oWnd:End()
   else
      oBtn:Toggle()
      DEFINE WINDOW oWnd MDICHILD OF WndMain() COLOR 0,CLR_WHITE
      oWnd:bPostEnd := { || oBtn:Toggle() }
      ACTIVATE WINDOW oWnd
   endif

return oWnd
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10690
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Cambio de imagen a 1 boton

Postby karinha » Wed Feb 14, 2024 5:07 pm

very good!!

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7872
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 95 guests