Bug en TBTNBMP Class FWH 19.12 ?

Bug en TBTNBMP Class FWH 19.12 ?

Postby Cgallegoa » Sat Feb 15, 2020 11:39 pm

Hola amigos:

En el siguiente ejemplo se crea un diálogo que contiene un radio y dos botones: uno para seleccionar y el otro para cancelar la tarea sin que se procese nada posterior al diálogo. Es decir, lo que sigue después del diálogo sólo debe procesarse si se pulsa sobre el botón "Select".

La variable lSelecc se inicializa como .F. y solamente cambiará a .T, si se pulsa el botón "Select".

En otras palabras, si se cierra el diálogo con cualquiera de las cuatro opciones difentes a "Select" y que son: 1.- Tecla ESC, 2.- pulsar sobre el botón "Cancel", 3.- dar click sobre la "X" en la esquina superior derecha del diálogo, y 4.- Pulsar las teclas ALT+F4 para cerrar el diálogo, la variable "lSelecc" debería permanecer en .F.

Esta condición se cumple en los tres primeros casos, pero falla en el 4 (ALT+F4) que pone la variable en .T. como si se hubiese pulsado sobre el botón "Select".

Esto pasa únicamente con la clase TBTNBMP . Con las demás clases para manejo de botones todo va bien.

¿ Cómo puedo solucionarlo o qué debo corregir en la clase ? Me urge resolverlo pues el proceso en el que se involucra este escenario es altamente sensible para la integridad de los datos del cliente.

Gracias anticipadas por su extraordinaria ayuda

Code: Select all  Expand view
#include "FiveWin.ch"

Function Main()
  LOCAL oDlg, oBtn1, oBtn2, oRad, nOpr:=1
  LOCAL lSelecc:=.F. , lNoEsc := .T.
  LOCAL aItems := {"Opcion 1","Opcion 2","Opcion 3","Opcion 4","Opcion 5"}

  DEFINE DIALOG oDlg FROM 0,0 TO 176,245 PIXEL TITLE "Documentos a Reversar" TRANSPARENT

    @ 05, 30 SAY "Seleccione tipo documento:" OF oDlg PIXEL SIZE 100,08

    oRad := TRadMenu():New( 15,25,aItems,{|u|If(PCount()==0,nOpR,nOpR:=u)}, oDlg,,,,,,.F.,, 70 , 09,,.F.,.F.,.T.)

    @ 68,08 BTNBMP oBtn1 PROMPT "&Select" ACTION ( lNoEsc := .T. , lSelecc:=.T. , oDlg:End()) OF oDlg SIZE 48,14 PIXEL;
            LEFT NOBORDER

    @ 68,67 BTNBMP oBtn1 PROMPT "&Cancel" ACTION ( lNoEsc := .T. , lSelecc:=.F. , oDlg:End()) OF oDlg SIZE 48,14 PIXEL;
            LEFT NOBORDER

  ACTIVATE DIALOG oDlg CENTERED VALID lNoEsc
  if lSelecc
     MsgInfo(nOpr)     // <=== *** ESTO DEBE PROCESARLO SI, Y SÓLO SI, SE PULSA SOBRE EL BOTÓN "Select". *** //
  endif
Return(NIL)
Saludos,

Carlos Gallego

*** FWH-23.10, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Cgallegoa
 
Posts: 414
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Re: Bug en TBTNBMP Class FWH 19.12 ?

Postby cnavarro » Sun Feb 16, 2020 10:00 am

Carlos, prueba asi
Code: Select all  Expand view

  ACTIVATE DIALOG oDlg CENTERED VALID ( lNoEsc .and. !GetKeyState( 18 ) )
 

El tema está en el "&" en el prompt del BtnBmp, si lo quitas tampoco se ejecuta su action
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Bug en TBTNBMP Class FWH 19.12 ?

Postby Cgallegoa » Sun Feb 16, 2020 3:21 pm

Cristobal gracias por tu respuesta.

Es una buena sugerencia temporal. Lo importante sería encontrar en cuál parte del código de FWH está el inconveniente, que definitivamente está relacionado con la unión del símbolo acelerador "&" con la letra "S" y la combinación "ALT+F4".

Con cualquier otra letra funciona sin problemas, sólo es cuando "&S" está contenido en el prompt de l botón.

Hay que encontrar la solución definitiva, pues me tocaría cambiar en muchos sitios dentro de las aplicaciones

Si revisas este hilo verás que es un inconveniente antiguo, reportado por Oscar A. Martinez en el 2009 y aún no se soluciona !!!

http://forums.fivetechsupport.com/viewtopic.php?f=6&t=15422&hilit=acelerador

Un abrazo
Saludos,

Carlos Gallego

*** FWH-23.10, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Cgallegoa
 
Posts: 414
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Re: Bug en TBTNBMP Class FWH 19.12 ?

Postby cnavarro » Sun Feb 16, 2020 6:01 pm

Carlos, el problema es sencillo
El código extendido de la tecla "F4" es:
#define VK_F4 115 // 0x73

y el Chr( 115 ) corresponde con la letra "s", por lo que hay que controlar si se tiene pulsada la tecla "ALT" o no, y ese es el motivo por lo que se produce ese problema en la function CallClick() de CONTROL.PRG, ya que ahí es donde hace el Click del botón que es lo que produce el efecto que describes. Como posible solución, pon este código que he añadido.( Ojo esto es una solución que hay que probar a fondo )
Code: Select all  Expand view

Static function CallClick( nKey, aControls, Self )

   local n, cPrompt, nAt, oControl

   for n = 1 to Len( aControls )
      oControl = aControls[ n ]
      if oControl:Classname() == "TBTNBMP" .OR. oControl:Classname() == "TRBTN"
        cPrompt := aControls[ n ]:cCaption
         nAt = At( "&", cPrompt )
         if nAt != 0
            if nKey = 115 .and. GetKeyState( 18 )      // Añadido CNL 16/02/2020
               if !Empty( Self:oWnd )                         // Añadido CNL 16/02/2020
                  Self:oWnd:End()                               // Añadido CNL 16/02/2020
                  return 0                                           // Añadido CNL 16/02/2020
               endif                                                  // Añadido CNL 16/02/2020
            else                                                       // Añadido CNL 16/02/2020
               if Upper( SubStr( cPrompt, nAt + 1, 1 ) ) == Upper( Chr( nKey ) ) .and. IsWindowEnabled( aControls[ n ]:hWnd )
                  SetFocus( aControls[ n ]:hWnd )
                  aControls[ n ]:Click()
                  return 0 // msg processed
               endif
            endif
         endif
      endif
   next

return nil
//----------------------------------------------------------------------------//

 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Bug en TBTNBMP Class FWH 19.12 ?

Postby cnavarro » Sun Feb 16, 2020 6:14 pm

Mejor asi:
Code: Select all  Expand view

         if nAt != 0
            if ( nKey = 115 .and. GetKeyState( 18 ) ) .and. ;
               ( Asc( SubStr( cPrompt, nAt + 1, 1 ) ) = 115 .or. Asc( SubStr( cPrompt, nAt + 1, 1 ) ) = 83 )
               if !Empty( Self:oWnd )
                  Self:oWnd:End()
                  return 0
               endif
            else
.../...
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Bug en TBTNBMP Class FWH 19.12 ?

Postby nageswaragunupudi » Tue Feb 18, 2020 4:49 pm

This is the final fix:

Please locate this line in the METHOD SysKeyDown( nKey, nFlags ) in control.prg:
Code: Select all  Expand view

   if ::oWnd:oMenu == NIL
 


Modify this line as
Code: Select all  Expand view

   if ::oWnd:oMenu == NIL .and. nKey != VK_F4
 


No other changes are required in control.prg

This fix is available in the next version of FWH under release.

Note:
ALTERNATIVELY,
Please see this line in the static function CallClick( nKey, aControls, Self )
Code: Select all  Expand view

            if Upper( SubStr( cPrompt, nAt + 1, 1 ) ) == Upper( Chr( nKey ) ) .and. IsWindowEnabled( aControls[ n ]:hWnd )
 

This line can be changed as
Code: Select all  Expand view

            if Upper( SubStr( cPrompt, nAt + 1, 1 ) ) == Chr( nKey ) .and. IsWindowEnabled( aControls[ n ]:hWnd )
 

This change also works instead of the above.
Regards

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

Re: Bug en TBTNBMP Class FWH 19.12 ?

Postby Cgallegoa » Tue Feb 18, 2020 7:27 pm

Nages and Cristobal, thanks a lot. You are the best :D

I'll be waiting for the new version.

Regards
Saludos,

Carlos Gallego

*** FWH-23.10, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Cgallegoa
 
Posts: 414
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador


Return to FiveWin para Harbour/xHarbour

Who is online

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