MouseEvents
Le code suivant vous permet d'effectuer un hittest sur des controles tels que le SStab ou le tabstrip et donc, de déterminer quel est l'onglet situé à une position X,Y. Option Explicit Private Const TCM_FIRST = &H1300 '// Tab control messages Private Const TCM_HITTEST = (TCM_FIRST + 13) Private Const TCHT_NOWHERE = &H1 'Click en dehors d'un tab 'Les constantes suivantes sont présentes à titre informatif. 'Private Const TCHT_ONITEMICON = &H2 'Click sur l'icône du tab 'Private Const TCHT_ONITEMLABEL = &H4 'click sur le texte du tab 'Private Const TCHT_ONITEM = (TCHT_ONITEMICON Or TCHT_ONITEMLABEL) 'click sur le texte et sur l'icône du tab Private Type POINT x As Long y As Long End Type Private Type TCHITTESTINFO pt As POINT Flags As Long End Type Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Function TabHitTest(hwnd As Long, x As Single, y As Single) Dim HitTestInfo As TCHITTESTINFO, lngResult As Long 'Récupération des informations de position HitTestInfo.pt.x = x HitTestInfo.pt.y = y 'Envoie du HitTest lngResult = SendMessage(hwnd, TCM_HITTEST, 0&, HitTestInfo) 'Si on a cliqué sur un onglet If HitTestInfo.Flags <> TCHT_NOWHERE Then TabHitTest = lngResult 'On renvoie l'index de l'onglet Else TabHitTest = -1 'Sinon, on renvoie -1 End If End Function 'Exemple d'utilisation sur un TabStrip Private Sub TabStrip1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim lngTab as Long If Button And 2 Then lngTab = TabHitTest(TabStrip1.hwnd, X / Screen.TwipsPerPixelX, Y / Screen.TwipsPerPixelY) If lngTab <> -1 Then TabStrip1.Tabs(lngTab + 1).Selected = True End If End If End Sub