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 :

ScrollBox et mousewheel [FAQ]


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 25
    Points : 20
    Points
    20
    Par défaut ScrollBox et mousewheel
    Bonjour

    J'ai collé un scroll box, dans lequel je créé dynamiquement des panels.
    Quand la taille totale dépasse la zone affiché, mon scrollBox fait apparaitre une scrollBar automatiquement. Je peux déplacer la barre avec la souris et tout va bien.
    Par contre impossible de le faire avec la rouette.

    Il y a bien les événement onMouseWheel, onMouseWheelUp et onMouseWheelDown, mais j'ai beau roulettiser sur mon scrollbox, je ne passe jamais dans cet événement.

    Il doit y avoir une propriété pour dire de récupérer le message mais là si je mets du code dans la fenetre mère, elle le récupère mais je dois alors gérer la position du pointeur souris pour déterminer sur quel compo ça se passe.

    Bref pas terrible comme solution, surtout que la scrollBox doit forcément gérer ça en natif mais je sais pas comment.

    Merci de m'aider

  2. #2
    Expert confirmé
    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 : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Je suis tombé sur ce topic lors d'une recherche, étonné de voir aussi que la molette ne fonctionnait pas avec un ScrollBox. J'ai qu'en même une solution en utilisant l'évènement OnMouseWheel de la Form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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;
    J'ai malgré tout un problème sur la valeur du pas de déplacement. Il me semble que c'est configurable dans les options de la souris mais je n'en suis pas sûr. La hauteur divisée par 20 me donne de bons résultats en attendant de trouver le moyen d'obtenir la vraie valeur de ce pas. à+
    De retour parmis vous après 10 ans!!

  3. #3
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Points : 91
    Points
    91
    Par défaut
    Salut,
    Excellente méthode Sub0. Pour moi elle a marché directement.
    Par contre je vois pas les problèmes auxquels tu fais allusion.
    Chez moi, tout parait fonctionner parfaitement.
    Au fait, as-tu trouvé une valeur de pas idéale autre que 20 ?
    Encore merci.
    --
    "Qui fait le malin tombe dans le ravin"

  4. #4
    Expert confirmé
    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 : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Non, justement, c'est cette valeur qu'il me manque.
    Et concernant les problèmes auxquels je fais allusion :
    http://www.developpez.net/forums/sho...d.php?t=206406
    Il existe diverses solutions à mon problème, mais aucune ne donne le résultat recherché.
    à+
    De retour parmis vous après 10 ans!!

  5. #5
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 965
    Points
    6 965
    Par défaut
    Moi, je passe par un edit (ou tout autre objet sur mon panel dans la scrollbox):

    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
    20
    21
     
       _OldEditMobilierProc := EditMobilier.WindowProc;
       EditMobilier.WindowProc := EditMobilier_ScrollProc;
     
     
    procedure TFormDevis.EditMobilier_ScrollProc(var Msg: TMessage);
    begin
       //.Interception de l'évènement WM_MOUSEWHEEL.
       if Msg.Msg = WM_MOUSEWHEEL then
       begin
          if Msg.WParamHi > 120 then
             ScrollBox.Perform(WM_VSCROLL, SB_LINEDOWN, 0)
          else
             ScrollBox.Perform(WM_VSCROLL, SB_LINEUP, 0);
     
          Exit;
       end;
     
       //.Traitement normal des autres message.
       _OldEditMobilierProc(Msg);
    end;
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

Discussions similaires

  1. ScrollBox et mousewheel
    Par Leurant dans le forum Contribuez
    Réponses: 2
    Dernier message: 21/05/2012, 12h17
  2. Mousewheel sur Scrollbox
    Par jeanmichmuch66 dans le forum C++Builder
    Réponses: 28
    Dernier message: 14/09/2011, 22h23
  3. ScrollBox
    Par Anonymous dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/12/2005, 09h17
  4. Comment effacer le contenu d'une scrollbox???
    Par Leclair2000 dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/07/2004, 16h34
  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