[ Resolu] Copier coller et StringGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

[ Resolu] Copier coller et StringGadget

Message 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??
Dernière modification par MLD le lun. 16/mars/2009 8:38, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Copier coller et StringGadget

Message 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
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Copier coller et StringGadget

Message 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?
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Copier coller et StringGadget

Message 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)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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 :)
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

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