Page 1 of 1

SABER SI SE HA PULSADO UN BOTON O CONTROL

Posted: Thu Jul 12, 2018 11:52 am
by SALINETAS24
Hola a todos, necesito saber cuando el usuario pulsa un Boton, estoy haciendo esto pero me falla.
La linea del * cuando compilo, dice que la Variable _HMG_acontrolHandle no existe, supongo que será por un tema del HMG y del MINIGUI.
Hay alguna forma de saber cual será el próximo campo donde ira con el raton el usuario.
Gracias.

Code: Select all



@ 390,15  TEXTBOX Get_1 WIDTH 80 VALUE aField[3] MAXLENGTH 10 FONT gFont SIZE gSize;
					ON LOSTFOCUS VER()

STATIC FUNCTION VER()
	LOCAL N:= GetNextDlgTabItem (GetActiveWindow (), GetFocus (), .f.)
*	LOCAL i:= Ascan (_HMG_aControlHandle, N) 
	LOCAL i:= ASCAN ( _HMG_SYSDATA [3] ,  N )
	MSGBOX( _HMG_SYSDATA [1] [i])
RETURN


Re: SABER SI SE HA PULSADO UN BOTON O CONTROL

Posted: Fri Jul 13, 2018 5:52 pm
by SALINETAS24
Hola otra vez. Ya está resuelto. Es un poco chapucero, pero ya puedo saber si se pulso el boton y así ya tengo el control sobre el ON ENTER y el ON LOSTFOCUS y así por ejemplo no se podrá cambiar el foco si el campo no está OK.
Como vereis utilizo la variable _HMG_SYSDATA[191] que nos devuelve el valor de la fila donde se pulso el raton, en mi caso como solo tengo un boton en esa fila es mas que suficiente. Si necesitáis precisar más tenemos la _HMG_SYSDATA[192] que nos devuelve el valor de la Columna.

El caso es que cuando voy a cambiar el foco, por que el usuario a tocado el ratón.., veo primero si lo que ha pulsado es el botón que quiero controlar.

Una cosa, he visto que si el ratón se mueve rápido, el valor que devuelve la función en ocasiones no guarda ningún parecido con la realidad...., pero bueno de momento ya tenemos el control
Sl2

Code: Select all

ON LOSTFOCUS (IF(_HMG_SYSDATA [ 191 ]>506 .AND. _HMG_SYSDATA [ 191 ]<545,lSalir:=.T.,nil),;					 
  IF(lSalir,nil,IF(lCtaOk,nil,This.SetFocus)))
  

Re: SABER SI SE HA PULSADO UN BOTON O CONTROL

Posted: Sat Jul 14, 2018 5:02 pm
by andyglezl
Hola a todos, necesito saber cuando el usuario pulsa un Boton
( Defines un TEXTBOX y hablas de pulsar un BOTON ??? )

No me queda claro tu forma de querer manejar las cosas y tal vez me equivoque,
pero quizá esto es lo que quieres.

Code: Select all

		@ 10,10 TEXTBOX Text_1 ;
			VALUE 123 ;
			TOOLTIP 'Numeric TextBox' ;
			NUMERIC ;
			MAXLENGTH 5 ;
			RIGHTALIGN ;
			ON LOSTFOCUS if ( This.Value < 100 , This.SetFocus , Nil)

Re: SABER SI SE HA PULSADO UN BOTON O CONTROL

Posted: Sun Jul 15, 2018 1:07 am
by SALINETAS24
PANTALLA.png
PANTALLA.png (75.9 KiB) Viewed 2261 times
Hola Andrés y gracias por interesarte.
Ya lo tengo controlado, y lo que quería es emular el VALID del clipper.
Al programar en OBJETOS el usuario puede navegar libremente por los campos, pero en el caso que me ocupa tengo un campo que es obligatorio.
Veras, imaginate que tienes varios TEXTBOX y el primero de ellos pide un código y es obligatorio el tenerlo.
Con ON ENTER lo tenemos parcialmente controlado, con ON LOSTFOCUS casí también.
Pero que pasa si tienes un BUTTON para cancelar el proceso..., es un follón. Se que pinchando la "X" se cierra pero tampoco me sirve.

En mi caso el TEXTBOX en cuestión pide un numero de cuenta de 10 dígitos con una serie de peculiaridades.

1/ Si esta en blanco y el usuario pulsa ENTER se le muestra una ventana con los registros ya creados de cuenta para que seleccione una.
2/ Si el usuario introduce por ejemplo el código 1.1 el sistema completa, modifica y presenta 1000000001, osea rellena con ceros. Si el numero introducido es el 431.99 el sistema completa, modifica y presenta 4310000099.
3/ Acto seguido comprueba que el código existe, si .t. , pone el nombre y pasa al siguiente TEXTBOX en caso contrario se llama al programa de altas y permite su incorporación.
4/No puede avanzar al siguiente TEXTBOX si la cuenta no es correcta
5/y para terminar si se pulsa el botton CANCELAR.., poder cancelar la introduccion y regrasar al GRID de donde procede.

Creo que he puesto la pantalla y lo dicho gracias por contestar.