FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Bug en TBTNBMP Class FWH 19.12 ?
Posts: 514
Joined: Sun Oct 16, 2005 03:32 AM
Bug en TBTNBMP Class FWH 19.12 ?
Posted: 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 (fw): Select all Collapse
#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-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Bug en TBTNBMP Class FWH 19.12 ?
Posted: Sun Feb 16, 2020 10:00 AM
Carlos, prueba asi
Code (fw): Select all Collapse
  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
Posts: 514
Joined: Sun Oct 16, 2005 03:32 AM
Re: Bug en TBTNBMP Class FWH 19.12 ?
Posted: Sun Feb 16, 2020 03: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-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Bug en TBTNBMP Class FWH 19.12 ?
Posted: Sun Feb 16, 2020 06: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 (fw): Select all Collapse
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
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Bug en TBTNBMP Class FWH 19.12 ?
Posted: Sun Feb 16, 2020 06:14 PM
Mejor asi:
Code (fw): Select all Collapse
         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
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Bug en TBTNBMP Class FWH 19.12 ?
Posted: Tue Feb 18, 2020 04:49 PM
This is the final fix:

Please locate this line in the METHOD SysKeyDown( nKey, nFlags ) in control.prg:
Code (fw): Select all Collapse
聽 聽if ::oWnd:oMenu == NIL


Modify this line as
Code (fw): Select all Collapse
聽 聽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 (fw): Select all Collapse
            if Upper( SubStr( cPrompt, nAt + 1, 1 ) ) == Upper( Chr( nKey ) ) .and. IsWindowEnabled( aControls[ n ]:hWnd )

This line can be changed as
Code (fw): Select all Collapse
            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
Posts: 514
Joined: Sun Oct 16, 2005 03:32 AM
Re: Bug en TBTNBMP Class FWH 19.12 ?
Posted: Tue Feb 18, 2020 07: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-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***

Continue the discussion