SABER SI SE HA PULSADO UN BOTON O CONTROL

HMG en Español

Moderator: Rathinagiri

Post Reply
User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

SABER SI SE HA PULSADO UN BOTON O CONTROL

Post 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

Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

Re: SABER SI SE HA PULSADO UN BOTON O CONTROL

Post 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)))
  
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
User avatar
andyglezl
Posts: 1461
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Contact:

Re: SABER SI SE HA PULSADO UN BOTON O CONTROL

Post 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)
Andrés González López
Desde Guadalajara, Jalisco. México.
User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

Re: SABER SI SE HA PULSADO UN BOTON O CONTROL

Post by SALINETAS24 »

PANTALLA.png
PANTALLA.png (75.9 KiB) Viewed 2253 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.
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
Post Reply