Limitation de vitesse (Pour la souris)
Publié : mer. 11/août/2004 14:51
une limitation de vitesse sur la souris ? voilà ce que ça pourrait donner

bon tout d'abord, je vous incite à sauvegarder votre travail en cours, histoire que si vous perdez patience, le reset ne cause pas de perte
(ça commence bien, hein)
ensuite voilà la bêtise sous forme d'exécutable (38ko)
http://perso.wanadoo.fr/lesoldatinconnu ... itesse.exe
et une fois que vous avez tester mon annerie, en voici le code:


bon tout d'abord, je vous incite à sauvegarder votre travail en cours, histoire que si vous perdez patience, le reset ne cause pas de perte

ensuite voilà la bêtise sous forme d'exécutable (38ko)
http://perso.wanadoo.fr/lesoldatinconnu ... itesse.exe
et une fois que vous avez tester mon annerie, en voici le code:
Code : Tout sélectionner
Enumeration
#Panneau
#Depart
#Arrivee
#Vitesse
#Message
EndEnumeration
#LimiteVitesse = 50
; Début du programme
If OpenWindow(0, 0, 0, 200, 200, #PB_Window_BorderLess | #PB_Window_Invisible, "Excès de vitesse") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
ShowWindow_(WindowID(), #SW_MAXIMIZE) ; Met la fenêtre en plein écran
SetWindowPos_(WindowID(), -1, 0, 0, 0, 0, #SWP_NOSIZE | #SWP_NOMOVE) ; Pour mettre la fenêtre toujours au premier plan
FontID1 = LoadFont(0, "Tahoma", 36, #PB_Font_HighQuality | #PB_Font_Bold)
FontID2 = LoadFont(1, "Tahoma", 9, #PB_Font_HighQuality)
FontID3 = LoadFont(2, "Tahoma", 12, #PB_Font_HighQuality | #PB_Font_Bold)
; On dessine le panneau de limitation à 50
CreateImage(#Panneau, 100, 100)
StartDrawing(ImageOutput())
Box(0, 0, 100, 100, GetSysColor_(#COLOR_3DFACE)) ; couleur de fond de windows
Circle(50, 50, 50, RGB(200, 0, 0))
Circle(50, 50, 42, RGB(255, 255, 255))
DrawingMode(1)
DrawingFont(FontID1)
FrontColor(0, 0, 0)
Txt.s = Str(#LimiteVitesse)
Locate(50 - TextLength(Txt) / 2, 50 - 30)
DrawText(Txt)
StopDrawing()
; On dessine e point de départ
CreateImage(#Depart, 100, 50)
StartDrawing(ImageOutput())
Box(0, 0, 100, 50, GetSysColor_(#COLOR_3DFACE)) ; couleur de fond de windows
; Damier
#TailleDamier = 5
For n = 0 To 100 / #TailleDamier - 1
For nn = 0 To 3
Paire.f = (n + nn) / 2
If Paire = Int(Paire) ; Carré noire si paire
Box(n * #TailleDamier, nn * #TailleDamier, #TailleDamier, #TailleDamier, 0)
Else ; Sinon, carré blanc
Box(n * #TailleDamier, nn * #TailleDamier, #TailleDamier, #TailleDamier, $FFFFFF)
EndIf
Next
Next
; Hampes du drapeau
Line(0, 0, 0, 50, $6E6E6E)
Line(99, 0, 0, 50, $6E6E6E)
; Texte
DrawingFont(FontID2)
FrontColor(0, 130, 255)
Locate(50 - TextLength(" Départ ") / 2, 3)
DrawText(" Départ ")
StopDrawing()
; On dessine le point d'arrivée
CreateImage(#Arrivee, 100, 50)
StartDrawing(ImageOutput())
DrawImage(UseImage(#Depart), 0, 0)
; Texte
DrawingFont(FontID2)
FrontColor(0, 130, 255)
Locate(50 - TextLength(" Arrivée ") / 2, 3)
DrawText(" Arrivée ")
StopDrawing()
UseButtonImageGadgetEx(WindowID()) ; On active la librairie ButtonImageGadgetEx
ButtonImageGadgetEx(0, WindowWidth() - 110, 10, "", UseImage(#Arrivee), UseImage(#Arrivee), UseImage(#Arrivee)) ; Bouton pour quitter
TextGadget(#Message, WindowWidth() / 2 - 200, WindowHeight() / 2 - 150, 400, 100, "", #PB_Text_Center)
SetGadgetFont(#Message, FontID3)
Message.s = "Vous avez dépassé la Vitesse maximum autorisée de 50 pixels par seconde." + Chr(10) + "Retour au point de départ ! Chauffard !"
ImageGadget(#PB_Any, 10, WindowHeight() - 60, 100, 50, UseImage(#Depart)) ; Image de départ
ImageGadget(#PB_Any, WindowWidth() / 2 - 50, WindowHeight() / 2 - 50, 100, 50, UseImage(#Panneau)) ; Panneau de limitation de vitesse
TextGadget(#Vitesse, 3, 3, 300, 15, "Vitesse de la souris : " + " Pixels/s") ; Pour afficher la vitesse de la souris
SetCursorPos_(60, WindowHeight() - 35) ; On place la souris au point de départ
MouseX = 60
MouseY = WindowHeight() - 35
#Duree = 150
Timer = SetTimer_(WindowID(), 0, #Duree, 0) ; On crée un timer
; Taille de la zone de l'écran utilisable (sans la barre des taches)
SystemParametersInfo_(#SPI_GETWORKAREA, 0, @Taille_Ecran.RECT, 0)
Quitter = 0
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventGadget
Select EventGadgetID() ; boutons, zone de texte, ...
Case 0
Quitter = 10
EndSelect
ElseIf Event = #WM_TIMER
; On récupère la position de la souris
GetCursorPos_(CursorPos.POINT)
; On calcul la distance parcouru
Distance.f = Sqr(Pow(MouseX - CursorPos\x, 2) + Pow(MouseY - CursorPos\y, 2))
; Vitese de la souris en pixel par seconde
Vitesse.f = Distance * 1000 / #Duree
SetGadgetText(#Vitesse, "Vitesse de la souris : " + StrF(Vitesse, 1) + " Pixels/s") ; Pour afficher la vitesse de la souris
If CptMessage > 0 ; Si on affiche le message
CptMessage - 1 ; On décompte
If CptMessage = 0 ; Si l'affichage du message est terminé
SetGadgetText(#Message, "") ; On efface le message
EndIf
SetCursorPos_(60, WindowHeight() - 35) ; on place la souris au point de départ pendant toute la durée du message
CursorPos\x = 60
CursorPos\y = WindowHeight() - 35
Else
If Vitesse > #LimiteVitesse ; Si on dépasse la vitesse autorisée
SetGadgetText(#Message, Message) ; On affiche le message
CptMessage = 5 * 1000 / #Duree ; Pour une durée d'affichage du message = 5 secondes
EndIf
EndIf
; on stocke la position de la souris
MouseX = CursorPos\x
MouseY = CursorPos\y
; Protection anti Ctrl Alt Suppr
If CursorPos\x > Taille_Ecran\Left And CursorPos\x < Taille_Ecran\Right And CursorPos\y > Taille_Ecran\Top And CursorPos\y < Taille_Ecran\Bottom ; Si on n'est pas au dessus de la barre des tâches
Win = WindowFromPoint_(CursorPos\x, CursorPos\y) ; On récupère le handle de la fenêtre sous la souris
Win2 = GetParent_(Win) ; On recherche la fenêtre mère
While Win2 <> 0
Win = Win2
Win2 = GetParent_(Win)
Wend
If Win <> WindowID() ; Si la fenêtre est différente de la fenêtre du programme, on la ferme
PostMessage_(Win, #WM_CLOSE, 0, 0)
EndIf
EndIf
ElseIf Event = #WM_RBUTTONUP ; Pour quitter si on appui 10 fois sur le clic droit
Quitter + 1
EndIf
Until Quitter = 10
KillTimer_(WindowID(), Timer) ; On tue le timer