Bonjour à tous,
je souhaite interdire le COLLER dans un TextBox.
J'ai bien essayé la propriété Locked mais là je ne peux
plus saisir.
Ce que je souhaite, c'est obliger l'utilisateur à effectuer sa saisie.
Si quelqu'un a une p'tite idée, elle sera la bienvenue.
Bonjour à tous,
je souhaite interdire le COLLER dans un TextBox.
J'ai bien essayé la propriété Locked mais là je ne peux
plus saisir.
Ce que je souhaite, c'est obliger l'utilisateur à effectuer sa saisie.
Si quelqu'un a une p'tite idée, elle sera la bienvenue.
Bonjour à tous,
je souhaite interdire le COLLER dans un TextBox.
J'ai bien essayé la propriété Locked mais là je ne peux
plus saisir.
Ce que je souhaite, c'est obliger l'utilisateur à effectuer sa saisie.
Si quelqu'un a une p'tite idée, elle sera la bienvenue.
une idée amusante et qui fonctionne très bien;
On utilise le fait que si tu fais un copy paste
(de plus de 1 caractère), la différence de longueur
entre le nouveau texte dans la textBox et l'ancien texte
sera plus grande que 1, ce qui ne se produit pas quand
on saisi manuellement.
Il ne reste plus qu'à judicieusement disposer une variable
statique dans le change, et le tour est joué.
J'ai testé, cela fonctionne bien, je n'ai pas vu de cas
qui ne marchaient pas.
une idée amusante et qui fonctionne très bien;
On utilise le fait que si tu fais un copy paste
(de plus de 1 caractère), la différence de longueur
entre le nouveau texte dans la textBox et l'ancien texte
sera plus grande que 1, ce qui ne se produit pas quand
on saisi manuellement.
Il ne reste plus qu'à judicieusement disposer une variable
statique dans le change, et le tour est joué.
J'ai testé, cela fonctionne bien, je n'ai pas vu de cas
qui ne marchaient pas.
une idée amusante et qui fonctionne très bien;
On utilise le fait que si tu fais un copy paste
(de plus de 1 caractère), la différence de longueur
entre le nouveau texte dans la textBox et l'ancien texte
sera plus grande que 1, ce qui ne se produit pas quand
on saisi manuellement.
Il ne reste plus qu'à judicieusement disposer une variable
statique dans le change, et le tour est joué.
J'ai testé, cela fonctionne bien, je n'ai pas vu de cas
qui ne marchaient pas.
Bonjour jean-marc, dans le message
news:430dac05$0$10959$
tu disais :une idée amusante et qui fonctionne très bien;
On utilise le fait que si tu fais un copy paste
(de plus de 1 caractère), la différence de longueur
entre le nouveau texte dans la textBox et l'ancien texte
sera plus grande que 1, ce qui ne se produit pas quand
on saisi manuellement.
Il ne reste plus qu'à judicieusement disposer une variable
statique dans le change, et le tour est joué.
J'ai testé, cela fonctionne bien, je n'ai pas vu de cas
qui ne marchaient pas.
et :
Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If Button = 2 Then Text1.Text=VbNullString
End Sub
c'est pas bon ? :-)
Bonjour jean-marc, dans le message
news:430dac05$0$10959$ba620e4c@news.skynet.be
tu disais :
une idée amusante et qui fonctionne très bien;
On utilise le fait que si tu fais un copy paste
(de plus de 1 caractère), la différence de longueur
entre le nouveau texte dans la textBox et l'ancien texte
sera plus grande que 1, ce qui ne se produit pas quand
on saisi manuellement.
Il ne reste plus qu'à judicieusement disposer une variable
statique dans le change, et le tour est joué.
J'ai testé, cela fonctionne bien, je n'ai pas vu de cas
qui ne marchaient pas.
et :
Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If Button = 2 Then Text1.Text=VbNullString
End Sub
c'est pas bon ? :-)
Bonjour jean-marc, dans le message
news:430dac05$0$10959$
tu disais :une idée amusante et qui fonctionne très bien;
On utilise le fait que si tu fais un copy paste
(de plus de 1 caractère), la différence de longueur
entre le nouveau texte dans la textBox et l'ancien texte
sera plus grande que 1, ce qui ne se produit pas quand
on saisi manuellement.
Il ne reste plus qu'à judicieusement disposer une variable
statique dans le change, et le tour est joué.
J'ai testé, cela fonctionne bien, je n'ai pas vu de cas
qui ne marchaient pas.
et :
Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If Button = 2 Then Text1.Text=VbNullString
End Sub
c'est pas bon ? :-)
ben tu crois que ca marche si c'est un ctrl V -C ??
moi je dis-ca , je dis rien ! c'est juste aucas ou il tomberait sur
un malin ...
DJ
ben tu crois que ca marche si c'est un ctrl V -C ??
moi je dis-ca , je dis rien ! c'est juste aucas ou il tomberait sur
un malin ...
DJ
ben tu crois que ca marche si c'est un ctrl V -C ??
moi je dis-ca , je dis rien ! c'est juste aucas ou il tomberait sur
un malin ...
DJ
scraper wrote:Bonjour jean-marc, dans le message
news:430dac05$0$10959$
tu disais :une idée amusante et qui fonctionne très bien;
On utilise le fait que si tu fais un copy paste
(de plus de 1 caractère), la différence de longueur
entre le nouveau texte dans la textBox et l'ancien texte
sera plus grande que 1, ce qui ne se produit pas quand
on saisi manuellement.
Il ne reste plus qu'à judicieusement disposer une variable
statique dans le change, et le tour est joué.
J'ai testé, cela fonctionne bien, je n'ai pas vu de cas
qui ne marchaient pas.
et :
Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If Button = 2 Then Text1.Text=VbNullString
End Sub
c'est pas bon ? :-)
ben tu crois que ca marche si c'est un ctrl V -C ??
moi je dis-ca , je dis rien ! c'est juste aucas ou il tomberait sur un malin
...
DJ
scraper wrote:
Bonjour jean-marc, dans le message
news:430dac05$0$10959$ba620e4c@news.skynet.be
tu disais :
une idée amusante et qui fonctionne très bien;
On utilise le fait que si tu fais un copy paste
(de plus de 1 caractère), la différence de longueur
entre le nouveau texte dans la textBox et l'ancien texte
sera plus grande que 1, ce qui ne se produit pas quand
on saisi manuellement.
Il ne reste plus qu'à judicieusement disposer une variable
statique dans le change, et le tour est joué.
J'ai testé, cela fonctionne bien, je n'ai pas vu de cas
qui ne marchaient pas.
et :
Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If Button = 2 Then Text1.Text=VbNullString
End Sub
c'est pas bon ? :-)
ben tu crois que ca marche si c'est un ctrl V -C ??
moi je dis-ca , je dis rien ! c'est juste aucas ou il tomberait sur un malin
...
DJ
scraper wrote:Bonjour jean-marc, dans le message
news:430dac05$0$10959$
tu disais :une idée amusante et qui fonctionne très bien;
On utilise le fait que si tu fais un copy paste
(de plus de 1 caractère), la différence de longueur
entre le nouveau texte dans la textBox et l'ancien texte
sera plus grande que 1, ce qui ne se produit pas quand
on saisi manuellement.
Il ne reste plus qu'à judicieusement disposer une variable
statique dans le change, et le tour est joué.
J'ai testé, cela fonctionne bien, je n'ai pas vu de cas
qui ne marchaient pas.
et :
Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If Button = 2 Then Text1.Text=VbNullString
End Sub
c'est pas bon ? :-)
ben tu crois que ca marche si c'est un ctrl V -C ??
moi je dis-ca , je dis rien ! c'est juste aucas ou il tomberait sur un malin
...
DJ
Bonjour à tous,
je souhaite interdire le COLLER dans un TextBox.
J'ai bien essayé la propriété Locked mais là je ne peux
plus saisir.
Ce que je souhaite, c'est obliger l'utilisateur à effectuer sa saisie.
Si quelqu'un a une p'tite idée, elle sera la bienvenue.
D'avance, merci.
Dany
Bonjour à tous,
je souhaite interdire le COLLER dans un TextBox.
J'ai bien essayé la propriété Locked mais là je ne peux
plus saisir.
Ce que je souhaite, c'est obliger l'utilisateur à effectuer sa saisie.
Si quelqu'un a une p'tite idée, elle sera la bienvenue.
D'avance, merci.
Dany
Bonjour à tous,
je souhaite interdire le COLLER dans un TextBox.
J'ai bien essayé la propriété Locked mais là je ne peux
plus saisir.
Ce que je souhaite, c'est obliger l'utilisateur à effectuer sa saisie.
Si quelqu'un a une p'tite idée, elle sera la bienvenue.
D'avance, merci.
Dany
Salut ;O)
La seule façon efficace est de sous-classer le contrôle Textbox.
Pour ce faire, il faut intercepter le message de type WM_PASTE qui est
envoyé au Textbox.
Quand interception il y a, on annule le message qui est envoyé au textbox
et
le tour est joué.
Voici un exemple tout prêt ci-dessous. Il faut un module et un formulaire
ayant un TextBox nommé Text1.
Bon amusement !
Guy
'---------------------------------------------------------------------------
---
'DANS UN MODULE :
'---------------------------------------------------------------------------
---
Option Explicit
' Déclaration des API
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA"
( _
ByVal Hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
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
Private Const GWL_WNDPROC = (-4)
Private Const WM_PASTE = &H302
' Variables utilisée par le programme
Private colScControls As New Collection
Public Sub Subclass(hWindow As Long)
Dim OldWndProc As Long
'Si aucun autre contrôle n'est déjà sousclassé
If IsMemberInCollection("hwnd" & hWindow, colScControls) = False Then
'Redéfinit la procédure à laquelle les messages doivent être
envoyés
OldWndProc = SetWindowLong(hWindow, GWL_WNDPROC, AddressOf WndProc)
'Ajoute le pointeur vers l'ancienne procédure à la collection
colScControls.Add OldWndProc, "hwnd" & hWindow
End If
End Sub
' Procédure appelé lorsqu'un nouveau message est à traiter
Private Function WndProc(ByVal Hwnd As Long, ByVal uMsg As Long, ByVal
wParam As Long, ByVal lParam As Long) As Long
' Booléen permettant de savoir s'il faut retourner la valeur par défaut
ou non
Dim bReturnOld As Boolean
bReturnOld = True
Select Case uMsg ' Utile pour plusieurs messages
Case WM_PASTE ' Dans le cas où on colle du texte
If Not IsNumeric(Clipboard.GetText) Then ' Si le texte dans le
presse papier n'est pas numérique
WndProc = 0 ' On renvoie une réponse négative: le texte ne
sera pas collé
bReturnOld = False
End If
End Select
' Si on ne veut pas redéfinir la valeur retournée, on retourne la
valeur
que retourne la procédure par défaut
If bReturnOld Then WndProc = CallWindowProc(colScControls("hwnd" &
Hwnd), Hwnd, uMsg, wParam, lParam)
End Function
Public Sub UnSubclass(hWindow As Long)
' Si un contrôle a déjà été souclassé
If IsMemberInCollection("hwnd" & hWindow, colScControls) Then
' Redéfinit la procédure à laquelle les messages doivent être
envoyés
SetWindowLong hWindow, GWL_WNDPROC, colScControls("hwnd" & hWindow)
' Supprime la référence à la fenêtre de la collection
colScControls.Remove "hwnd" & hWindow
End If
End Sub
Private Function IsMemberInCollection(Member, Collection As Collection) As
Boolean
Dim TempVal As Variant
On Error Resume Next
TempVal = Collection(Member)
IsMemberInCollection = (Err.Number = 0)
Err.Clear
End Function
'---------------------------------------------------------------------------
---
'DANS UN FORMULAIRE AYANT UN TEXTBOX NOMME Text1
'---------------------------------------------------------------------------
---
Option Explicit
Private Sub Form_Load()
Subclass Text1.Hwnd
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnSubclass Text1.Hwnd
End Sub
Private Sub Text1_Change()
End Sub
"Daniel AUBRY" a écrit dans le message de
news:430d84f8$0$2962$Bonjour à tous,
je souhaite interdire le COLLER dans un TextBox.
J'ai bien essayé la propriété Locked mais là je ne peux
plus saisir.
Ce que je souhaite, c'est obliger l'utilisateur à effectuer sa saisie.
Si quelqu'un a une p'tite idée, elle sera la bienvenue.
D'avance, merci.
Dany
Salut ;O)
La seule façon efficace est de sous-classer le contrôle Textbox.
Pour ce faire, il faut intercepter le message de type WM_PASTE qui est
envoyé au Textbox.
Quand interception il y a, on annule le message qui est envoyé au textbox
et
le tour est joué.
Voici un exemple tout prêt ci-dessous. Il faut un module et un formulaire
ayant un TextBox nommé Text1.
Bon amusement !
Guy
'---------------------------------------------------------------------------
---
'DANS UN MODULE :
'---------------------------------------------------------------------------
---
Option Explicit
' Déclaration des API
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA"
( _
ByVal Hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
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
Private Const GWL_WNDPROC = (-4)
Private Const WM_PASTE = &H302
' Variables utilisée par le programme
Private colScControls As New Collection
Public Sub Subclass(hWindow As Long)
Dim OldWndProc As Long
'Si aucun autre contrôle n'est déjà sousclassé
If IsMemberInCollection("hwnd" & hWindow, colScControls) = False Then
'Redéfinit la procédure à laquelle les messages doivent être
envoyés
OldWndProc = SetWindowLong(hWindow, GWL_WNDPROC, AddressOf WndProc)
'Ajoute le pointeur vers l'ancienne procédure à la collection
colScControls.Add OldWndProc, "hwnd" & hWindow
End If
End Sub
' Procédure appelé lorsqu'un nouveau message est à traiter
Private Function WndProc(ByVal Hwnd As Long, ByVal uMsg As Long, ByVal
wParam As Long, ByVal lParam As Long) As Long
' Booléen permettant de savoir s'il faut retourner la valeur par défaut
ou non
Dim bReturnOld As Boolean
bReturnOld = True
Select Case uMsg ' Utile pour plusieurs messages
Case WM_PASTE ' Dans le cas où on colle du texte
If Not IsNumeric(Clipboard.GetText) Then ' Si le texte dans le
presse papier n'est pas numérique
WndProc = 0 ' On renvoie une réponse négative: le texte ne
sera pas collé
bReturnOld = False
End If
End Select
' Si on ne veut pas redéfinir la valeur retournée, on retourne la
valeur
que retourne la procédure par défaut
If bReturnOld Then WndProc = CallWindowProc(colScControls("hwnd" &
Hwnd), Hwnd, uMsg, wParam, lParam)
End Function
Public Sub UnSubclass(hWindow As Long)
' Si un contrôle a déjà été souclassé
If IsMemberInCollection("hwnd" & hWindow, colScControls) Then
' Redéfinit la procédure à laquelle les messages doivent être
envoyés
SetWindowLong hWindow, GWL_WNDPROC, colScControls("hwnd" & hWindow)
' Supprime la référence à la fenêtre de la collection
colScControls.Remove "hwnd" & hWindow
End If
End Sub
Private Function IsMemberInCollection(Member, Collection As Collection) As
Boolean
Dim TempVal As Variant
On Error Resume Next
TempVal = Collection(Member)
IsMemberInCollection = (Err.Number = 0)
Err.Clear
End Function
'---------------------------------------------------------------------------
---
'DANS UN FORMULAIRE AYANT UN TEXTBOX NOMME Text1
'---------------------------------------------------------------------------
---
Option Explicit
Private Sub Form_Load()
Subclass Text1.Hwnd
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnSubclass Text1.Hwnd
End Sub
Private Sub Text1_Change()
End Sub
"Daniel AUBRY" <mail@daniel-aubry.com> a écrit dans le message de
news:430d84f8$0$2962$626a14ce@news.free.fr...
Bonjour à tous,
je souhaite interdire le COLLER dans un TextBox.
J'ai bien essayé la propriété Locked mais là je ne peux
plus saisir.
Ce que je souhaite, c'est obliger l'utilisateur à effectuer sa saisie.
Si quelqu'un a une p'tite idée, elle sera la bienvenue.
D'avance, merci.
Dany
Salut ;O)
La seule façon efficace est de sous-classer le contrôle Textbox.
Pour ce faire, il faut intercepter le message de type WM_PASTE qui est
envoyé au Textbox.
Quand interception il y a, on annule le message qui est envoyé au textbox
et
le tour est joué.
Voici un exemple tout prêt ci-dessous. Il faut un module et un formulaire
ayant un TextBox nommé Text1.
Bon amusement !
Guy
'---------------------------------------------------------------------------
---
'DANS UN MODULE :
'---------------------------------------------------------------------------
---
Option Explicit
' Déclaration des API
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA"
( _
ByVal Hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
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
Private Const GWL_WNDPROC = (-4)
Private Const WM_PASTE = &H302
' Variables utilisée par le programme
Private colScControls As New Collection
Public Sub Subclass(hWindow As Long)
Dim OldWndProc As Long
'Si aucun autre contrôle n'est déjà sousclassé
If IsMemberInCollection("hwnd" & hWindow, colScControls) = False Then
'Redéfinit la procédure à laquelle les messages doivent être
envoyés
OldWndProc = SetWindowLong(hWindow, GWL_WNDPROC, AddressOf WndProc)
'Ajoute le pointeur vers l'ancienne procédure à la collection
colScControls.Add OldWndProc, "hwnd" & hWindow
End If
End Sub
' Procédure appelé lorsqu'un nouveau message est à traiter
Private Function WndProc(ByVal Hwnd As Long, ByVal uMsg As Long, ByVal
wParam As Long, ByVal lParam As Long) As Long
' Booléen permettant de savoir s'il faut retourner la valeur par défaut
ou non
Dim bReturnOld As Boolean
bReturnOld = True
Select Case uMsg ' Utile pour plusieurs messages
Case WM_PASTE ' Dans le cas où on colle du texte
If Not IsNumeric(Clipboard.GetText) Then ' Si le texte dans le
presse papier n'est pas numérique
WndProc = 0 ' On renvoie une réponse négative: le texte ne
sera pas collé
bReturnOld = False
End If
End Select
' Si on ne veut pas redéfinir la valeur retournée, on retourne la
valeur
que retourne la procédure par défaut
If bReturnOld Then WndProc = CallWindowProc(colScControls("hwnd" &
Hwnd), Hwnd, uMsg, wParam, lParam)
End Function
Public Sub UnSubclass(hWindow As Long)
' Si un contrôle a déjà été souclassé
If IsMemberInCollection("hwnd" & hWindow, colScControls) Then
' Redéfinit la procédure à laquelle les messages doivent être
envoyés
SetWindowLong hWindow, GWL_WNDPROC, colScControls("hwnd" & hWindow)
' Supprime la référence à la fenêtre de la collection
colScControls.Remove "hwnd" & hWindow
End If
End Sub
Private Function IsMemberInCollection(Member, Collection As Collection) As
Boolean
Dim TempVal As Variant
On Error Resume Next
TempVal = Collection(Member)
IsMemberInCollection = (Err.Number = 0)
Err.Clear
End Function
'---------------------------------------------------------------------------
---
'DANS UN FORMULAIRE AYANT UN TEXTBOX NOMME Text1
'---------------------------------------------------------------------------
---
Option Explicit
Private Sub Form_Load()
Subclass Text1.Hwnd
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnSubclass Text1.Hwnd
End Sub
Private Sub Text1_Change()
End Sub
"Daniel AUBRY" a écrit dans le message de
news:430d84f8$0$2962$Bonjour à tous,
je souhaite interdire le COLLER dans un TextBox.
J'ai bien essayé la propriété Locked mais là je ne peux
plus saisir.
Ce que je souhaite, c'est obliger l'utilisateur à effectuer sa saisie.
Si quelqu'un a une p'tite idée, elle sera la bienvenue.
D'avance, merci.
Dany
Que de code !!!
Je pensais naïvement qu'on pouvait faire plus simple..............
Merci quand même, je vais mettre tout ceci en pratique dès ce soir.
Dany
"Guy DETIENNE" a écrit dans le message de news:
> Salut ;O)
>
> La seule façon efficace est de sous-classer le contrôle Textbox.
> Pour ce faire, il faut intercepter le message de type WM_PASTE qui est
> envoyé au Textbox.
> Quand interception il y a, on annule le message qui est envoyé au
> et
> le tour est joué.
>
> Voici un exemple tout prêt ci-dessous. Il faut un module et un
> ayant un TextBox nommé Text1.
>
> Bon amusement !
>
> Guy
>
>
> ---
> 'DANS UN MODULE :
>
> ---
> Option Explicit
>
> ' Déclaration des API
> Private Declare Function SetWindowLong Lib "user32" Alias
> ( _
> ByVal Hwnd As Long, _
> ByVal nIndex As Long, _
> ByVal dwNewLong As Long) As Long
> 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
>
> Private Const GWL_WNDPROC = (-4)
> Private Const WM_PASTE = &H302
>
> ' Variables utilisée par le programme
> Private colScControls As New Collection
>
> Public Sub Subclass(hWindow As Long)
>
> Dim OldWndProc As Long
>
> 'Si aucun autre contrôle n'est déjà sousclassé
> If IsMemberInCollection("hwnd" & hWindow, colScControls) = False Then
> 'Redéfinit la procédure à laquelle les messages doivent être
> envoyés
> OldWndProc = SetWindowLong(hWindow, GWL_WNDPROC, AddressOf
> 'Ajoute le pointeur vers l'ancienne procédure à la collection
> colScControls.Add OldWndProc, "hwnd" & hWindow
> End If
>
> End Sub
>
> ' Procédure appelé lorsqu'un nouveau message est à traiter
> Private Function WndProc(ByVal Hwnd As Long, ByVal uMsg As Long, ByVal
> wParam As Long, ByVal lParam As Long) As Long
>
> ' Booléen permettant de savoir s'il faut retourner la valeur par
> ou non
> Dim bReturnOld As Boolean
>
> bReturnOld = True
>
> Select Case uMsg ' Utile pour plusieurs messages
> Case WM_PASTE ' Dans le cas où on colle du texte
> If Not IsNumeric(Clipboard.GetText) Then ' Si le texte dans
> presse papier n'est pas numérique
> WndProc = 0 ' On renvoie une réponse négative: le texte
> sera pas collé
> bReturnOld = False
> End If
> End Select
>
> ' Si on ne veut pas redéfinir la valeur retournée, on retourne la
> valeur
> que retourne la procédure par défaut
> If bReturnOld Then WndProc = CallWindowProc(colScControls("hwnd" &
> Hwnd), Hwnd, uMsg, wParam, lParam)
>
> End Function
>
> Public Sub UnSubclass(hWindow As Long)
>
> ' Si un contrôle a déjà été souclassé
> If IsMemberInCollection("hwnd" & hWindow, colScControls) Then
> ' Redéfinit la procédure à laquelle les messages doivent être
> envoyés
> SetWindowLong hWindow, GWL_WNDPROC, colScControls("hwnd" &
> ' Supprime la référence à la fenêtre de la collection
> colScControls.Remove "hwnd" & hWindow
> End If
>
> End Sub
>
> Private Function IsMemberInCollection(Member, Collection As Collection)
> Boolean
>
> Dim TempVal As Variant
>
> On Error Resume Next
> TempVal = Collection(Member)
> IsMemberInCollection = (Err.Number = 0)
> Err.Clear
>
> End Function
>
>
>
>
> ---
> 'DANS UN FORMULAIRE AYANT UN TEXTBOX NOMME Text1
>
> ---
> Option Explicit
>
> Private Sub Form_Load()
> Subclass Text1.Hwnd
> End Sub
>
> Private Sub Form_Unload(Cancel As Integer)
> UnSubclass Text1.Hwnd
> End Sub
>
> Private Sub Text1_Change()
>
> End Sub
>
>
>
>
> "Daniel AUBRY" a écrit dans le message de
> news:430d84f8$0$2962$
>> Bonjour à tous,
>>
>> je souhaite interdire le COLLER dans un TextBox.
>> J'ai bien essayé la propriété Locked mais là je ne peux
>> plus saisir.
>> Ce que je souhaite, c'est obliger l'utilisateur à effectuer sa saisie.
>>
>> Si quelqu'un a une p'tite idée, elle sera la bienvenue.
>>
>> D'avance, merci.
>>
>> Dany
>>
>>
>
>
Que de code !!!
Je pensais naïvement qu'on pouvait faire plus simple..............
Merci quand même, je vais mettre tout ceci en pratique dès ce soir.
Dany
"Guy DETIENNE" <gd@NOSPAM.tchao.be> a écrit dans le message de news:
uE7OksYqFHA.3136@TK2MSFTNGP11.phx.gbl...
> Salut ;O)
>
> La seule façon efficace est de sous-classer le contrôle Textbox.
> Pour ce faire, il faut intercepter le message de type WM_PASTE qui est
> envoyé au Textbox.
> Quand interception il y a, on annule le message qui est envoyé au
> et
> le tour est joué.
>
> Voici un exemple tout prêt ci-dessous. Il faut un module et un
> ayant un TextBox nommé Text1.
>
> Bon amusement !
>
> Guy
>
>
> ---
> 'DANS UN MODULE :
>
> ---
> Option Explicit
>
> ' Déclaration des API
> Private Declare Function SetWindowLong Lib "user32" Alias
> ( _
> ByVal Hwnd As Long, _
> ByVal nIndex As Long, _
> ByVal dwNewLong As Long) As Long
> 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
>
> Private Const GWL_WNDPROC = (-4)
> Private Const WM_PASTE = &H302
>
> ' Variables utilisée par le programme
> Private colScControls As New Collection
>
> Public Sub Subclass(hWindow As Long)
>
> Dim OldWndProc As Long
>
> 'Si aucun autre contrôle n'est déjà sousclassé
> If IsMemberInCollection("hwnd" & hWindow, colScControls) = False Then
> 'Redéfinit la procédure à laquelle les messages doivent être
> envoyés
> OldWndProc = SetWindowLong(hWindow, GWL_WNDPROC, AddressOf
> 'Ajoute le pointeur vers l'ancienne procédure à la collection
> colScControls.Add OldWndProc, "hwnd" & hWindow
> End If
>
> End Sub
>
> ' Procédure appelé lorsqu'un nouveau message est à traiter
> Private Function WndProc(ByVal Hwnd As Long, ByVal uMsg As Long, ByVal
> wParam As Long, ByVal lParam As Long) As Long
>
> ' Booléen permettant de savoir s'il faut retourner la valeur par
> ou non
> Dim bReturnOld As Boolean
>
> bReturnOld = True
>
> Select Case uMsg ' Utile pour plusieurs messages
> Case WM_PASTE ' Dans le cas où on colle du texte
> If Not IsNumeric(Clipboard.GetText) Then ' Si le texte dans
> presse papier n'est pas numérique
> WndProc = 0 ' On renvoie une réponse négative: le texte
> sera pas collé
> bReturnOld = False
> End If
> End Select
>
> ' Si on ne veut pas redéfinir la valeur retournée, on retourne la
> valeur
> que retourne la procédure par défaut
> If bReturnOld Then WndProc = CallWindowProc(colScControls("hwnd" &
> Hwnd), Hwnd, uMsg, wParam, lParam)
>
> End Function
>
> Public Sub UnSubclass(hWindow As Long)
>
> ' Si un contrôle a déjà été souclassé
> If IsMemberInCollection("hwnd" & hWindow, colScControls) Then
> ' Redéfinit la procédure à laquelle les messages doivent être
> envoyés
> SetWindowLong hWindow, GWL_WNDPROC, colScControls("hwnd" &
> ' Supprime la référence à la fenêtre de la collection
> colScControls.Remove "hwnd" & hWindow
> End If
>
> End Sub
>
> Private Function IsMemberInCollection(Member, Collection As Collection)
> Boolean
>
> Dim TempVal As Variant
>
> On Error Resume Next
> TempVal = Collection(Member)
> IsMemberInCollection = (Err.Number = 0)
> Err.Clear
>
> End Function
>
>
>
>
> ---
> 'DANS UN FORMULAIRE AYANT UN TEXTBOX NOMME Text1
>
> ---
> Option Explicit
>
> Private Sub Form_Load()
> Subclass Text1.Hwnd
> End Sub
>
> Private Sub Form_Unload(Cancel As Integer)
> UnSubclass Text1.Hwnd
> End Sub
>
> Private Sub Text1_Change()
>
> End Sub
>
>
>
>
> "Daniel AUBRY" <mail@daniel-aubry.com> a écrit dans le message de
> news:430d84f8$0$2962$626a14ce@news.free.fr...
>> Bonjour à tous,
>>
>> je souhaite interdire le COLLER dans un TextBox.
>> J'ai bien essayé la propriété Locked mais là je ne peux
>> plus saisir.
>> Ce que je souhaite, c'est obliger l'utilisateur à effectuer sa saisie.
>>
>> Si quelqu'un a une p'tite idée, elle sera la bienvenue.
>>
>> D'avance, merci.
>>
>> Dany
>>
>>
>
>
Que de code !!!
Je pensais naïvement qu'on pouvait faire plus simple..............
Merci quand même, je vais mettre tout ceci en pratique dès ce soir.
Dany
"Guy DETIENNE" a écrit dans le message de news:
> Salut ;O)
>
> La seule façon efficace est de sous-classer le contrôle Textbox.
> Pour ce faire, il faut intercepter le message de type WM_PASTE qui est
> envoyé au Textbox.
> Quand interception il y a, on annule le message qui est envoyé au
> et
> le tour est joué.
>
> Voici un exemple tout prêt ci-dessous. Il faut un module et un
> ayant un TextBox nommé Text1.
>
> Bon amusement !
>
> Guy
>
>
> ---
> 'DANS UN MODULE :
>
> ---
> Option Explicit
>
> ' Déclaration des API
> Private Declare Function SetWindowLong Lib "user32" Alias
> ( _
> ByVal Hwnd As Long, _
> ByVal nIndex As Long, _
> ByVal dwNewLong As Long) As Long
> 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
>
> Private Const GWL_WNDPROC = (-4)
> Private Const WM_PASTE = &H302
>
> ' Variables utilisée par le programme
> Private colScControls As New Collection
>
> Public Sub Subclass(hWindow As Long)
>
> Dim OldWndProc As Long
>
> 'Si aucun autre contrôle n'est déjà sousclassé
> If IsMemberInCollection("hwnd" & hWindow, colScControls) = False Then
> 'Redéfinit la procédure à laquelle les messages doivent être
> envoyés
> OldWndProc = SetWindowLong(hWindow, GWL_WNDPROC, AddressOf
> 'Ajoute le pointeur vers l'ancienne procédure à la collection
> colScControls.Add OldWndProc, "hwnd" & hWindow
> End If
>
> End Sub
>
> ' Procédure appelé lorsqu'un nouveau message est à traiter
> Private Function WndProc(ByVal Hwnd As Long, ByVal uMsg As Long, ByVal
> wParam As Long, ByVal lParam As Long) As Long
>
> ' Booléen permettant de savoir s'il faut retourner la valeur par
> ou non
> Dim bReturnOld As Boolean
>
> bReturnOld = True
>
> Select Case uMsg ' Utile pour plusieurs messages
> Case WM_PASTE ' Dans le cas où on colle du texte
> If Not IsNumeric(Clipboard.GetText) Then ' Si le texte dans
> presse papier n'est pas numérique
> WndProc = 0 ' On renvoie une réponse négative: le texte
> sera pas collé
> bReturnOld = False
> End If
> End Select
>
> ' Si on ne veut pas redéfinir la valeur retournée, on retourne la
> valeur
> que retourne la procédure par défaut
> If bReturnOld Then WndProc = CallWindowProc(colScControls("hwnd" &
> Hwnd), Hwnd, uMsg, wParam, lParam)
>
> End Function
>
> Public Sub UnSubclass(hWindow As Long)
>
> ' Si un contrôle a déjà été souclassé
> If IsMemberInCollection("hwnd" & hWindow, colScControls) Then
> ' Redéfinit la procédure à laquelle les messages doivent être
> envoyés
> SetWindowLong hWindow, GWL_WNDPROC, colScControls("hwnd" &
> ' Supprime la référence à la fenêtre de la collection
> colScControls.Remove "hwnd" & hWindow
> End If
>
> End Sub
>
> Private Function IsMemberInCollection(Member, Collection As Collection)
> Boolean
>
> Dim TempVal As Variant
>
> On Error Resume Next
> TempVal = Collection(Member)
> IsMemberInCollection = (Err.Number = 0)
> Err.Clear
>
> End Function
>
>
>
>
> ---
> 'DANS UN FORMULAIRE AYANT UN TEXTBOX NOMME Text1
>
> ---
> Option Explicit
>
> Private Sub Form_Load()
> Subclass Text1.Hwnd
> End Sub
>
> Private Sub Form_Unload(Cancel As Integer)
> UnSubclass Text1.Hwnd
> End Sub
>
> Private Sub Text1_Change()
>
> End Sub
>
>
>
>
> "Daniel AUBRY" a écrit dans le message de
> news:430d84f8$0$2962$
>> Bonjour à tous,
>>
>> je souhaite interdire le COLLER dans un TextBox.
>> J'ai bien essayé la propriété Locked mais là je ne peux
>> plus saisir.
>> Ce que je souhaite, c'est obliger l'utilisateur à effectuer sa saisie.
>>
>> Si quelqu'un a une p'tite idée, elle sera la bienvenue.
>>
>> D'avance, merci.
>>
>> Dany
>>
>>
>
>
Salut ;O)
La seule façon efficace est de sous-classer le contrôle Textbox.
Pour ce faire, il faut intercepter le message de type WM_PASTE qui est
envoyé au Textbox.
Quand interception il y a, on annule le message qui est envoyé au textbox
le tour est joué.
Salut ;O)
La seule façon efficace est de sous-classer le contrôle Textbox.
Pour ce faire, il faut intercepter le message de type WM_PASTE qui est
envoyé au Textbox.
Quand interception il y a, on annule le message qui est envoyé au textbox
le tour est joué.
Salut ;O)
La seule façon efficace est de sous-classer le contrôle Textbox.
Pour ce faire, il faut intercepter le message de type WM_PASTE qui est
envoyé au Textbox.
Quand interception il y a, on annule le message qui est envoyé au textbox
le tour est joué.