Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Non, c'est le même Handle avant et après clic.
Mais ce n'est pas nouveau, je pense me souvenir que les TextBoxes ActiveX n'ont pas de Handle récupérable bien que quelque part il doit bien y en avoir un.
Non, c'est le même Handle avant et après clic.
Mais ce n'est pas nouveau, je pense me souvenir que les TextBoxes ActiveX n'ont pas de Handle récupérable bien que quelque part il doit bien y en avoir un.
Ok, je laisse le hWnd que tu dis être le celui du Control mais derrière ça ne scrolle pas la TextBox, ça scrolle la feuille.
Ici en double-clic.
Essaie de voir si le Handle de ton point d'arrêt est celui affiché par le MsgBox.
Effectivement, tu as raison, on passe par Scroll_TextBox() si et seulement on scrolle dans la TextBox.
Donc il faut que je bloque la ScrollArea de la feuille jusqu'à ce qu'on sorte de la TextBox comme pour le code avec PeekMessage.
Idéalement je devrais utiliser l'évènement CursorOutOfRange de InkCollextor. Mais des tests précédents n'ont pas été conlcuants.
Je vais ré-essayer.
Non, je n'arrive pas à faire marcher l'évènement CursorOutOfRange.
VB:
With IC
.hWnd = hWnd ' The InkCollector requires an 'anchor' hWnd.SetEventInterest ICEI_MouseWheel,True' This sets event that you want to listen for.SetEventInterest ICEI_CursorOutOfRange,True' This sets event that you want to listen for.MousePointer = IMP_Arrow ' If this is not set, the mouse pointer disappears.DynamicRendering =False' I suggest turning this off.DefaultDrawingAttributes.Transparency =255' And making the drawing fullly transparent.Enabled =True' This must be set lastEndWith
Code:
'-----------
'Mouse Wheel
'-----------
Private Sub IC_MouseWheel(ByVal Button As MSINKAUTLib.InkMouseButton, ByVal Shift As MSINKAUTLib.InkShiftKeyModifierFlags, ByVal Delta As Long, ByVal X As Long, ByVal Y As Long, Cancel As Boolean)
Call Scroll(CurrentControl, Keep_ScrollLines, Delta > 0)
End Sub
'-------------------
'Cursor Out Of Range
'-------------------
Private Sub IC_CursorOutOfRange(ByVal Cursor As MSINKAUTLib.IInkCursor)
MsgBox "OUT"
End Sub
Il ne se passe rien. A moins que je m'y prenne mal.
L'évènement CursorOutOfRange ne se déclenche pas.
Par contre l'évènement CursorInRange se déclenche parfaitement lorsqu'on entre dans la zone de la "Tablet".
Je pense qu'ils sont symétriques et tout devrait fonctionner.
Et je ne peux pas contrer par une surveillance de la position du curseur dans le RECT de la TextBox car cela suppose de garder la main (boucle) ou de recevoir des évènements de type WM_MOUSEMOVE du Hook.
Le scroll dans la textbox sans scroller la feuille semble fonctionner si on reste appuyé sur le bouton gauche de la souris en même temps qu'on actionne la molette.
Le fait que l'évènement CursorOutOfRange ne se déclenche pas est vraiment pénalisant !
J'ai trouvé une parade à dormir debout au Scroll de la feuille en même temps que la TextBox.
Le Scroll de la feuille intervient juste après le déclenchement de l'évènement IC_MouseWheel() et donc je l'inhibe avec un ActiveSheet.ScrollArea bloquant puis lance un Application.Ontime pour le débloquer avec un ActiveSheet.ScrollArea débloquant
Mais ce n'est pas le seul problème des TextBoxes. Je continue à tester.
Premier problème: la TextBox UserForm.
Si je ne scrolle pas le UserForm, le Scroll de la TextBox se prolonge même si on n'est plus sur la TextBox car elle ne réagit pas comme la ListBox ou la ComboBox qui n'envoie l'évènement IC_MouseWheel() que si le curseur est dans le Control.
Donc pour la TextBox UserForm, il faudrait que je capte son RECT pour vérifier que je suis bien dedans et sinon fermer son IC.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD