Salut
mes amis comment faire pour désactiver copier /coller dans un Tedit.
Et merci
Salut
mes amis comment faire pour désactiver copier /coller dans un Tedit.
Et merci
Salut
Je ne sais pas si c'est possible, en tout cas j'en ai pas entendu parler.
Sinon tu peux peut être utiliser l'événement OnChange du Tedit.
Par exemple si t'as une variable qui mémorise la valeur actuelle du Tedit :
Tu initialises cette variable avec la valeur du Tedit.
Puis dans l'événement OnChange, tu compares la longueur de la variable avec la nouvelle valeur du Tedit.
Si il y a une différence de nombre de caractère supérieure à 1, alors il y a eu un "copier coller".
Et tu peux remplacer la valeur du Tedit par ta variable pour revenir a l'état précédent comme si il n'y avait pas eu de "copier coller".
Si la différence n'était que de 1, là tu écrases la valeur de la variable par la nouvelle valeur du Tedit.
En espérant ne pas t'avoir embrouillé xD
Ça fait peut être un peu bidouille par rapport a une solution magique qui interdirait le copier coller, mais si ça peut t'aider quand même
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109 unit unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, stdctrls; type { TEdit overclass ---------------------------- } TEditOption = (eoAllowEdit, eoAllowContextMenu, eoAllowCopy, eoAllowPaste, eoAllowCut, eoAllowUndo); { eoAllowEdit : permet d'activer ou non la saisie au clavier eoAllowContextMenu : permet d'activer ou non le menu contextuel par defaut eoAllowCopy : permet d'activer ou non le raccourcis CTRL+C (copier) eoAllowPaste: permet d'activer ou non le raccourcis CTRL+V (coller) eoAllowCut : permet d'activer ou non le raccourcis CTRL+X (couper) eoAllowUndo: permet d'activer ou non le raccourcis CTRL+Z (annuler) } TEditOptions = set of TEditOption; TEdit = Class(StdCtrls.TEdit) private FEditOptions : TEditOptions; procedure WMChar(var Message: TWMChar); message WM_CHAR; procedure WMContextMenu(var Message: TWMContextMenu); message WM_CONTEXTMENU; procedure WMPaste(var Message); message WM_PASTE; procedure WMCopy(var Message); message WM_COPY; procedure WMCut(var Message); message WM_CUT; procedure WMUndo(var Message); message WM_UNDO; public constructor Create(AOwner : TComponent); override; Property EditOptions : TEditOptions Read FEditOptions Write FEditOptions default [eoAllowEdit, eoAllowContextMenu, eoAllowCopy, eoAllowPaste, eoAllowCut, eoAllowUndo]; end; { --------------------------------- } TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; procedure FormCreate(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} { TEdit overclass } constructor TEdit.Create(AOwner : TComponent); begin inherited create(AOwner); FEditOptions := [eoAllowEdit, eoAllowContextMenu, eoAllowCopy, eoAllowPaste, eoAllowCut, eoAllowUndo]; end; procedure TEdit.WMChar(var Message: TWMChar); begin if eoAllowEdit in FEditOptions Then Inherited; end; procedure TEdit.WMContextMenu(var Message: TWMContextMenu); begin if eoAllowContextMenu in FEditOptions Then Inherited; end; procedure TEdit.WMCopy(var Message); begin if eoAllowCopy in FEditOptions Then Inherited; end; procedure TEdit.WMPaste(var Message); begin if eoAllowPaste in FEditOptions Then Inherited; end; procedure TEdit.WMCut(var Message); begin if eoAllowCut in FEditOptions Then Inherited; end; procedure TEdit.WMUndo(var Message); begin if eoAllowUndo in FEditOptions Then Inherited; end; procedure TForm1.FormCreate(Sender: TObject); begin // toute les options sont désactivées, impossible donc de modifier le contenus de Edit2 Edit2.EditOptions := []; end;
Bonjour à toutes et à tous,
@ youhibadelphi, faut voir ce que tu fais avec ton Tedit, si tu as déjà ton texte écrit par défaut ou si tu l'ajoutes après quoi qu'il en soit, tu peux envisager de placer ton Tedit sur un Tpanel avec les mêmes dimensions et mettre la propriété enabled à false du Tpanel (propriété enabled du Tedit reste à true) comme cela le texte du Tedit apparaîtra normalement mais impossible de le sélectionner donc de le copier.
@+,
Cincap
Salut seb_homme_parfait
Merci pour ta participation mais je crois de ta solution nécessite un peu plus de condition, je crois q'il y a des codes a ajouter pour désactivé copier/coller dans les Tedit.
Merci.
Salut Dr.Who
Merci j'ai bien copié le code.
Merci beaucoup.
Salut cincap
Tout ce que je veux c'est interdire l'utilisateur de copier et de coller dans les edit, je crois que le code de notre ami Dr.Who est la bonne solution.
Merci pour ta remarque.
cela empêche toute action de Copier, Coller, Couper, ou d'appel du menu contextuel dans l'edit.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Edit1.editOptions := Edit1.editOptions - [eoallowCut, eoallowCopy, eoallowPaste, eoallowContextMenu];
note que comme l'option est intégrée à la classe TEdit, chaque TEdit peut avoir un comportement différent.
ce qui est intéressant avec cette approche, c'est qu'on peu l'adapter pour n'importe quel composant utilisant les messages système.
on peut imaginer toute sorte de blocage/déblocage d'action.
Salut Dr.Who
Merci beaucoup pour ton aide.
Vraiment ce que je trouve dans ce forum n'existe pas dans les ouvrages que j'ai entre les mains.
les ouvrages sont toujours, pour la plupart, des guides condensé.
difficile de faire de l'experimentation dans un livre...
ou alors, il faudrait ecrire "la Bible du code exotique et des méthodes de gnou"
Salut mon ami
J’ai essayé dans code dans un petit exemple ça marche bien mais j’ai trouvé des difficulté pour l’adapter avec mon projet, je crois que c’est un problème avec les déclarations, mais je bosse actuellement pour réussir cette adaptation.
J’ai une idée dans la cervelle :
Comment faire pour désactiver la touche ctrl et la touche v dans l'edit par exemple pour annuler toute opération coller ? en fin est il possible?
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part Edit1.editOptions := Edit1.editOptions - [eoallowCut, eoallowCopy, eoallowPaste, eoallowContextMenu];
Salut Dr.Who
Oui j'ai ajouté ton code mais après mais le projet ne se compile pas à cause erreurs suivantes:
Identificateur non déclaré pour
EditOptions, eoallowCut, eoallowCopy, eoallowPaste, eoallowContextMenu
Bonjour à toutes et à tous,
@ Youhibadelphi, as tu bien recopié son code, car cela fonctionne :
Utilisation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101 unit unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, stdctrls; type { TEdit overclass ---------------------------- } TEditOption = (eoAllowEdit, eoAllowContextMenu, eoAllowCopy, eoAllowPaste, eoAllowCut, eoAllowUndo); { eoAllowEdit : permet d'activer ou non la saisie au clavier eoAllowContextMenu : permet d'activer ou non le menu contextuel par defaut eoAllowCopy : permet d'activer ou non le raccourcis CTRL+C (copier) eoAllowPaste: permet d'activer ou non le raccourcis CTRL+V (coller) eoAllowCut : permet d'activer ou non le raccourcis CTRL+X (couper) eoAllowUndo: permet d'activer ou non le raccourcis CTRL+Z (annuler) } TEditOptions = set of TEditOption; TEdit = Class(StdCtrls.TEdit) private FEditOptions : TEditOptions; procedure WMChar(var Message: TWMChar); message WM_CHAR; procedure WMContextMenu(var Message: TWMContextMenu); message WM_CONTEXTMENU; procedure WMPaste(var Message); message WM_PASTE; procedure WMCopy(var Message); message WM_COPY; procedure WMCut(var Message); message WM_CUT; procedure WMUndo(var Message); message WM_UNDO; public constructor Create(AOwner : TComponent); override; Property EditOptions : TEditOptions Read FEditOptions Write FEditOptions default [eoAllowEdit, eoAllowContextMenu, eoAllowCopy, eoAllowPaste, eoAllowCut, eoAllowUndo]; end; { --------------------------------- } TForm1 = class(TForm) Edit1: TEdit; procedure FormCreate(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} { TEdit overclass } constructor TEdit.Create(AOwner : TComponent); begin inherited create(AOwner); FEditOptions := [eoAllowEdit, eoAllowContextMenu, eoAllowCopy, eoAllowPaste, eoAllowCut, eoAllowUndo]; end; procedure TEdit.WMChar(var Message: TWMChar); begin if eoAllowEdit in FEditOptions Then Inherited; end; procedure TEdit.WMContextMenu(var Message: TWMContextMenu); begin if eoAllowContextMenu in FEditOptions Then Inherited; end; procedure TEdit.WMCopy(var Message); begin if eoAllowCopy in FEditOptions Then Inherited; end; procedure TEdit.WMPaste(var Message); begin if eoAllowPaste in FEditOptions Then Inherited; end; procedure TEdit.WMCut(var Message); begin if eoAllowCut in FEditOptions Then Inherited; end; procedure TEdit.WMUndo(var Message); begin if eoAllowUndo in FEditOptions Then Inherited; end;
ou :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 procedure TForm1.FormCreate(Sender: TObject); begin // toute les options sont désactivées, impossible donc de modifier le contenus de Edit1 Edit1.EditOptions := []; end;
@+,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure TForm1.FormCreate(Sender: TObject); begin Edit1.editOptions := Edit1.editOptions - [eoallowCut, eoallowCopy, eoallowPaste, eoallowContextMenu]; end;
Cincap
salut
oui j'ai bien copris la solution mais j'ai posé une autre question
comment faire pour bloquer les touches ctrl+v?
merci
en supprimant les options
eoallowCut, -> CTRL+X
eoallowCopy, -> CTRL+C
eoallowPaste -> CTRL+V
Bonjour à toutes et à tous,
@ Youhibadelphi, je répondais à ton post du 21/11/2009 à 16H39 :
Quant à mon dernier post, il y avait deux utilisations de cette excellente solution de Dr. Who, dont la 1ère répondait à ta demande :Oui j'ai ajouté ton code mais après mais le projet ne se compile pas à cause erreurs suivantes:
Identificateur non déclaré pour
EditOptions, eoallowCut, eoallowCopy, eoallowPaste, eoallowContextMenu
@+,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure TForm1.FormCreate(Sender: TObject); begin // toute les options sont désactivées, impossible donc de modifier le contenus de Edit1 Edit1.EditOptions := []; end;
Cincap
Salut cincap et Dr.Who
Et merci pour votre aide
J’ai essayé un astuce, et ça bien marché, j'ai changé le raccourci ctrl+v, et j'ai lié le menu du clic droit de la souris avec popumenu.
Merci encore mille fois pour votre aide.
salut youhibadelphi
voila j'aimerai bien connaitre la solution dont tu as changé le ctrl+v avec le menu contextuel de la sourie en utilisant le composant popumenu ?
merci de m'exliquer en détail simple car j'ai amais utiliser le composant Popumenu.
Salut
nn2009
Oui c'est simple tu ajoute un Popumenu1 a ton projet puis dans la propriété de l'edit par exemple tu ajoute Popumenu1 a la propriété Popumenu de l'edit.
Voila.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager