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

Delphi Discussion :

OnMouseWheel et OnMouseMove..


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Par défaut OnMouseWheel et OnMouseMove..
    Bonjour,

    j'ai cherché sur le forum avant de poster, j'ai trouvé certaines choses, mais ca ne fait pas ce que je veux.... ou presque. Sauf pour 1, qui fait ce que je veux, mais pas à l'endroit idéale...

    Tout d'abord, j'ai un TImage ajouté en design-time dans un scrollbox. Quand l'image dépasse la grandeur du ScrollBox, les barres de défilement entrent en action. Jusque là, ça fonctionne.

    Un de mes problèmes, c'est que je voudrais que l'image se défile aussi lorsque j'utilise la roulette. J'ai essayé de mettre du code directement dans le scrollbox.OnMouseWheelUP and DOWN mais rien n'y fait. Ça ne passe jamais!

    Alors, j'ai trouvé sur ce site le code suivant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
      WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
    Begin
      If (WheelDelta > 0) Then
        With ScrollBox1.VertScrollBar Do
          Position := Position - (Panel1.ClientHeight Div 20);
      If (WheelDelta < 0) Then
        With ScrollBox1.VertScrollBar Do
          Position := Position + (Panel1.ClientHeight Div 20);
    End;
    À ce point, j'arrive effectivement à faire bouger mon TImage si je déplace la roulette. DONC, ca fonctionne. MAIS... si je met le curseur de souris en dehors de l'emplacement du TImage et que je bouge la roulette... Ben... ca fonctionne toujours. DONC.... ce n'est pas exactement ça que je veux. Il faudrait peut-etre que je sécifie dans le CODE SI HAUT de n'exécuter son code, QUE SI la souris se retrouve à telle place.... ?!?! Mais comment !??


    ENSUITE... mon 2ème problème... Je pourrais toujours faire la même chose pour la barre horizontale... mais bon... je n'ai pas la 2ème roulette sur ma souris. .. N'empêche que ca me prendrait le code nécessaire quand même.

    ENSUITE.... Toujours sur le TImage, je voudrais que le programme réagisse au MouseMove .... dans cette procédure, je voudrais lui dire de déplacer l'image QUE lorsque le bouton gauche est aussi enfoncé. Et donc, en ayant le bouton gauche enfoncé, si je bouge la souris vers la gauche/droite, c'est la barre horizontale qui entre en action.... même chose, pour enhaut/enbas... Je fais comment !?!?


    Merçi de bien vouloir m'aider avec tout ces problèmes...

  2. #2
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Bonjour,

    n'utilise pas le onMouseWheel de ta form, mais celui de ton Timage, et là se sera bon normalement.

    Ensuite pour le déplacement de ton TImage avec le bouton gauche enfoncer, le plus simple c'est que tu déclare une variable (boolean) que tu passe à true sur le OnMoseDown (et tu repère la position initiale de ton clic sur la souris).
    Puis tu gère ton déplacement sur le OnMouseMov:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Wile boolean = true do....
    et tu passe ton boolean à false sur le OnMouseUp.

    Voilà...


    @+.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Par défaut
    Citation Envoyé par PadawanDuDelphi
    Bonjour,

    n'utilise pas le onMouseWheel de ta form, mais celui de ton Timage, et là se sera bon normalement.

    @+.
    C'est tout con, ... j'ai trouvé lol... en fait, TImage ne possède pas de OnMouseWheel ... mais le scrollbox le possède. lol.. donc, ca fonctionne. Je l'avais pas vue celle là

  4. #4
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Effectivement, pas de OnMouseWheel sur un TImage...Autant pour moi,
    mais je suis content que tu t'en soit sorti.

    @+.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Par défaut
    Citation Envoyé par PadawanDuDelphi
    Bonjour,

    n'utilise pas le onMouseWheel de ta form, mais celui de ton Timage, et là se sera bon normalement.

    Ensuite pour le déplacement de ton TImage avec le bouton gauche enfoncer, le plus simple c'est que tu déclare une variable (boolean) que tu passe à true sur le OnMoseDown (et tu repère la position initiale de ton clic sur la souris).
    Puis tu gère ton déplacement sur le OnMouseMov:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Wile boolean = true do....
    et tu passe ton boolean à false sur le OnMouseUp.

    Voilà...


    @+.
    resalut,

    J'ai une bonne petite idée pour ce que tu as dit pour la variable boolean...c'est pas bête.

    Et puis pour l'autre problème, OnMouseWheel .... j'ai parlé trop vite. le code était toujours dans le formOnMouseWheel... lol.. quand je l'ai mis aussi dans le scrollbox.OnMouseWheel.. alors.. j'ai donc enlevé le code du form. Et ça ne fonctionne pas... et ce, meme si le scrollbox.OnMouseWheel possède le même code.... En faite, il n'est pas du tout intercepté.

    Dernière chose.... il semblerait que t'aie édité ton message au même moment où je m'appretais à te répondre :p Ta réponse était plus courte tantot

  6. #6
    Membre Expert
    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 : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Par défaut
    C'est bien beau ca...

    mais ton MouseWheel est attribué sur le form... et donc, même si je suis en dehors de la scrollbox, l'image est défilée quand même.

    Je veux vraiment que ca se fasse seulement quand le curseur de souris est au dessus du TImage.

    J'ai donc essayé de mettre ton code sur le OnMouseWheel du scrollbox, (ce qui serait logique), mais ca ne fonctionne pas.

    Misère...

  8. #8
    Membre Expert
    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 : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Tu es vite bloqué à ce que je vois...
    Et si tu ajoutes un test de la position de la souris avec PtInRect()...?
    Par exemple, si la souris ne se trouve pas sur la scrollbox, on ne traîte pas la molette.
    J'ai ajouté les 2 premières lignes au code d'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
      WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
    Begin
      If (PtInRect(ScrollBox1.BoundsRect, 
        ScreenToClient(Mouse.CursorPos)) = False) Then Exit;
     
      If (WheelDelta > 0) Then
        With ScrollBox1.VertScrollBar Do
          Position := Position - (Panel1.ClientHeight Div 20);
      If (WheelDelta < 0) Then
        With ScrollBox1.VertScrollBar Do
          Position := Position + (Panel1.ClientHeight Div 20);
    End;
    En fait, dans les paramètres de la procédure, on retrouve déjà la position du curseur de la souris -> MousePos...

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

Discussions similaires

  1. CMyButton et OnMouseMove : décrochage :/
    Par Mayhem dans le forum MFC
    Réponses: 3
    Dernier message: 28/03/2005, 18h16
  2. Evènement OnMouseWheel pour un TCustomControl
    Par blan dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/11/2004, 14h37
  3. Réponses: 5
    Dernier message: 02/09/2004, 16h17
  4. [Création de composant] Surcharge de OnMouseMove
    Par yoghisan dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/02/2004, 22h34
  5. [MFC]OnMouseMove
    Par oxor3 dans le forum MFC
    Réponses: 4
    Dernier message: 09/02/2004, 18h21

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