Page 1 of 1

Acción en un bitmap

PostPosted: Mon Jan 12, 2015 4:00 pm
by horacio
Compañeros, tengo un bitmap en un dialogo, lo implementé de la siguiente manera,

Code: Select all  Expand view

hBitmap := LoadBitmap( GetResources(), 'cerrar' )
DrawBitmap( hDc, hBitmap, 8, aRect[ 4 ] - 45, 37, 20 )
 


Me gustaría que se pudiera ejecutar una acción al hacer click en él. Existe alguna manera ? Muchísimas gracias.

Saludos

Re: Acción en un bitmap

PostPosted: Mon Jan 12, 2015 5:07 pm
by Antonio Linares
Horacio,

Lo idóneo es que uses un control TBitmap. Si lo estás mostrando sobre una ventana puedes hacer:

@ <nFila>, <nColumna> BITMAP oBmp OF oWnd RESOURCE "cerrar" ;
ON CLICK MsgInfo( "Mi acción" )

Para un diálogo definido desde recursos:

REDEFINE BITMAP oBmp ID <nId> OF oDlg RESOURCE "cerrar" ;
ON CLICK MsgInfo( "Mi acción" )

Y en el fichero RC lo defines como un control definido por el usuario de clase "TBitmap"

Re: Acción en un bitmap

PostPosted: Mon Jan 12, 2015 5:24 pm
by horacio
Antonio, esta rutina la utilizo en el método Paint del dialogo, si utilizo la clase me da errores cada tanto. Por eso decidí implementarlo de esta manera. Capaz que se pueda usar la clase pero no he podido dilucidar el porque de los gpf. Gracias

Saludos

Re: Acción en un bitmap

PostPosted: Tue Jan 13, 2015 11:41 am
by antolin
Horacio, te estoy contestando desde una tableta, por lo que no tengo el FWH a mano, pero con oDlg:blButtonDown o como se llame, puedes llamar a una función pasándole nRow y nCol, para saber si has pinchado sobre el Bmp o no. Eso lo hago algunas veces y va muy bien.

Un saludo.

Re: Acción en un bitmap

PostPosted: Tue Jan 13, 2015 5:03 pm
by horacio
Antolín, gracias por tu respuesta. Si pudieras postear un ejemplo te lo agradecería.

Saludos

Re: Acción en un bitmap

PostPosted: Tue Jan 13, 2015 5:45 pm
by antolin
Algo como esto::
Code: Select all  Expand view
DEFINE DIALOG ....
   DEFINE GET ....
   ...
   oDlg:bPainted  := { |hDc| ( PalbmpLoad(hDc,10,10,hBmp,hPal), .... ) }
   oDlg:bLClicked := { |nRow,nCol| AccionBmp(nRow,nCol,hBmp) }
ACTIVATE DIALOG ...

Suoponiendo que el Bitmap esta en las coordenadas 10,10 y mide 200X300 (AnchoXAlto)

FUNCTION AccionBmp(nRow,nCol,hBmp)
   IF nRow > 9 .AND. nRow < 311 .AND. nCol > 9 .AND. nCol < 211
      ...
      HE PINCHADO SOBRE EL BITMAP
      Y REALIZO LA ACCION PREVISTA
      ...
   ENDIF
   ...
RETURN NIL

Re: Acción en un bitmap

PostPosted: Tue Jan 13, 2015 9:20 pm
by horacio
Muchas gracias Antolín por tu sugerencia, pruebo y comento.

Saludos

Re: Acción en un bitmap

PostPosted: Wed Jan 14, 2015 2:02 pm
by horacio
Funcionó perfectamente. Muchas gracias Antolín.

Saludos