Intercepter une tentative de collage dans l'éditeur?
Intercepter une tentative de collage dans l'éditeur?
Salut,
Comment intercepter une tentative de collage dans un éditeur?
Comment intercepter une tentative de collage dans un éditeur?
Si l'éditeur n'est pas sous ton contrôle, il ne reste que le hook.
wh_callwndproc ? wh_getmessage ?
http://tcharles.developpez.com/simul/
Il ne reste plus qu'à tester celui qui fait quoi.
@ peluche

wh_callwndproc ? wh_getmessage ?

http://tcharles.developpez.com/simul/
Il ne reste plus qu'à tester celui qui fait quoi.

@ peluche
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Je pencherais plus sur #WM_PASTE !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
Un EditorGadget ne reçoit pas de #WM_PASTE après un ctrl+v.
#WM_CHAR + wParam=22 détecte un ctrl+v, mais après la bataille.
J'ai modifié ce programme pour faire vite.
http://www.purebasic.fr/french/viewtopi ... classement
A tester avec ctrl+v pour voir.
@ peluche

#WM_CHAR + wParam=22 détecte un ctrl+v, mais après la bataille.

J'ai modifié ce programme pour faire vite.

http://www.purebasic.fr/french/viewtopi ... classement
A tester avec ctrl+v pour voir.
Code : Tout sélectionner
;------------------------------------------------------
;Window et Gadget
;------------------------------------------------------
Enumeration
#MainForm
#EdtTelephone
EndEnumeration
;------------------------------------------------------
;Variables globales
;------------------------------------------------------
;handle de la fenetre
Global hWnd.l
;handle de l'editbox (peut etre recupere avec gadgetid())
Global hEdtTelephone.l
;proc normale de l'editbox
Global EdtTelephoneOldProc.l
global Quit.b ;= #False
;------------------------------------------------------
;Procedure de sous classement
;------------------------------------------------------
Procedure EdtTelephoneWndProc(WindowID, Message, wParam, lParam)
Select Message
Case #WM_GETTEXT
; debug "#WM_GETTEXT"
; debug GetClipboardText()
; SetClipboardText("modif avant") ; Contenu Clipboard encore modifiable ici
Case #WM_CHAR
debug "#WM_CHAR"
IF wParam=22
debug "CTRL C"
debug GetClipboardText()
SetClipboardText("modif après") ; Contenu Clipboard modifié pour la prochaine fois
ENDIF
Case #WM_PASTE
Debug "#WM_PASTE"
Case #WM_KEYDOWN
chaine$=GetGadgetText(#EdtTelephone)
If wParam = #VK_RETURN
If Len(chaine$) >8
SetGadgetText(#EdtTelephone, Mid(chaine$, 0, 2) +"-"+Mid(chaine$, 3, 2) +"-" +Mid(chaine$, 5, 2) +"-" +Mid(chaine$,7, 2) +"-" +Mid(chaine$, 9, 2) )
SendMessage_(WindowID,#EM_SETSEL,0,15)
ProcedureReturn 0
EndIf
EndIf
EndSelect
ProcedureReturn CallWindowProc_(EdtTelephoneOldProc, WindowID, Message, wParam, lParam)
EndProcedure
;------------------------------------------------------
;Debut de programme
;------------------------------------------------------
hWnd = OpenWindow(#MainForm, 0, 0, 322, 150,"SousClassement", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
If hWnd
If CreateGadgetList(WindowID(#MainForm))
hEdtTelephone = EditorGadget(#EdtTelephone,8,8,306,133)
; hEdtTelephone = StringGadget(#EdtTelephone, 10,10, 200, 20,"", #PB_String_Numeric)
EdtTelephoneOldProc = SetWindowLong_(hEdtTelephone, #GWL_WNDPROC, @EdtTelephoneWndProc())
EndIf
EndIf
SetClipboardText("test") ; Init contenu Clipboard
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_CloseWindow
Quit = #True
EndSelect
Until Quit = #True
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
C'était peut-être pas le but du prog, mais y' a un bon ptt bug (sauf si c'est ce que le programme doit faire) :
Quand on appuie sur ENTRER. au bout de plusieurs fois (alors qu'il y a du texte), ca fait n'importe quoi...
Quand on appuie sur ENTRER. au bout de plusieurs fois (alors qu'il y a du texte), ca fait n'importe quoi...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
Lna,
J'en était arrivé au même essais que toi, #WM_KEYDOWN permet aussi de bloquer l'entrée clavier et on peut connaitre si les touches ctrl+v sont saisi avec GetAsyncKeyState_(..) mais je préfère cette solution que je viens de trouver:
J'en était arrivé au même essais que toi, #WM_KEYDOWN permet aussi de bloquer l'entrée clavier et on peut connaitre si les touches ctrl+v sont saisi avec GetAsyncKeyState_(..) mais je préfère cette solution que je viens de trouver:
Code : Tout sélectionner
Enumeration
#MainForm
EndEnumeration
Enumeration
#Edit
#Edit2
EndEnumeration
Enumeration
#ID_CTRL_V
EndEnumeration
hWnd = OpenWindow(#MainForm, 0, 0, 430, 250,"SousClassement", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
If hWnd
If CreateGadgetList(WindowID(#MainForm))
EditorGadget(#Edit,10,10,200,200)
EditorGadget(#Edit2,220,10,200,200)
StringGadget(10,10,220,400,20,"Copier ce texte et essayer de le coller dans les deux éditeurs")
EndIf
EndIf
AddKeyboardShortcut(#MainForm, #PB_Shortcut_Control|#PB_Shortcut_V, #ID_CTRL_V)
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case #ID_CTRL_V
Debug "coller"
If GetActiveGadget()=#Edit2
SendMessage_(GadgetID(#Edit2),#WM_PASTE,0,0)
EndIf
EndSelect
Case #PB_Event_CloseWindow
Quit = #True
EndSelect
Until Quit = #True