Limitation de vitesse (Pour la souris)

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Limitation de vitesse (Pour la souris)

Message par Le Soldat Inconnu »

une limitation de vitesse sur la souris ? voilà ce que ça pourrait donner :lol:

Image

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 :mrgreen: (ç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:

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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

et ça t'amuse :twisted:
C'est vraiment marrant, surtout de réussir a quitter juste avec le clavier sous XP, c'était un avantage de 98 quand même, plus simplemais c'est très drole :D :lol: :lol: :lol:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

:D au fait, il suffit de faire 10 clic droit pour quitter :lol:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

ça peut aider :mad:
Répondre