Position du curseur

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Aranoth
Messages : 293
Inscription : sam. 24/janv./2004 12:00
Localisation : Toulouse (31)
Contact :

Position du curseur

Message par Aranoth »

Petit tips pour avoir la position du curseur à l'écran, sans passer par ExamineMouse(), et donc sans devoir relacher la souris a chaque restauration etc...

Je débute avec les buffers, donc si on peut optimiser, n'hésitez pas à poster :P

Code : Tout sélectionner

    Structure mse
      x.l
      y.l
    EndStructure
    
    *Pos.mse=AllocateMemory(2000)
    
    GetCursorPos_(*Pos)
    
    Debug *Pos\x
    Debug *Pos\y
voila :wink:
Débutant en programmation, notament en C++ ?
Vous souhaitez apprendre ?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

J'ai sans doute pas compris l'astuce, mais pour obtenir le même résultat que ton code, pas besoin de créer une structure, puisqu'elle existe déjà.

C'est la structure POINT.

Et pas besoin de passer par un buffer non plus.
(Mais si tu fais un buffer, c'est sans doute que tu as une bonne raison :lol:)

Ca donne ça:

Code : Tout sélectionner

GetCursorPos_(Pos.POINT) 
    
Debug Pos\x 
Debug Pos\y
Ce code donne exactement le même résultat :)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

oui et un petit exemple pour jouer avec :

Code : Tout sélectionner

n=500

Dim Pos.Point(n)

MessageRequester("CursorPos","Bougez la souris pdt quelques secondes")

For i=0 To n    
  GetCursorPos_(Pos(i)) 
  Delay(1)
Next

MessageRequester("CursorPos","Replay")

For i=0 To n    
  SetCursorPos_(Pos(i)\x,Pos(i)\y) 
  Delay(1)
Next
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

exellent !! :D

manque plus qu'a la faire cliquer !!!

[senario]

a un certain temps (ou a un temps certain)

la souris va toute seul sur le bouton demarer
elle clique au bon endroit pour arreter la machine !!

[/senario]

bonjour la blague !!! :lol:
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

reagarde dans la partie débutant ici ou sur le musée et ton scénario se réalisera :wink: (enfin juste le clique)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tu veux dire le marier avec le code de Chris que voila ??

(section application ) !!

Code : Tout sélectionner

 ;/Constantes Window
Enumeration
    #Window_0
EndEnumeration

;/Constantes Gadget
Enumeration
    #Btn_Quit
EndEnumeration


If OpenWindow(#Window_0, 300, 300, 300, 200, #PB_Window_SystemMenu, "Fenêtre 1",0)
    If CreateGadgetList(WindowID(#Window_0))
        ButtonGadget(#Btn_Quit, 100, 170, 100, 25, "Quitter")
    EndIf
    
    SetTimer_(WindowID(),1,3000,0)
    Repeat
        Select WaitWindowEvent()
            Case #WM_TIMER
                SendMessage_(GadgetID(#Btn_Quit),#WM_LBUTTONDOWN,0,0)
                Delay(300)
                SendMessage_(GadgetID(#Btn_Quit),#WM_LBUTTONUP,0,0)
                
            Case #PB_EventGadget
                Select EventGadgetID()
                    ;Case
                    ;Case
                    Case #Btn_Quit : quit = 1
                EndSelect
                ;Case
                ;Case
            Case #PB_EventCloseWindow : quit = 1
        EndSelect
    Until quit = 1
    End
EndIf
:D
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

nan, alors c'est peut-être sur le forum anglais que j'ai vu ça, dès que ma soeur me laisse le PC, je vais essayer de faire éteindre le PC comme ça
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

aaarg !! on va rire enfin !! :lol:

mem qu'apres on demandera a la souris d'ouvrir un programme
agrandir une fenetre , ect... en faire une lib serai cool
mais plus tard hein ?? :) :) :lol:

si quelqu'un trouve comment faire enfoncer les touches du clavier !!???
ou bien de faire avancer la souris (le boitier avec une boule (des fois) sur la table) la !! trop fort !!

ooouuuuaaaa la quatrieme dimension !!! :lol: :lol:
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Les touches du clavier ça a déjà été fait, pour les enfoncer il suffit d'appuyer dessus :wink: regarde dans code archiv on ne sait jamais. Sinon, je verrai demain. Faire bouger la souris sans y toucher c'est simple, met la en pente :lol: :lol:
Aranoth
Messages : 293
Inscription : sam. 24/janv./2004 12:00
Localisation : Toulouse (31)
Contact :

Message par Aranoth »

Faire bouger la souris sans y toucher c'est simple
pas besoin de pente :lol:

Code : Tout sélectionner

SetCursorPos_(x,y)
Et merci a vous pour m'avoir eclaircis sur le code, y'avait pleins de trucs inutiles :oops: :wink:
Débutant en programmation, notament en C++ ?
Vous souhaitez apprendre ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

pas besoin de pente Laughing
heu on parle de la souris la boite en plastoc posé sur la table !
pas du pointeur de souris !!! :)
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Certains esprits réfléchissent trop :P , bon je vais voir ça maintenant
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Code : Tout sélectionner

Structure Position
  Depart.Point
  Arrive.Point
EndStructure

Pos.Position

;Mögliche Konstanten für das Ereignis 
#MOUSEEVENTF_MOVE = $1 
#MOUSEEVENTF_ABSOLUTE = $8000 
#MOUSEEVENTF_LEFTDOWN = $2 
#MOUSEEVENTF_LEFTUP = $4 
#MOUSEEVENTF_MIDDLEDOWN = $20 
#MOUSEEVENTF_MIDDLEUP = $40 
#MOUSEEVENTF_RIGHTDOWN = $8 
#MOUSEEVENTF_RIGHTUP = $10 


Procedure MouseEvent(Ereignis.l) 
  Mem.l=GlobalAlloc_(0,8) 
  GetCursorPos_(Mem) 
  mouse_event_(Ereignis|#MOUSEEVENTF_ABSOLUTE,PeekL(Mem)*($FFFF/GetSystemMetrics_(0)),PeekL(Mem+4)*($FFFF/GetSystemMetrics_(1)),0,GetMessageExtraInfo_()) 
  GlobalFree_(Mem) 
EndProcedure 

SetCursorPos_(10,760) ; Place le curseur sur démarrer
;Simuliert einen Klick mit der Rechten Maustaste an der aktuellen Cursorposition 
MouseEvent(#MOUSEEVENTF_LEFTDOWN) 
MouseEvent(#MOUSEEVENTF_LEFTUP)

; Petite animation en translation
Pos\Depart\X = 10 : Pos\Depart\Y = 760
Pos\Arrive\X = 310 : Pos\Arrive\Y = 710
For i = Pos\Depart\X To Pos\Arrive\X Step 5
  If Pos\Depart\Y > Pos\Arrive\Y
    Pos\Depart\Y - 1
  EndIf
  SetCursorPos_(i,Pos\Depart\Y)
  Delay(20)
Next i


MouseEvent(#MOUSEEVENTF_LEFTDOWN) 
MouseEvent(#MOUSEEVENTF_LEFTUP)
Pos\Depart\X = 310 : Pos\Depart\Y = 710
Pos\Arrive\X = 650 : Pos\Arrive\Y = 372
For i = Pos\Depart\X To Pos\Arrive\X Step 5
  If Pos\Depart\Y > Pos\Arrive\Y
    Pos\Depart\Y - 5
    If Pos\Depart\Y < Pos\Arrive\Y : Pos\Depart\Y = Pos\Arrive\Y : EndIf
  EndIf
  SetCursorPos_(i,Pos\Depart\Y)
  Delay(20)
Next i
MouseEvent(#MOUSEEVENTF_LEFTDOWN) 
MouseEvent(#MOUSEEVENTF_LEFTUP)
Voilà le code tant attendu :D , il est préparé sur un écran 1024*768 avec un menu style XP, il n'éteind pas le PC mais clique sur le petit bouton "annuler" (je voulais pas tout le temps redémmarer :P ) . Le click du curseur a été pris sur un code dans codearchiv.
Pour positionner le curseur, j'ai utilisé ce petit code pour connaître les coordonnées de la souris:

Code : Tout sélectionner

lpPoint.point
Repeat
  GetCursorPos_(lpPoint)
  Debug "X = " + Str(lpPoint\X)
  Debug "Y = " + Str(lpPoint\Y)
  Debug ""
  Delay(50)
ForEver
Je vais faire un code un peu mieux cette après midi ou dans la semaine qui permettra de cliquer là où l'on veut que la souris ce déplace et clique
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

super !!

faudrai en faire une fonction style

mouse_move(coordx_depart,coory_depart,coordx_arrivé,coordy_arrivé,click)

click=on/off on=1 off=0

par exemple !
***********************************************************
*************************************************************
*************************************************************


ou alors

mouse_move(coordx,coordy)
qui pourrai etre mis dans une boucle d'animation


; pour deplacer le curseur ou l'on veut
for coordx=0 to arrive
for coordy=0 to arrivé
mouse_move(coordx,coordy)
next coordy
next coordx

mouse_click ; pour la faire cliquer !!!

et une bibrairie de plus !!!! :lol:
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Code : Tout sélectionner

; pour deplacer le curseur ou l'on veut 
for coordx=0 to arrive 
for coordy=0 to arrivé 
mouse_move(coordx,coordy) 
next coordy 
next coordx 
bah nan sinon c'est ce que j'aurais fait mais là tu va te déplacer en Y, puis en X, pas les 2 en même temps. :wink:
Par contre mouse_move(coordx_depart,coory_depart,coordx_arrivé,coordy_arrivé,click) , je comptais le faire.

EDIT : Voir mon nouveau poste et désolé Aranoth pour avoir dérivé sur ton sujet.
Répondre