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

ç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

ç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

ç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