IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Position de la souris


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Position de la souris
    Bonsoir, je souhaiterai postionner ma souris en cliquant sur un boutton et si le X ou le Y change, afficher un message.
    Je pensais qu'une simple condition marcherai mais ce n'est pas le cas :s. Meme si la souris ne bouge pas, le message apparait. Surement pendant que le curseur se positionne a la position voulue:
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    procedure TForm1.Timer1Timer(Sender: TObject);
    Var Point:TPoint;
    begin
    GetCursorPos(Point);
    Label3.Caption:=IntToStr(Point.X);
    Label4.Caption:=IntToStr(Point.Y);
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    SetCursorPos(500, 400); //Position de la souris en X et en Y (X,Y)
    if Label3.Caption<>'500' then
    showmessage ('labscisse a bougé')
    else
    showmessage ('rien du tout');
     
    end;
     
    end.
    Si quelqu'un sait ce serait sympa

    MErci beaucoup d'avance

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    dans ton code la valeur des labels est mise à jour qu'a chaque boucle de ton timer donc immédiatement après que ton curseur est été repositionné, t'a une boite de méssage qui ne convient pas ( trop rapide ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    var
     souriebougee : boolean = false;
    implementation
    ...
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    Var Point:TPoint;
    begin
    GetCursorPos(Point);
    Label3.Caption:=IntToStr(Point.X);
    Label4.Caption:=IntToStr(Point.Y);
     
    if not souriebougee then exit;
    souriebougee := false;
     
    if Label3.Caption<>'500' then
    showmessage ('labscisse a bougé')
    else
    showmessage ('rien du tout');
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    SetCursorPos(500, 400); //Position de la souris en X et en Y (X,Y)
    souriebougee := true;
    end;
    essai comme ça

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    non ca ne vas pas, mon programme se bloque, comment je pourrais retarder le timer?

    Merci a vous

  4. #4
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Essaye de t'inspirer du code de cette démo plutôt :

    http://sub0.developpez.com/delphi/mouse.zip

    Sinon, il faut mettre Timer1.Enabled à False lorsqu'on utilise ShowMessage dans un Timer car le Timer n'attend pas que le dialogue soit fermé pour s'éxécuter à nouveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Procedure TForm1.Timer1Timer(Sender: TObject);
    Begin
      ...
      Timer1.Enabled := False;
      ShowMessage('Salut!');
      Timer1.Enabled := True;
      ...
    End;
    De retour parmis vous après 10 ans!!

  5. #5
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    +1, j'avais oublié ce détail

  6. #6
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut Re: position de la souris
    Citation Envoyé par abcd
    Bonsoir, je souhaiterai postionner ma souris en cliquant sur un boutton et si le X ou le Y change, afficher un message.
    Je ne comprend pas ce que tu cherches à réaliser... Quelle est l'utilité ?
    Comment veux-tu que la position de la souris change si c'est toi qui la positionne !
    Et inversement, si tu la repositionnes, comment veux-tu qu'elle ne change pas ?
    Le fait de cliquer sur un bouton va forcément demander de déplacer la souris, non ?
    Bref, je trouve ça complètement incohérent !

    Peut-être que ce code va t'aider à résoudre ton problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Var
      save: Tpoint;
     
    Procedure TForm1.Button1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    Begin
      If (X <> save.X) Or (Y <> save.Y) Then
        ShowMessage('Position différente');
      Save := Button1.ScreenToClient(Mouse.CursorPos);
    End;
    De retour parmis vous après 10 ans!!

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    je cherche a realiser un petit log de securité, pour eviter que quelqun fouille sur mon ordi en mon abscence.
    Je vous l'accorde c'est pas super mais sa me sera assez utile

    Merci a vous je vais essayer vos solutions

  8. #8
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Ok, c'est un peu plus clair...
    Attention, il arrive que la position de la souris change sans que personne ne l'ait touché (perturbation de température, lumière du soleil, vibrations, etc). Ce que je te conseillerais, c'est de mémoriser dans un fichier texte caché, toutes les opérations effectuées durant ton absence (clavier et souris). Pour chaque message souris, tu mémorises la date, l'heure, le déplacement de la souris et l'état des boutons (voir démo mouse.zip). Pour chaque message clavier, tu mémorises la date, l'heure et les touches appuyées. Ainsi par exemple, si tu vois dans ton fichier que la souris s'ait déplacé de quelques pixels sans clic de bouton, tu sauras que ce n'est pas une intervention humaine... Cela dit, perso, au lieu de faire un programme de surveillance, j'utiliserais plutôt le dialogue de vérrouillage de Windows :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rundll32.exe user32.dll,LockWorkStation
    à+
    De retour parmis vous après 10 ans!!

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    oui c'est une bonne idée mais je ne pense pas savoir faire ceci. Je verrais ca ce soir, merci beaucoup de votre aide

  10. #10
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Unit Unit1;
    Interface
    Uses Windows, SysUtils, Classes, Graphics, Controls,
         Forms, ExtCtrls, StdCtrls;
     
    Type
      TForm1 = Class(TForm)
        ListBox1: TListBox;
        Timer1: TTimer;
        Procedure FormCreate(Sender: TObject);
        Procedure Timer1Timer(Sender: TObject);
      End;
     
    Var
      Form1: TForm1;
     
     
    {----------------------------------------------------------------}
    {                       }Implementation{                         }
    {----------------------------------------------------------------}
    {$R *.DFM}
     
    Const
      FileName = 'Fichier.txt';
    Var
      save: TPoint;
      Etat: Array[1..255] Of Boolean;
      Count: Integer;
     
    {----------------------------------------------------------------}
    Procedure TForm1.FormCreate(Sender: TObject);
    Begin
      If (FileExists(FileName)) Then
        ListBox1.Items.LoadFromFile(FileName);
      Save := Mouse.CursorPos;
      Timer1.Interval := 250;
    End;
     
     
    {----------------------------------------------------------------}
    Procedure TForm1.Timer1Timer(Sender: TObject);
    Var
      x: Byte;
    Begin
      For x := Low(Etat) To High(Etat) Do
        If ((GetAsyncKeyState(x) And 32768) <> 0) Then
        Begin
          Etat[x] := True;
          ListBox1.Items.Add(DateTimeToStr(Now) + ' - Touche appuyée N°' + IntToStr(x));
        End
        Else If ((GetAsyncKeyState(x) And 32768) = 0) Then Etat[x] := False;
     
      If (Save.X <> Mouse.CursorPos.X) Or (Save.Y <> Mouse.CursorPos.Y) Then
        ListBox1.Items.Add(DateTimeToStr(Now) + ' - Souris déplacée X=' +
          IntToStr(Mouse.CursorPos.X) +  ' Y=' + IntToStr(Mouse.CursorPos.Y));
      Save := Mouse.CursorPos;
     
      Count := Count + 1;
      If (Count > 8) Then
      Begin
        ListBox1.Items.SaveToFile(FileName);
        Count := 0;
      End;
    End;
     
     
    {----------------------------------------------------------------}
    End.
    Le fichier est enregistré toutes les 2 secondes environ.
    Le bouton gauche de la souris = Touche N°1
    Le bouton droit de la souris = Touche N°2
    Le bouton central = Touche N°4
    à+
    De retour parmis vous après 10 ans!!

  11. #11
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    tu es un chef, un grand merci, je testerai ca ce soir

    Merci a vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment indiquer position de la souris en RELATIF ?
    Par mathieu7497 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/03/2006, 22h52
  2. nom d'un controle et position de la souris
    Par manu80000 dans le forum Langage
    Réponses: 1
    Dernier message: 12/01/2006, 16h12
  3. [C#]Drag & Drop, problème de position de la souris
    Par debug dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/10/2005, 13h06
  4. Déterminer la position de la souris
    Par genteur slayer dans le forum Composants VCL
    Réponses: 6
    Dernier message: 16/06/2003, 11h01
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo