Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPrivate Sub Form_Load() Dim oldProc As Long 'definit un handler de message perso pour le controle et enregistre l'adresse de la fonction par defaut (pointeur de fonction) oldProc = SetWindowLong(Text1.hwnd, GWL_WNDPROC, AddressOf myMessageHandler) Call SetProp(Text1.hwnd, "oldProc", oldProc) End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Dim oldProc As Long oldProc = GetProp(Text1.hwnd, "oldProc") 'Redonne la main à la vraie procédure ( non indispensable pour le textbox !!! ) Call SetWindowLong(Text1.hwnd, GWL_WNDPROC, oldProc) End Sub Private Sub text1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) Static bCapturé As Boolean If Not bCapturé Then bCapturé = True Call SetCapture(Text1.hwnd) 'on capture le curseur Text1.FontBold = True End If If x < 0 Or y < 0 Or x > Text1.Width Or y > Text1.Height Then 'si on sort du contrôle bCapturé = False Call ReleaseCapture 'on relache le curseur Text1.FontBold = False End If End Sub Private Sub Text1_GotFocus() Call HideCaret(Text1.hwnd) End Sub
'permet de chager une caractéristique () d'une fenetre ( class window de base , inclue aussi les Textboxes...) 'elle renvoie l'ancienne valeur de la caracteristique... Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 'permet d'appeler une procedure de traitement de message ( message handler ) Public 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 'Permet de definir ou recupere une propriete , dans un objet , d'apres son hWnd Public Declare Function GetProp Lib "user32" Alias "GetPropA" (ByVal hwnd As Long, ByVal lpString As String) As Long Public Declare Function SetProp Lib "user32" Alias "SetPropA" (ByVal hwnd As Long, ByVal lpString As String, ByVal hData As Long) As Long 'Pour masque le curseur de saisie Public Declare Function HideCaret Lib "user32" (ByVal hwnd As Long) As Long ' permet de definir la procedure qui traite les messages sur un controle particulier Public Const GWL_WNDPROC = -4 'Envoie tous les messages concernant la souris a une fenetre dont on passe le hWnd Public Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long 'Cesse d'envoyer les messages a une fenetre Public Declare Function ReleaseCapture Lib "user32" () As Long Public Const WM_LBUTTONUP = &H202 Public Const WM_RBUTTONUP = &H205 Public Const WM_LBUTTONDOWN = &H201 Public Const WM_RBUTTONDOWN = &H204 'evenement clic droit (down) ' cela fonctionne aussi avec un clic droit 'up' mais le focus est perturbé , il faut cliquer qq part pour le debloquer....... ' mieux vaut donc bloquer le clic droit 'down' ' Public Const WM_RBUTTONUP = &H205 'evenement clic droit (up) Public Function myMessageHandler(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long ' si le message est un clic , on sors de la fonction... If uMsg WM_LBUTTONDOWN Or uMsg WM_RBUTTONDOWN Or uMsg = WM_RBUTTONUP Or uMsg = WM_LBUTTONUP Then Exit Function End If ' appel de la procedure standard myMessageHandler = CallWindowProc(GetProp(hwnd, "oldProc"), hwnd, uMsg, wParam, lParam) End Function