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

C Discussion :

clic long sur borland C++


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 44
    Points : 28
    Points
    28
    Par défaut clic long sur borland C++
    Je souhaiterais réaliser une action différente selon qu'on appuie longtemps sur un bouton ou non. J'ai trouvé que pour l'évènement OnMouseMove on peut savoir si le bouton est enfoncé ou non avec Shift.Contains(ssLeft). Le problème, c'est que le programme réagit aussi quand je bouge la souris et pas que au moment où je clique sur le bouton.

    Est ce qu'il y a un autre moyen de coder un bouton pour avoir une action différente selon qu'on clique longtemps sur un bouton ou non ?

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 366
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 366
    Points : 20 402
    Points
    20 402
    Par défaut
    Citation Envoyé par isa3000 Voir le message
    Le problème, c'est que le programme réagit aussi quand je bouge la souris et pas que au moment où je clique sur le bouton.
    les traitements sont appelés au mauvais moment alors...
    il nous faudrait du code

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    La fonction s'appelle OnMouseMove, son nom me laisse penser qu'elle gère les mouvements de la souris et non les clics. Les fonctions intéressantes dans ce cas ne seraient pas plutôt OnMouseUp/Down ? Voir la diapo 95 de ce lien : http://eric.univ-lyon2.fr/~ricco/cou...pp_builder.pdf

    EDIT : encore mieux : rechercher "The Mouse Down Message" dans cette page : http://www.yevol.com/bcb/Lesson16.htm

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 44
    Points : 28
    Points
    28
    Par défaut re
    D'abord 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
     
    void __fastcall TForm1::ButtonM1Move(TObject *Sender, TShiftState Shift,
          int X, int Y)
    {
        Sleep(5);
        if (Shift.Contains(ssLeft)) { // vérifie que le bouton est enfoncé
            Edit1->Text = "OK";
        }
        else {
            Edit1->Text = "non OK";
        }
    }
    Avec OnMouseDown il affiche directement OK. J'ai aussi remarqué que Sleep ne marchais pas. Il aurait dû y avoir une attente de 5s.

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    Non car Sleep prend un paramètre en millisecondes.

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Est ce qu'il y a un autre moyen de coder un bouton pour avoir une action différente selon qu'on clique longtemps sur un bouton ou non ?
    Comme indiqué par Bktero,

    On prend une référence de temps à la pression de la souris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void __fastcall TForm1::Button1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
    {
       MousePressedOn = GetTickCount();
     
       // éventuellement on déclenche un timer ou un thread pour faire des actions durant le clic
    }
    On calcul la différence entre le bouton appuyé et relaché.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void __fastcall TForm1::Button1MouseUp(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
        Application->MessageBox(AnsiString(GetTickCount() - MousePressedOn).c_str(),"Press duration in ms",MB_OK);
     
       // on arrête le timer ou le thread déclenché pendant le MouseDown
    }

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 44
    Points : 28
    Points
    28
    Par défaut re
    Merci BlueMonkey. La méthode fonctionne comme je le voulais. Je n'ai plus qu'à l'adapter.

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

Discussions similaires

  1. double-clic, clic-long sur la carte
    Par saxrub dans le forum IGN API Géoportail
    Réponses: 5
    Dernier message: 25/11/2014, 13h43
  2. Réponses: 13
    Dernier message: 01/12/2012, 22h20
  3. Clic long sur un contrôle
    Par molini_a dans le forum Langage
    Réponses: 3
    Dernier message: 15/10/2009, 17h22
  4. Créer une action sur clic long
    Par louis_lab dans le forum C++/CLI
    Réponses: 4
    Dernier message: 01/03/2007, 14h17
  5. Réponses: 4
    Dernier message: 09/05/2003, 16h20

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