Download at first the image here:trace.png, and save as to "c:\trace.png"
Compile, then you can try the various proposed figures.
To begin a figure, a click left of the button of the mouse pushed and maintained during the duration of the plan in the aera client window.
Code: Select all
UsePNGImageDecoder()
Global HookMouse.l,mouvement.s
Procedure Compare(Chaine_Decripte.s)
Select Len(Chaine_Decripte)
Case 4
Select Chaine_Decripte
Case "GGGG":MessageRequester("Find"," Trace N°1")
Case "DDDD":MessageRequester("Find"," Trace N°2")
Case "HHHH":MessageRequester("Find"," Trace N°3")
Case "BBBB":MessageRequester("Find"," Trace N°4")
EndSelect
Case 8
Select Chaine_Decripte
Case "HHHHGGGG":MessageRequester("Find"," Trace N°5")
Case "HHHHDDDD":MessageRequester("Find"," Trace N°6")
Case "BBBBGGGG":MessageRequester("Find"," Trace N°7")
Case "BBBBDDDD":MessageRequester("Find"," Trace N°8")
Case "DDDDHHHH":MessageRequester("Find"," Trace N°9")
Case "GGGGHHHH":MessageRequester("Find"," Trace N°10")
Case "DDDDBBBB":MessageRequester("Find"," Trace N°11")
Case "GGGGBBBB":MessageRequester("Find"," Trace N°12")
EndSelect
Case 12
Select Chaine_Decripte
Case "DDDDBBBBGGGG":MessageRequester("Find"," Trace N°13")
Case "BBBBGGGGHHHH":MessageRequester("Find"," Trace N°14")
Case "GGGGHHHHDDDD":MessageRequester("Find"," Trace N°15")
Case "HHHHDDDDBBBB":MessageRequester("Find"," Trace N°16")
Case "DDDDHHHHGGGG":MessageRequester("Find"," Trace N°17")
Case "BBBBDDDDHHHH":MessageRequester("Find"," Trace N°18")
Case "GGGGBBBBDDDD":MessageRequester("Find"," Trace N°19")
Case "HHHHGGGGBBBB":MessageRequester("Find"," Trace N°20")
Case "DDDDHHHHDDDD":MessageRequester("Find"," Trace N°21")
Case "GGGGBBBBGGGG":MessageRequester("Find"," Trace N°22")
Case "DDDDBBBBDDDD":MessageRequester("Find"," Trace N°23")
Case "GGGGHHHHGGGG":MessageRequester("Find"," Trace N°24")
Case "HHHHDDDDHHHH":MessageRequester("Find"," Trace N°25")
Case "BBBBGGGGBBBB":MessageRequester("Find"," Trace N°26")
Case "HHHHGGGGHHHH":MessageRequester("Find"," Trace N°27")
Case "BBBBDDDDBBBB":MessageRequester("Find"," Trace N°28")
EndSelect
EndSelect
EndProcedure
Procedure Decript()
Protected Doublon.l,Caractere.s,Caractere_precedent.s
Protected Chaine_Decripte.s
Doublon=0
Chaine_Decripte=""
Caractere_precedent=""
If Len(mouvement)>3
For a=1 To Len(mouvement)
Caractere.s=Mid(mouvement, a, 1)
If Caractere_precedent=Caractere
Doublon=Doublon+1
Else
Doublon=0
EndIf
If Doublon<4
Chaine_Decripte=Chaine_Decripte+Caractere
EndIf
Caractere_precedent=Caractere
Next a
Debug Chaine_Decripte
Compare(Chaine_Decripte)
EndIf
EndProcedure
Procedure MouseGesture(x.l,y.l,reset.l)
Protected signeX.l,signeY.l,Diff_x.l,Diff_y.l
Static xp.l,yp.l
If reset
xp=x
yp=y
mouvement=""
ProcedureReturn 1
EndIf
signeX=0 : signeY=0
Diff_x=x-xp : Diff_y=y-yp
If Diff_x<0 :Diff_x= -Diff_x:signeX=1:EndIf
If Diff_y<0 :Diff_y= -Diff_y:signeY=1:EndIf
If Diff_x >10 Or Diff_y >10
; Debug Diff_x
; Debug Diff_y
; Debug signe
If Diff_x >Diff_y
If signeX
mouvement=mouvement+"G"
Else
mouvement=mouvement+"D"
EndIf
Else
If signeY
mouvement=mouvement+"H"
Else
mouvement=mouvement+"B"
EndIf
EndIf
xp=x
yp=y
EndIf
ProcedureReturn 1
EndProcedure
ProcedureDLL HookMouse(nCode, wParam, lParam)
Static Start.l
If nCode < 0
ProcedureReturn CallNextHookEx_(HookMouse, nCode, wParam, lParam)
EndIf
*MOUSESTRUCT.MOUSEHOOKSTRUCT = lParam
*position.POINT=*MOUSESTRUCT\pt
Select wParam
Case #WM_MOUSEMOVE
If Start
MouseGesture(*position\x,*position\y,0)
EndIf
Case #WM_LBUTTONDOWN
Start=1
MouseGesture(*position\x,*position\y,1)
Case #WM_LBUTTONUP
Start=0
Decript()
EndSelect
ProcedureReturn CallNextHookEx_(HookMouse, nCode, wParam, lParam)
EndProcedure
LoadImage(0,"c:\trace.png")
If OpenWindow(0, 100, 200, 600, 600, "Basic Mouse Gesture", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
lpdwProcessId = GetWindowThreadProcessId_(WindowID(0), @processus)
HookMouse=SetWindowsHookEx_(#WH_MOUSE , @HookMouse(), 0, lpdwProcessId)
CreateGadgetList(WindowID(0))
ImageGadget(0,0,0,600,600,ImageID(0))
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
UnhookWindowsHookEx_(HookMouse)
EndIf