bouv
Messages postés1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 2019
-
24 mars 2005 à 23:19
danielgrd
Messages postés47Date d'inscriptionmercredi 15 janvier 2003StatutMembreDernière intervention22 juin 2005
-
18 juin 2005 à 21:52
Bonjour,
J'aimerai savoir s'il existe un moyen d'interdire la fonction Coller sur une textbox.
Je veux interdire certain caractères. Je les ai bloqué dans la fonction KeyPress
Mais je viens de me rendre compte que l'on peut contourner le pb avec un copier/coller
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 25 mars 2005 à 09:26
Salut,
pas besoin de hook, un vulgaire sous classement de fenêtre suffira. Vous essaierez vous mêmes la traduction VB, c'est pas mon truc.
Une variable globale dans le module:
WNDPROC oldProcEd; // en C
en VB: Dim oldProcEd As Long ' devrait aller
la fonction callback, laisse passer tous les messages à l'exception de WM_PASTE:
LRESULT CALLBACK EdProcNoPaste(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam)
{
if(mssg == WM_PASTE) return 0;
return CallWindowProc(oldProcEd, hwnd, mssg, wParam, lParam);
}
Dans votre FormLoad, initialiser le pointeur de fonction en changeant le callback original du EDIT pour qu'il aille sur la nouvelle:
oldProcEd = (WNDPROC) SetWindowLong(votreEdit.hwnd, GWL_WNDPROC, (long) EdProcNoPaste);
bouv
Messages postés1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 20191 28 mars 2005 à 12:54
Ok merci a tous les deux je vais essayer de mettre ça en place. Je pense que la solution de BruNews est plus appropriée étant donné que j'utilise un control utilisateur.
J'espere juste etre capable de mettre ça en place.
bouv
Messages postés1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 20191 28 mars 2005 à 14:40
Yes j'ai reussi mais pas sans mal.
Merci BruNews et merci à Renfield pour sa superbe DLL.
Merci également à DARKSIDIOUS même si je n'ai pas retenu son idée.
Bonne prog
++
Vous n’avez pas trouvé la réponse que vous recherchez ?
danielgrd
Messages postés47Date d'inscriptionmercredi 15 janvier 2003StatutMembreDernière intervention22 juin 2005 31 mai 2005 à 14:28
Je suis beaucoup intéressé par ce bout de code... Par contre, est-ce
que quelqun pourrait faire la conversion en VB, soit Bouv ou autre.
Parceque je comprend pas trop ce langage...
Merci d'avance!
--------------
la fonction callback, laisse passer tous les messages à l'exception de WM_PASTE:
bouv
Messages postés1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 20191 1 juin 2005 à 15:11
danielgrd>>
J'ai utilisé la DLL de Renfield ReySubclasser que tu trouvera assez facilement sur ce site.
Le code que j'utilise :
Dim WithEvents SubClasser As ReySubClasser
Private Sub Form_Initialize()
'On initialise le sous classement
Set SubClasser = New ReySubClasser
call SubClasser.Controls.Add (TxtBox.hWnd)
call SubClasser.Messages.Add (WM_PASTE)
call SubClasser.StartSubClassing
End Sub
'On arrete le sous classement
Private Sub Form_Terminate()
call SubClasser.StopSubClassing
Set SubClasser = Nothing
End Sub
'On recupere le message de sous classement et on le traite
Private Sub SubClasser_Msg1(ByVal hWnd As Long, ByVal uMsg As Rey_SubClasser.MessageConstants, ByVal wParam As Long, ByVal lParam As Long, MsgBehavior As Rey_SubClasser.MsgBehaviorConstants, RetValue As Long, ByVal OldProc As Long)
'Si on recupere l'evenement COLLER on vide le presse-papier
If uMsg = WM_PASTE Then Call Clipboard.SetText ("")
End Sub
danielgrd
Messages postés47Date d'inscriptionmercredi 15 janvier 2003StatutMembreDernière intervention22 juin 2005 6 juin 2005 à 16:22
Bonjour Bouv,
Merci pour la réponse... Je ne l'avais pa vue!
J'ai par contre une question, comment je fais pour incorporer la .DLL
de Renfield dans mon projet? J'ai trouvé le Dll mais pas comment
l'insérer dans un projet...
danielgrd
Messages postés47Date d'inscriptionmercredi 15 janvier 2003StatutMembreDernière intervention22 juin 2005 17 juin 2005 à 22:57
Bonjour,
Mon programme, une fois compilé en .EXE à toujours bien fonctionné... Mais je l'avais toujours testé sur le même ordinateur...
Il y a quelques jours j'ai décidé de le tester sur un autre ordi...
Et là, avant même que mon logiciel s'exécute, j'obtiens le message d'erreur suivant :
'Vous ne disposez pas de la licence appropriée pour utiliser cette fonctionnalité'
Et ensuite cela quitte....
Après des d'intenses recherches, j'en suis venu à l'évidence que le problème viens de ici:
------------------
Private Sub Form_Initialize()
If SIP2 = 0 Then
Set SubClasser = New ReySubClasser
Call SubClasser.Controls.Add(Text_Msg.hWnd)
Call SubClasser.Controls.Add(Text_Sujet.hWnd)
Call SubClasser.Messages.Add(WM_PASTE)
Call SubClasser.StartSubClassing
End If
End Sub
----------------
En effet, lorsque je supprime cette partie ou la remplace par n'importe quoi d'autre:
----------
Set SubClasser = New ReySubClasser
Call SubClasser.Controls.Add(Text_Msg.hWnd)
Call SubClasser.Controls.Add(Text_Sujet.hWnd)
Call SubClasser.Messages.Add(WM_PASTE)
Call SubClasser.StartSubClassing
------------
Mon programme s'ouvre et aucun problème à l'horizon...
C'est bizarre parcequ'il ne s'agit pas d'un problème de .DLL parcequ'en
supprimant ces 5 lignes j'ai laissé la référence Rey_Subclasser
(rey_subclasser.dll) dans mon prog....
J'ai essayé d'effacer ligne par ligne les 4 dernières lignes pour voir
si ce n'était que l'une d'elle qui causait le problème mais en vain...
L'erreur persiste... Cela doit donc provenir de la 1ere ligne et donc
il faut absolument supprimer les 5 lignes...
J'ai essayé de le faire exécuter lors du chargement (Form_Load) au lieu
de avant (Form_Initialize), je ne sais pas si cela aurais quand même
fonctionné, mais de toute manière j'obtient une autre erreur : Erreur
d'exécution 429... Et même en se consacrant à résoudre cette deuxième
erreur on ne sais pas si la première referra son apparition par
après...!!!
Donc mieux vaut, à mon avis, se consacrer qu'à la première erreur...
En tout cas... Je vais aller réécrire ce post dans les commentaires de
la source officielle Rey_SubClasser de Renfield... Au cas ou...
danielgrd
Messages postés47Date d'inscriptionmercredi 15 janvier 2003StatutMembreDernière intervention22 juin 2005 18 juin 2005 à 20:47
Ah et bien c'est sûrement cela... Je viens de tester et maintenant ça marche!!!
Je te remerci!!!
Est-il possible faire enregistrer la DLL en language Visual Basic?
(Par exemple ce qui serait facile a faire, dans un fichier .INI
indiquer si la DLL a été enregistré si elle ne l'est pas et bien
l'enregistrer pour ensuite indiquer dans le .INI qu'elle l'a étée...)
Mais est-il possible d'effectuer la commande Regsvr32 en Visual Basic???