Page 1 of 1

Imagen en Columna de Xbrowse superpone acciones

PostPosted: Wed Jan 12, 2022 4:13 pm
by VictorCasajuana
Hola.

Intento incluir 2 imágenes en una columna del xBrowse para realizar acciones de disminución o aumento del valor de la columna. Funciona todo bien, pero cuando hago doble click sobre la imagen de la izquierda ( menos ) ejecuta la función de la imagen de la derecha ( más ). En la captura animada no aparece la imagen pero la acción sí que se realiza.
Hay alguna forma de interceptar ese doble click en la imagen de la izquierda ( menos ) para que no haga ninguna funcionalidad?

Lo he probado con el siguiente código:
Code: Select all  Expand view

#include "fivewin.ch"

function TestMain()

   local oWnd, oBar, oBrw

   DEFINE WINDOW oWnd

   @ 0,0 XBROWSE oBrw OF oWnd;
      COLUMNS 1;
      HEADERS "numero";
      ARRAY {1,2,3,4}

   WITH OBJECT oBrw
      :CreateFromCode()

      WITH OBJECT :aCols[1]
            :nDataStrAlign := AL_CENTER
            :AddBitmap( { FW_BmpPlus(), FW_BmpMinus() } )

            :nEditType     := EDIT_BUTTON
            :bEditBlock    := { |r,c,oCol| oCol:VarPut( oCol:Value + 1 ) }
            :nBtnBmp       := 1
            :lBtnTransparent  := .t.

            :bBmpData      := { |v,lSel| If( lSel, 2, 0 ) }
            :bBmpAction    := { |oCol| oCol:VarPut( oCol:Value - 1 )  }
        END

   END

   ACTIVATE WINDOW oWnd

return nil
 


El resultado es el siguiente, las pulsaciones iniciales funcionan bien, pero las últimas pulsaciones que hago en el botón menos son con doble click
Image

gracias y salud!

Re: Imagen en Columna de Xbrowse superpone acciones

PostPosted: Wed Jan 12, 2022 4:38 pm
by cnavarro
Victor

Code: Select all  Expand view

         WITH OBJECT :oCol( 5 )
            :nDataStrAlign  := AL_CENTER
            :nWidth         := 100
            :AddBitmap( { "PLUS1", "MIN1" } )
            // Right Button
            :nEditType       := EDIT_BUTTON
            :bEditBlock      := { | r, c, oCol | if( Valtype( oCol ) = "O", oCol:Value + 1, ) }
            :nBtnBmp         := 1
            :lBtnTransparent := .t.
            // Left Button
            :bBmpData        := { | v, lSel | 2 } //if( lSel, 2, 0 ) }
            :bBmpAction      := { | oCol | if( Valtype( oCol ) = "O", oCol:VarPut( if( oCol:Value > 1, oCol:Value - 1, oCol:Value ) ), ) }
    END
 

Re: Imagen en Columna de Xbrowse superpone acciones

PostPosted: Thu Jan 13, 2022 8:48 am
by VictorCasajuana
Gracias por la rápida respuesta Cristobal.

He probado tu código y el comportamiento es el mismo, cuando pulsas doble click en el botón de "menos" hace las 2 acciones, primero evalúa el bEditBlock y luego el bBmpAction

Re: Imagen en Columna de Xbrowse superpone acciones

PostPosted: Thu Jan 13, 2022 12:36 pm
by cnavarro
Victor, parece ser que no había entendido tu pregunta, prueba añadiendo esto en la definición de la columna
Code: Select all  Expand view


            :bLDClickData    := { | nR, nC, nK, oCol | .T. }
 

Re: Imagen en Columna de Xbrowse superpone acciones

PostPosted: Thu Jan 13, 2022 1:37 pm
by VictorCasajuana
Esa era la clave Cristobal!

ahora funciona perfecto, el blDClickData intercepta el dobleclick para que no haga nada.

Dejo el código que funciona por si a alguien más le sirve.

Code: Select all  Expand view


#include "fivewin.ch"

function TestMain()

   local oWnd, oBar, oBrw

   DEFINE WINDOW oWnd

   @ 0,0 XBROWSE oBrw OF oWnd;
      COLUMNS 1;
      HEADERS "numero";
      ARRAY {1,2,3,4}

   WITH OBJECT oBrw
      :CreateFromCode()

      WITH OBJECT :aCols[1]
         :nDataStrAlign  := AL_CENTER
         :nWidth         := 100
         :AddBitmap( { FW_BmpPlus(), FW_BmpMinus() } )
         // Right Button
         :nEditType       := EDIT_BUTTON
         :bEditBlock      := { | r, c, oCol | if( Valtype( oCol ) = "O", oCol:Value + 1, ) }
         :nBtnBmp         := 1
         :lBtnTransparent := .t.
         // Left Button
         :bBmpData        := { | v, lSel | 2 } //if( lSel, 2, 0 ) }
         :bBmpAction      := { | oCol | if( Valtype( oCol ) = "O", oCol:VarPut( if( oCol:Value > 1, oCol:Value - 1, oCol:Value ) ), ) }
         :bLDClickData    := { | nR, nC, nK, oCol | .T. }
      END

   END

   ACTIVATE WINDOW oWnd

return nil
 


Gracias y salud!