Intercepter une tentative de collage dans l'éditeur?

Sujets variés concernant le développement en PureBasic
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Intercepter une tentative de collage dans l'éditeur?

Message par nico »

Salut,

Comment intercepter une tentative de collage dans un éditeur?
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

Message par Lna »

Si l'éditeur n'est pas sous ton contrôle, il ne reste que le hook. 8O

wh_callwndproc ? wh_getmessage ? :roll:

http://tcharles.developpez.com/simul/

Il ne reste plus qu'à tester celui qui fait quoi. 8)

@ peluche
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

ou avec #WM_PASTE ?
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Je pencherais plus sur #WM_PASTE !
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

J'ai essayé de récupérer cet évènement mais je n'ai rien !
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

Message par Lna »

Un EditorGadget ne reçoit pas de #WM_PASTE après un ctrl+v. 8O
#WM_CHAR + wParam=22 détecte un ctrl+v, mais après la bataille. :roll:

J'ai modifié ce programme pour faire vite. 8O

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 
@ peluche
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

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...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

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:

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 
Répondre