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++Builder Discussion :

Affectation d'un evenement OnMouseWheelDown


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de marcootz
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 159
    Par défaut Affectation d'un evenement OnMouseWheelDown
    Bonjour,

    Je créer un TScrollBox comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TScrollBox *scrollPanel = new TScrollBox(this);
    Après avoir créé cet objet, je veux qu'il execute maFonction() lors de l'évenement OnMouseWheelDown. Je dois donc affecter maFonction() à cet évènement par mon code.

    J'ai utilisé ces deux facons mais erreur à chaque fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    scrollPanel->OnMouseWheelDown = maFonction;
     
    void __fastcall TFMiniCourbes::maFonction()
    {
    return;
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    scrollPanel->OnMouseWheelDown = maFonction;
     
    void __fastcall TFMiniCourbes::maFonction(TObject *Sender,
          TShiftState Shift, TPoint &MousePos, bool &Handled)
    {
    return;
    }
    Si quelqu'un sait faire ca ou sait ou trouver la réponse je suis preneur. Merci d'avance.

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Citation Envoyé par marcootz Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    scrollPanel->OnMouseWheelDown = maFonction;
     
    void __fastcall TFMiniCourbes::maFonction(TObject *Sender,
          TShiftState Shift, TPoint &MousePos, bool &Handled)
    {
    return;
    }
    Si quelqu'un sait faire ca ou sait ou trouver la réponse je suis preneur. Merci d'avance.
    Bonsoir,

    As tu tenté, a tout hasard, d'écrire méticuleusement le prototype de la fonction devant correspondre a l'évènement OnMouseWheelDown tel qu'il est décris dans l'aide ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (System::TObject *Sender, Classes::TShiftState Shift, const Types::TPoint &MousePos, bool &Handled)
    Je dis ça juste parceque pour d'autres évènements, cela m'a sorti de l'embrouille.

    @ +

  3. #3
    Membre confirmé Avatar de marcootz
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 159
    Par défaut
    Salut Sunchaser,

    Effectivement en utilisant tes paramètres cela passe à la compli. Merci pour ta réponse.
    Par contre l'évènement n'est jamais déclenché quand le programme est en 'run'

  4. #4
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Re,

    L'aide (celle de C++Builder6 et pas le 'truc' mystérieux du BDS) nous dis que:
    OnMouseWheelDown n'a lieu que si le message n'a pas déjà été géré par un gestionnaire d'événement OnMouseWheel.
    J'ai pourtant testé, et, truc bizarre, lorsque j'ai bien le focus sur un élément dans le TScrollBox -> ce sont les deux évènements qui se produisent ...

    lé coquin ce builder

  5. #5
    Membre confirmé Avatar de marcootz
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 159
    Par défaut
    Merci . Alors j'ai testé en mettant du code dans l'évènement OnMouseWheel mais bizarement aucun des trois évènement n'est déclenché...

    Les noms des composants sont pourtants corrects, donc je dois bien récupérer les handles. Mes propriétés "tracking" des scrollbars sont bien sur 'true'. J'avoue que je suis un peu perdu là.

    Voici le code de mes evenements scroll :

    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
     
    void __fastcall TFMiniCourbes::scrollPanelMouseWheel(TObject *Sender, TShiftState Shift,
                    const TPoint &MousePos, bool &Handled)
    {
          MessageDlg("machin", mtInformation, TMsgDlgButtons() << mbOK, 0);
    }
    //---------------------------------------------------------------------------
    void __fastcall TFMiniCourbes::scrollPanelMouseWheelDown(TObject *Sender, TShiftState Shift,
                    const TPoint &MousePos, bool &Handled)
    {
        SendMessage(this->scrollPanel->Handle,WM_VSCROLL,SB_LINEDOWN,0);
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TFMiniCourbes::scrollPanelMouseWheelUp(TObject *Sender, TShiftState Shift,
                    const TPoint &MousePos, bool &Handled)
    {
        SendMessage(this->scrollPanel->Handle,WM_VSCROLL,SB_LINEUP,0);
    }

  6. #6
    Membre confirmé Avatar de marcootz
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 159
    Par défaut
    La solution est donc de rentrer correctement les prototypes des fonctions appelé par les évenement onMouseWheel up et down comme la dit SunChaser precedement.

    Il faut aussi mettre les propriété 'tracking' des scrollbar a true

    Enfin il faut absolument que la zone de scroll soit en focus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scrollPanel->SetFocus();

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

Discussions similaires

  1. affecter un evenement à un radiobutton dynamique
    Par moustaf_26 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 05/10/2011, 22h10
  2. affecter une macro à evenement vba
    Par mapmip dans le forum VBA Access
    Réponses: 3
    Dernier message: 29/07/2009, 12h26
  3. affectation evenement à menu dynamique
    Par bobby51 dans le forum VB.NET
    Réponses: 1
    Dernier message: 20/05/2008, 09h08
  4. Affecter des evenements sur une nouvelle balise
    Par Arnard dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/11/2006, 16h18
  5. Réponses: 9
    Dernier message: 18/07/2005, 17h15

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