how to catch mouse event in a grid ?
Posted: Sat Mar 29, 2014 4:31 pm
Pablo,Pablo César wrote:Casi, casi, pero todavia sin suceso.srvet_claudio wrote:Pablo now I think I understand your demo, a Grid with Keyboard or Mouse, but not both at once.
Add in your code:
CREATE EVENT PROCNAME Check_Event_ByPass() HwND form_1.GRID_1.HANDLE STOREINDEX nIndex
EventProcessAllHookMessage (nIndex, .T.)![]()
Claudio, fijese que en mi ejemplo (utilize mi demo ejecutable) y verá que todos los eventos que fueron definidos en el demo son exibidos en el StatuBar:
- key_up
- key_down
- Mouse wheel
- Mouse move
- Mouse lbtn Down
- Mouse Rbtn Down
Claro, que tendrá que clicar en el CheckBox. Pero funcionan aparentemente normal, inclusive mouse e keyboard events.
Con su indicación de colocar: EventProcessAllHookMessage (nIndex, .T.) funcionó en partes, pero tiene comportamiento diferente al que fué indicado por jpp de adicionar:
Porque el CheckBox alterna el valor pre-definido en mi funcion Check_Event_ByPass() para que retorne al contrário.Code: Select all
*-- Deb Jpp ELSEIF AT("BYPASS", UPPER( EventGetPROCNAME (nIndex))) > 0 lProcessMessage := .T. *-- Fin Jpp
sinceramente no me doy cuenta de la diferencia entre tu demo.exe y el creado con EventProcessAllHookMessage (nIndex, .T.),
fíjate que ambos fuerzan que se procese todos los mensajes de Windows para el procedure especificado en CREATE EVENT, obviamente el de Jpp solo si el procedure posee la palabra Bypass en su nombre:
Code: Select all
lProcessMessage := .F.
IF EventProcessAllHookMessage (nIndex) == .T.
lProcessMessage := .T.
ELSEIF EventProcessHMGWindowsMessage (nIndex) == .T. .AND. IsHMGWindowsMessage == .T.
lProcessMessage := .T.
ELSEIF EventProcessKeyboardMessage (nIndex) == .T. .AND. IsKeyboardMessage == .T.
lProcessMessage := .T.
*-- Deb Jpp
ELSEIF AT("BYPASS", UPPER( EventGetPROCNAME (nIndex))) > 0
lProcessMessage := .T.
*-- Fin Jpp
ENDIF