Inhiber les clicks sur un textbox

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 26 avril 2003 à 23:24
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 28 avril 2003 à 15:47
Bonsoir tt le monde

j'ai une form comprend 4 textbox j'utilise pour les 3 premier ne permete aucune saisie et j'utilise la fonction HideCaret de user32 pour la suppression du curseur ainsi que la fonction suivante:

Private Sub text1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Static bCapturé As Boolean, lngRep As Long, hCurseur As Long, hOldCurseur As Long
If Not bCapturé Then
bCapturé = True
lngRep = 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
lngRep = ReleaseCapture 'on relache le curseur
text1.FontBold = False
End If
End Sub

Mais mon problème c k si je click sur le textbox il garde la valeur FontBold = True, jusqu'au prochain load.
Je ne sais pas comment remedier a ca :sad)

9 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 avril 2003 à 00:17
le fait de cliquer , ou de deplacer la souris ne se traduisent pas opar les memes messages, transmis aui controle.

ca se traduit par le declenchement d'evenements differents.

- Tu peux essayer de t'arranger avec MouseDown & MouseUp

- Trapper ledit message de clic, et ne pas le transmettre au controle

-----------------------------------------------------------------------
By Renfield

thomas_reynald@msn.com

Aucune touche n'a été bléssée lors de la saisie de ce texte..........
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 avril 2003 à 00:21
si tu veux juste empecher la saisie , tu as toujours la propriété 'Locked'...
-----------------------------------------------------------------------
By Renfield

thomas_reynald@msn.com

Aucune touche n'a été bléssée lors de la saisie de ce texte..........
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
27 avril 2003 à 00:35
oki merci j'essai ca de suite
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
27 avril 2003 à 00:48
Mais comment je fais pour empecher un click sur une zone de texte ou eviter que le text reste en gras (par rapport a la fonction SetCapture)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 avril 2003 à 09:05
voila ce que ca donne , c'est juste une maquette !! mais bon , ca fonctionne....

'--------------------------------------------------
'Dans ta form
'--------------------------------------------------
Private 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



'--------------------------------------------------
'Dans un module
'--------------------------------------------------

'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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 avril 2003 à 11:13
oh pardon !!

j'ai fait une source qui reprend ton exemple , et inhibe les clicks , je te rassuures , ca marche du tonerre , simplement je........ j'ai oublié de la poster !!!

je la refais , ne l'ayant pas ici ( au boulot, quoi ! ) et je te la renv... euh , te l'envoie !!

je te prie de bien vouloir m'excuser :)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 avril 2003 à 11:18
ah ba si , finalement , je l'avais envoyée :)

décidement !!

http://www.vbfrance.com/forum.aspx?Article=62778

-----------------------------------------------------------------------
By Renfield

thomas_reynald@msn.com

Aucune touche n'a été bléssée lors de la saisie de ce texte..........
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
28 avril 2003 à 15:35
c moi je dois trop fumer surement je ne l'aivai pas vu lol suis tellement fenian k je n'ai pas dessendu la page :)

sinon ton exemple marche du tonner c cool 8-)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 avril 2003 à 15:47
ok ok.

si tu veux dex explications (le code est pas mal commenté , mais bon......)
-----------------------------------------------------------------------
By Renfield

thomas_reynald@msn.com

Aucune touche n'a été bléssée lors de la saisie de ce texte..........
0
Rejoignez-nous