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

Composants VCL Delphi Discussion :

Utilisation de l'événement OnMouseWheel


Sujet :

Composants VCL Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 410
    Points : 307
    Points
    307
    Par défaut Utilisation de l'événement OnMouseWheel
    Bonjour,

    Application VCL Delphi 11.3 Commuinity Windows 10.

    Je veux utiliser la roulette de la souris pour faire changer de page dans un logiciel de visualisation de photos.
    J'ai le problème avec le nombre d'événements que génère la roulette de la souris.
    Un cran de la roulette génère 8 événements consécutif en général ?
    Ce qui fait des changements de pages multiples indésirables.
    Quelle serait la meilleure solution pour les filtrer ?
    J'ai essayé avec un compteur, avec un intervalle de temps rien ne donne de résultats vraiment satisfaisants.

  2. #2
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 503
    Points : 2 773
    Points
    2 773
    Billets dans le blog
    10
    Par défaut
    Tu peux t'inspirer de cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      if (WheelDelta < 0) and (Profondeur < (kNombrePositions - 1)) then
        Profondeur := Profondeur + 1;
      if (WheelDelta > 0) and (Profondeur > 0) then
        Profondeur := Profondeur - 1;
    que j'utilize dans une fonction zoom
    plus d'info si besois

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 410
    Points : 307
    Points
    307
    Par défaut
    Merci Alweber, mais mon soucis n'est pas là.
    Je détecte bien le sens pour monter ou descendre dans les pages, le problème c'est qu'un seul cran passé sur le roulette me génère une rafale de 7 ou 8 OnMouseWheel donc 7 ou 8 changements de page.
    Il faut que soit je déclenche le changement de page sur le premier et qu'ensuite je puisse ignorer les autres ou que j'arrive à attendre la fin de la rafale pour déclencher le changement de page.

  4. #4
    Membre actif
    Homme Profil pro
    libre
    Inscrit en
    Mai 2024
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Mai 2024
    Messages : 115
    Points : 210
    Points
    210
    Par défaut
    Il faut accumuler les appels et dès qu'une grandeur souhaitée est atteint on déclenche le traitement, à la base MouseWheel est pour les déplacements par lignes et pas par pages

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     if (WheelDelta > 0)  then
        Profondeur := Profondeur + 1 
      else
        Profondeur := Profondeur - 1;
     
       if (Profondeur mod 8) = 0 then
       begin
        /// traitement ici
     
       end;

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 410
    Points : 307
    Points
    307
    Par défaut
    Effectivement il serait possible de filtrer sur la "profondeur" comme le propose Alweber ou Volid, le pb c'est que cette profondeur est variable et elle dépend certainement de la machine sur laquelle tourne l'application (je n'ai pas testé faute de temps).
    J'ai trouvé une solution qui semble très bien fonctionner :

    A chaque événement OnMouseWheel je met l'Enabled d'un timer spécifique réglé sur 50 ms à True.
    Comme les événements d'une rafale sont avec des écarts de 1 à 10 ms, à chaque fois je relance le timer et il ne déclenche l'action que sur le dernier événement de la rafale, exactement ce qu'il me faut !
    Globalement cela entraine un retard de commande compris entre 65 et 100 ms ce qui est complètement invisible dans mon application.

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 5
    Dernier message: 11/06/2002, 15h21
  3. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  4. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  5. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01

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