PUBLIC oform1 oform1=NEWOBJECT("form1") oform1.Show RETURN *- DEFINE CLASS form1 AS form Top = 0 Left = 0 Height = 500 Width = 600 lastx = 0 lasty = 0 addy = 0 ADD OBJECT GestureEventHandler AS GestureEventHandler ADD OBJECT grid1 AS grid WITH ; RecordSource = "Dummy", ; RecordSourceType = 1, ; Left = 5,; Height = 490,; Top = 5, ; Width = 690, ; AllowCellSelection = .F. PROCEDURE handleevent(oGesture) IF oGesture.ID <> 4 THIS.Lasty = 0 THIS.addy = 0 ENDIF IF THIS.LastY <> 0 THIS.AddY = THIS.AddY + (THIS.Lasty - oGesture.Ypos)/ THIS.Grid1.Rowheight ENDIF IF INT(THIS.AddY) <> 0 FOR nT = 1 TO ABS(THIS.Addy) THIS.Grid1.DoScroll(IIF(THIS.AddY> 0,1,0)) ENDFOR THIS.AddY = THIS.AddY% 1 ENDIF THIS.LastY = oGesture.Ypos ENDPROC *- PROCEDURE Load CREATE CURSOR Dummy (F1 I, F2 I, F3 I) FOR nT = 1 TO 1000 INSERT INTO Dummy VALUES (nT, nT, nT) GO TOP ENDFOR ENDPROC FUNCTION Init THIS.GestureEventHandler.Setup(THISFORM.HWnd, THIS, "HandleEvent") ENDFUNC ENDDEFINE *- DEFINE CLASS GestureEventHandler AS Custom FUNCTION Setup(nHwnd, oObject, cDelegate) LOCAL cStruct DECLARE SetGestureConfig IN user32.dll integer, integer, integer, string @cStruct, integer DECLARE GetGestureInfo IN user32 integer, string @cStruct DECLARE integer GetWindowLong in Win32API integer hWnd, integer nIndex DECLARE integer CallWindowProc in Win32API integer lpPrevWndFunc, integer hWnd, integer Msg, integer wParam, integer lParam * Enable Single finger pan gesture cStruct = REPLICATE(CHR(0),4)+BINTOC(1,"4RS")+REPLICATE(CHR(0),4) =SetGestureConfig(nHWnd, 0, 1 , @cStruct, 12) BINDEVENT(nhWnd, 0x0119, THIS, "HandleEvent",4) BINDEVENT(THIS, "RaiseGestureEvent", oObject, cDelegate) ENDFUNC *- FUNCTION HandleEvent(nHwnd, nMsg, wParam, lParam) LOCAL nRet, lnOldProc, oGesture cStruct = BINTOC(48,"4RS")+REPLICATE(CHR(0),44) = GetGestureInfo(lParam, @cStruct) oGesture = CREATEOBJECT("Empty") ADDPROPERTY(oGesture, "Flags", CTOBIN(SUBSTR(cStruct,5,4),"4R")) ADDPROPERTY(oGesture, "hWnd", nHwnd) ADDPROPERTY(oGesture, "ID", CTOBIN(SUBSTR(cStruct,9,4),"4RS")) ADDPROPERTY(oGesture, "xPos", CTOBIN(SUBSTR(cStruct,17,2),"2RS")) ADDPROPERTY(oGesture, "yPos", CTOBIN(SUBSTR(cStruct,19,2),"2RS")) THIS.RaiseGestureEvent(oGesture) lnOldProc = GetWindowLong(nhWnd, -4) nRet = CallWindowProc(lnOldProc, nhWnd, nMsg, wParam, lParam) RETURN nRet ENDFUNC *- FUNCTION RaiseGestureEvent(oGesture) * Do noting. It is just a placeholder for binding event. ENDFUNC ENDDEFINE