Comment récuperer l'evenement du clic sur une scrollbar dans une textbox

Résolu
Signaler
-
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
-
Bonjour,
je voudrais afficher un message dans un msgbox, lorsque l'utilisateur clique sur la scrollbar de mon textbox.

j'arrive très bien à le faire sur la textbox par l'evement _click, mais ca ne fonctionne pas si l'utilisateur clique sur la scrollbar.

peut-on récuperer l'evenement click sur la scrollbar?

cau'X

5 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
salut,
c'est faisable, par subclassing.

ici 2 évènements, le scroll, et le MouseDown [VB6] sur la barre de Scroll


'DANS UN MODULE
'
' PCPT [AFCK] 14 nov 2005
'
'module SubClassing appelant la procédure de la Form appelante au Scroll d'un objet
'
Option Explicit
'
'
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal _
wParam As Long, ByVal lParam As Long) As Long
'
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'
Private Const WM_MOUSEWHEEL = &H20A
Private Const WM_NCLBUTTONDOWN = &HA1
Private Const GWL_WNDPROC = (-4)
'
Private Old_WindowProc As Long
'
'
'
Private Function New_WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_MOUSEWHEEL Then
New_WindowProc = True
Call Form1.Scroll(wParam)
ElseIf Msg = WM_NCLBUTTONDOWN Then
New_WindowProc = True
Call Form1.Click
End If
New_WindowProc = CallWindowProc(Old_WindowProc, hwnd, Msg, wParam, lParam)
End Function
'
'
Public Sub StartSubclassing(hwnd As Long)
Old_WindowProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf New_WindowProc)
End Sub
'
'
Public Sub StopSubclassing(hwnd As Long)
Dim lngRetVal As Long
lngRetVal = SetWindowLong(hwnd, GWL_WNDPROC, Old_WindowProc)
End Sub

'Form1 contenant Text1 multiligne avec scroll verticale
Option Explicit
'
'
Private Sub Form_Load()
Text1.Text = "a " & vbCrLf & "a " & vbCrLf & "a " & _
vbCrLf & "a " & vbCrLf & "a " & vbCrLf & _
"a " & vbCrLf & "a " & vbCrLf & "a " & _
vbCrLf & "a " & vbCrLf & "a " & vbCrLf & _
"a " & vbCrLf & "a " & vbCrLf & "a " & _
vbCrLf & "a " & vbCrLf & "a " & vbCrLf & _
"a " & vbCrLf & "a " & vbCrLf & "a "

Call StartSubclassing(Text1.hwnd)
End Sub
'
'
Private Sub Form_Unload(Cancel As Integer)
Call StopSubclassing(Text1.hwnd)
End Sub
'
'
Public Sub Scroll(wParam As Long)
Debug.Print "SCROLL"
End Sub
Public Sub Click()
Debug.Print "CLICK"
End Sub


<SMALL> Coloration syntaxique automatique [AFCK]</SMALL>


NB : ne pas fermer l'appli par END, et ne pas quitter par le bouton STOP de l'IDE
++
PCPT [AFCK]
3
Messages postés
1788
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
11 mars 2006
27
Bonjour,

Non, la Scrollbar du textbox ne sert qu'à faire défiler le texte et n'as pas d'évenement Click.



jpleroisse



Si une réponse vous convient, cliquez Réponse Acceptée.
0

Wahou je ne m'attendais pas à çà.
je croyai que c'était plus simple que çà à mettre en place.
je vais accepter cette réponse, mais je ne pense pas l'utiliser.
je crois que je vais rusé en mettant quelque chose sur la scrollbar de transparent "genre une imagebox"

merci quand même.

cau'X
0
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
comme tu veux.
là, tu as besoin d'un évènement n'existant par par défaut dans VB...
çà demande donc un minimum

et repérer ton click par un autre objet empêchera ton scroll...
@+
PCPT [AFCK]
0
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
caux > hélas, la solution de pcpt est bien la bonne, et la seule solution "propre".



Une de mes sources explique le subclassing, tu peux eventuellement t'en inspirer pour comprendre le code de pcpt.


Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0