2009-10-01 5 views
3

J'ai utilisé certains programmes avec des barres de défilement qui mettent à jour le contenu lié alors que vous faites toujours glisser le "pouce", et d'autres qui ne le font pas jusqu'à ce que vous relâchiez la souris. Cela implique qu'il existe différents types de messages Windows impliqués ici. Mais tout ce que je peux trouver à partir de TScrollBar est un événement OnScroll qui se déclenche continuellement pendant que vous faites glisser. Il n'a également pas un événement OnMouseDown ou OnMouseUp. Est-il possible de configurer une notification "OnEndDragging" pour un TScrollBar?Comment savoir quand j'ai arrêté de faire défiler un TScrollBar?

Répondre

5

Essayez ce code (testé avec Delphi 2009), il remplira l'espace client de forme avec une couleur au hasard pendant que vous suivez le pouce, et remplissez-le en jaune lorsque le pouce est libéré:

procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; 
    var ScrollPos: Integer); 
begin 
    Randomize; 
    if ScrollCode = scTrack then 
    Color := RGB(Random(256), Random(256), Random(256)); 
    if ScrollCode = scEndScroll then 
    Color := clYellow; 
end; 

Le Les valeurs TScrollCode correspondent aux valeurs WPARAM que vous trouverez documentées pour WM_HSCROLL et WM_VSCROLL.

+0

Alors il n'a besoin que d'un événement car il construit cette information dans le paramètre ScrollCode? C'est bon à savoir. Merci! –

+0

Exactement. Cela correspond à la manière dont Windows envoie un message de défilement unique pour chaque barre de défilement, avec les informations supplémentaires codées dans les données de message 'wParam' et' lParam'. – mghie

2

Les programmes qui mettent à jour leur zone de défilement «en direct» lorsque l'utilisateur tire le pouce manipulent le code sb_ThumbTrack pour les messages wm_HScroll et wm_VScroll. Ceux qui ne se mettent à jour que lorsque l'utilisateur relâche le pouce manipulent le code sb_ThumbPosition.

Il y a un compromis sur ces deux options, qui est de mettre à jour après que l'utilisateur n'a pas bougé le pouce, même si l'utilisateur ne l'a pas encore sorti. Saisissez , puis définissez une minuterie. Si la minuterie se déclenche, mettez à jour l'affichage. Si un autre sb_ThumbTrack arrive, réinitialiser le temporisateur.

Questions connexes