Page 1 sur 1

[ Resolu] Copier coller et StringGadget

Publié : sam. 14/mars/2009 17:02
par MLD
Bonjours a tous
Une petite question: Comment empecher un utilisateur de faire du copier coller dans un StringGadget, sans que celui ci soit ReadOnly, car l'utilisateur doit pouvoir entré du texte au clavier??

Re: Copier coller et StringGadget

Publié : sam. 14/mars/2009 17:24
par Backup
MLD a écrit :Bonjours a tous
Une petite question: Comment empecher un utilisateur de faire du copier coller dans un StringGadget, sans que celui ci soit ReadOnly, car l'utilisateur doit pouvoir entré du texte au clavier??
facile ! tu vide le presse papier :)

avec un ClearClipboard()
a chaque tour de boucle :D ça devrai le faire

Re: Copier coller et StringGadget

Publié : sam. 14/mars/2009 18:25
par MLD
Dobro a écrit :
MLD a écrit :Bonjours a tous
Une petite question: Comment empecher un utilisateur de faire du copier coller dans un StringGadget, sans que celui ci soit ReadOnly, car l'utilisateur doit pouvoir entré du texte au clavier??
facile ! tu vide le presse papier :)

avec un ClearClipboard()
a chaque tour de boucle :D ça devrai le faire
Merci Dobro. Mais dans mon programe il ya aussi des StringGadget (s),ou la possibilité du copier coller doit être possible.
Peut être avec les API il y a moyen de bloquer le Clipboard pour un gaget spécifique?

Re: Copier coller et StringGadget

Publié : sam. 14/mars/2009 18:31
par Ar-S
MLD a écrit :
Dobro a écrit :
MLD a écrit :Bonjours a tous
Une petite question: Comment empecher un utilisateur de faire du copier coller dans un StringGadget, sans que celui ci soit ReadOnly, car l'utilisateur doit pouvoir entré du texte au clavier??
facile ! tu vide le presse papier :)

avec un ClearClipboard()
a chaque tour de boucle :D ça devrai le faire
Merci Dobro. Mais dans mon programe il ya aussi des StringGadget (s),ou la possibilité du copier coller doit être possible.
Peut être avec les API il y a moyen de bloquer le Clipboard pour un gaget spécifique?
ça devrait fonctionner si tu chopes le gadget actif avec un getgadgetstate.
Le string gadget est actif, alors tu vides le clipboard (avec clearcliboard() ) s'il est différent de "" et/ou si CTRL+C est activé. (un timer ou thread et ça devrait marcher)

Publié : sam. 14/mars/2009 18:33
par Backup
c'est simple :)

tu as tout ce qu'il te faut avec la librairie clipboard()

tu n'a qu'a récupérer dans une variable le contenue du clipboard, si le stringgadget autorisé en question a le focus ! :)


et si c'est pas le stringgadget que tu veux, qui a le focus, ben tu ne recupere pas dans la fameuse variable le contenu du clipboard !

et tu te sert de cette variable pour remplir le clipboard avec un SetClipboardText(Texte$)


voila :)

Publié : sam. 14/mars/2009 18:59
par MLD
Dobro a écrit :c'est simple :)

tu as tout ce qu'il te faut avec la librairie clipboard()

tu n'a qu'a récupérer dans une variable le contenue du clipboard, si le stringgadget autorisé en question a le focus ! :)


et si c'est pas le stringgadget que tu veux, qui a le focus, ben tu ne recupere pas dans la fameuse variable le contenu du clipboard !

et tu te sert de cette variable pour remplir le clipboard avec un SetClipboardText(Texte$)


voila :)
Encore merci Dobro. Mais sur ce coup la, je n'ai pas percuter dans ce sens
Bon WE

Publié : sam. 14/mars/2009 19:11
par Backup
pourtant si tu y reflechi

pour faire un copier a partir d'un string t'es obligé de faire que ce gadget ait le focus !!

donc a partir de la tu peux choisir si tu accepte de recuperer le clipboard ou pas ou meme de le vider !

Les évènements suivants sont disponibles par l'intermédiaire d'EventType():

#PB_EventType_Change : Le texte a été modifié par l'utilisateur.
#PB_EventType_Focus : Le StringGadget obtient le focus.
#PB_EventType_LostFocus : Le StringGadget a perdu le focus.

Publié : sam. 14/mars/2009 21:31
par nico
Avec les API, voilà ce que ça donne:

Code : Tout sélectionner

 Procedure NouvelleProc( hWnd.l, Msg.l,  wParam.l, lParam.l)
    Protected OriginProc.l

    ;Ici on récupère l'adresse d'origine de la procédure grâce à la
    ;chaine qui l'identifie: "OriginProc" et le handle de la fenêtre
    ;voir la fonction SetProp_(...).
    OriginProc= GetProp_(hWnd, "OriginProc")

    Select Msg
        Case #WM_RBUTTONUP
            ;Ici on supprime le menu contextuel
            MessageRequester("Info","Le menu contextuel n'existe pas pour ce champ!")
            ProcedureReturn 0
            
        Case #WM_PASTE,#WM_COPY
            MessageRequester("Info","Il est interdit de copier ou de coller du texte dans ce champ!")
            ProcedureReturn 0    
        
        Case #WM_NCDESTROY
            ;Remettre la procédure d'origine
            SetWindowLong_(hWnd, #GWL_WNDPROC, OriginProc)
            ;Supprimer la donnée associée à la fenêtre.
            RemoveProp_(hWnd,"OriginProc")
            
  EndSelect
  ;On renvoie tous les autres évènements à la procédure d'origine.
  ProcedureReturn CallWindowProc_(OriginProc,hWnd,Msg,wParam,lParam)
EndProcedure    



 If OpenWindow(0, 0, 0, 322, 205, "Les options de StringGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    StringGadget(0, 8,  10, 306, 20, "Copier coller possible...")
    StringGadget(1, 8,  35, 306, 20, "Copier coller impossible...")    
    
    ;Avec cette fonction, on récupère l'adresse d'origine de la procédure
    ;pour ensuite la restituer, une fois le traitement terminé.
    OriginProc = SetWindowLong_(GadgetID(1), #GWL_WNDPROC, @NouvelleProc())
   
    ;Cette fonction est très utile car elle permet d'associer une nouvelle donnée
    ;à n'importe quelles fenêtres créées en utlisant une chaine de caractère pour
    ;l'identification; ça évite d'utiliser une valeur globale.
    ;Ici on associe la valeur OriginProc identifiée par la chaine "OriginProc"
    ;au StringGadget
    SetProp_(GadgetID(1), "OriginProc", OriginProc) 
  
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

Publié : lun. 16/mars/2009 8:42
par MLD
Bonjours a tous:
Merci Nico super. Avec la solution de Dobro, cela donne deux possiblités a mois de choisir.
Bonne journée