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 :

Mousewheel sur Scrollbox


Sujet :

C++Builder

  1. #21
    Membre confirmé

    Homme Profil pro
    En recherche d'emploi sur la région de Toulouse
    Inscrit en
    Novembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En recherche d'emploi sur la région de Toulouse
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 62
    Billets dans le blog
    1
    Par défaut
    Me voila de retour après tout ce temps.
    Mon programme est aujourd'hui quasi terminé a l’exception de se fichu scrollbox que je n'arrive toujours pas a gérer.
    Je l'avait donc mis de côté mais maintenant que tout le reste est finit j'aimerais bien le faire fonctionner.
    Alors si quelqu'un sait le faire fonctionner serait il possible de me donner un exemple afin que je l'étudie et l’adapte a mon prog. SVP
    Je rechercher juste un une form contenant un scrollbox avec une image ou autre qui soit plus grand verticalement afin d'utiliser la molette de la souris pour faire défiler l'image( ou l'autre chose que l'on a mis dans le scrollbox).
    Si quelqu'un sait gérer ça j’attends avec grande impatience se petit projet.
    Un grand MERCI d'avance a cette âme charitable.
    J-M.

  2. #22
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Je ne suis pas sûr d'avoir compris, mais en utilisant les événement OnMouseWheelDown et OnMouseWheelUp ca ne marche pas? Il faut que le composant ScrollBox ai le Focus (ScrollBox1->SetFocus() ; ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void __fastcall TForm1::ScrollBox1MouseWheelDown(TObject *Sender,
          TShiftState Shift, TPoint &MousePos, bool &Handled)
    {
      ScrollBox1->VertScrollBar->Position += 25;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall TFRequest::ScrollBox1MouseWheelUp(TObject *Sender,
          TShiftState Shift, TPoint &MousePos, bool &Handled)
    {
       ScrollBox1->VertScrollBar->Position -= 25;        
    }

  3. #23
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 052
    Par défaut
    Dans un ScrollBox, je générais une série d'Edit généré à la volée, idem pas de molette, j'avais fini par utiliser un TDBCtrlGrid avec la gestion manuelle de la roulette

    Pour TScrollBox, on dirait que WM_MOUSEWHEEL n'ai jamais provoqué par Windows pour ce control ! Etrange !

    En C++Builder 2007, j'ai aussi des ScrollBox contenant des Panels, il n'y a rien à faire, même en cliquant dans la zone client (hors d'un controle) ou sur la Barre, la molette ne fonctionne JAMAIS, aucun OnMouseWheel, OnMouseWheelDown ou OnMouseWheelUp ne se produit !

    D'ailleurs, cela ne fonctionne pas non plus pour une Form ayant des barres ou une Zone Client MDI !

    @sat83 !
    Il est dommage que le clic dans un ScrollBox n'affecte pas le Focus !
    Mais ta remarque est pertinente, enfin le WM_MOUSEWHEEL survient et donc OnMouseWheel !
    Par contre, le OnClick ou OnMouseEnter ne se produit pas si l'on survole la ScrollBar, on ne peut donc pas s'auto attribuer le Focus !

    C'est en tout cas, une solution simple, juste SetFocus dans le OnClick du TScrollBox qui s'attribue lui-même le Focus pour gérer la souris !
    C'est tout de même un peu con !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #24
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Il est dommage que le clic dans un ScrollBox n'affecte pas le Focus !
    Mais ta remarque est pertinente, enfin le WM_MOUSEWHEEL survient et donc OnMouseWheel !
    Par contre, le OnClick ou OnMouseEnter ne se produit pas si l'on survole la ScrollBar, on ne peut donc pas s'auto attribuer le Focus !
    Je n'ai jamais eu de soucis avec le molette souris sur un ScrollBox...
    Pour forcer le Focus lorsque l'on survole le ScrollBox, éventuellement forcer le Focus dans le OnMouseMove:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void __fastcall TForm1::ScrollBox1MouseMove(TObject *Sender,
          TShiftState Shift, int X, int Y)
    {
      ScrollBox1->SetFocus() ;
    }
    Je viens de tester chez moi (BCB5) ça fonctionne.

  5. #25
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 052
    Par défaut
    Oui, c'est ce que j'ai fait OnMouseMove par contre ne se déclenche pas si l'on survole la ScrollBar de la ScrollBox !

    Je n'ai jamais eu de soucis avec le molette souris sur un ScrollBox...
    Tu as du toujours du mettre des TEdit ou autre control sans Scroll mais pouvant prendre le Focus !
    Car si l'on met un TEdit dans un Panel lui même dans un ScrollBox
    Si l'on clique sur le Panel, pas de OnMouseWheel
    Si l'on clique sur le TEdit, le OnMouseWheel devient dispo !

    hors la c'est l'un des rares cas, où ce la ne fonctionne pas le TImage qui ne prend pas le Focus et donc le ScrollBox non plus !

    Moi, j'avais eu le problème car je n'avais que des Labels et Image et TEdit, cela fonctionne, car par reflexe on clique dans l'edit, mais en cliquant sur le TImage (cela provoquait un Dialog), pas de Scroll

    jeanmichmuch66, tu as donc une solution, dans le OnClick de l'Image, tu fais un ScrollBox->SetFocus et cela activera la molette !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #26
    Membre confirmé

    Homme Profil pro
    En recherche d'emploi sur la région de Toulouse
    Inscrit en
    Novembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En recherche d'emploi sur la région de Toulouse
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 62
    Billets dans le blog
    1
    Par défaut
    Je suis désolé, j'ai beau essayer je n'y arrive pas.
    j'ai donc fait un "projet" avec dans une form, un Scrollbox dans lequel on trouve un TImage (plus grand que le Scrollbox) j'y ai donc rajouté le code que vous m'avez donné, mais rien n'y fait.
    Je n'arrive pas a faire bouger le scrollbox.
    Je vous joint donc ce projet afin que vous puissez me dire ou je faute, svp.
    Je doit oublier un détail qui me bloque.
    Si vous trouvez la raison ou si vous débuggez mon "projet" merci de me dire ou je faute .
    Un grand merci d'avance.
    Fichiers attachés Fichiers attachés

  7. #27
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 052
    Par défaut
    Tu as oublié la DFM, c'est con non !

    Sinon, tu n'as pas compris que le SetFocus c'était pour que l'on puisse obtenir des OnMouseWheel, OnMouseWheelDown ou OnMouseWheelUp pour qu'ensuite on puisse gérer la molette et modifier la position dans la ScrollBox !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ScrollBox1MouseWheel(TObject *Sender,
          TShiftState Shift, int WheelDelta, TPoint &MousePos, bool &Handled)
    {
      ScrollBox1->VertScrollBar->Position -= (WheelDelta / 60);
    }
    C'est à toi de gérer le défilement !
    En même temps, si tu ne lit pas nos réponses, on perd du temps !

    WheelDelta vaut souvent 120 ou -120, il me semble que cela correspond à 12° (le cran par défaut de la plupart des souris)
    A toi, de trouver la vitesse de défilement qui te convient
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #28
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut jeanmichmuch66
    La methode ScrollBox1MouseWheel ne fonctionne pas seul il faut donner le focus a la ScrollBox, le moyen est de passer par le MouseMove du TImage
    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::ScrollBox1MouseWheel(TObject *Sender,
          TShiftState Shift, int WheelDelta, TPoint &MousePos, bool &Handled)
    {
    ScrollBox1->VertScrollBar->Position -= (WheelDelta);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y)
    {
    ScrollBox1->SetFocus();
    }

  9. #29
    Membre confirmé

    Homme Profil pro
    En recherche d'emploi sur la région de Toulouse
    Inscrit en
    Novembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En recherche d'emploi sur la région de Toulouse
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 62
    Billets dans le blog
    1
    Par défaut
    Toutes mes plates excuses il est vrai que j'avais survolé la réponse que j'avais en fait déjà utilisé auparavant mais n'ayant pas le Focus du Scrollbox ne fonctionnait pas.
    J'avais fini par pensait que ça marchait tout seul quand on me disait il n'y a rien a faire ça marche tout seul ... tu donnes juste le focus ...

    Je vous remercie grandement pour votre aide.

    Il est vrai qu'avec la réponse maintenant ça semble évident.
    Enfin bref , j'ai donc intégrer la fonction dans mon programme au bon endroit.
    Car je crée des images de façon dynamiques (quantité variable) j'ajoute le mousemove avec le focus sur le scrollbox a la création des images et le tour est joué !!!!

    Encore un grand MERCI a tous ceux qui mon aidé avec patience

Discussions similaires

  1. Comment créer l'évennement MouseWheel sur un panel
    Par developppez dans le forum Windows Forms
    Réponses: 7
    Dernier message: 08/05/2009, 22h09
  2. Intercepter l'évènement MouseWheel sur un contrôle MapPoint
    Par brazilia28 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 05/05/2009, 10h37
  3. Evenement MouseWheel sur un panel
    Par Rodrigue dans le forum C++/CLI
    Réponses: 3
    Dernier message: 28/03/2008, 19h57
  4. mousewheel sur composant
    Par fafacpp dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/02/2007, 12h47
  5. Evenement sur les barres de défilement d'une ScrollBox
    Par Nico118 dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/05/2004, 14h56

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