IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Désactiver copier/coller dans un Tedit


Sujet :

Delphi

  1. #1
    Membre régulier Avatar de youhibadelphi
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Juin 2009
    Messages : 240
    Points : 108
    Points
    108
    Par défaut Désactiver copier/coller dans un Tedit
    Salut
    mes amis comment faire pour désactiver copier /coller dans un Tedit.
    Et merci

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    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

  3. #3
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    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;

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 468
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 468
    Points : 1 342
    Points
    1 342
    Par défaut
    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

  5. #5
    Membre régulier Avatar de youhibadelphi
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Juin 2009
    Messages : 240
    Points : 108
    Points
    108
    Par défaut
    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.

  6. #6
    Membre régulier Avatar de youhibadelphi
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Juin 2009
    Messages : 240
    Points : 108
    Points
    108
    Par défaut
    Salut Dr.Who
    Merci j'ai bien copié le code.
    Merci beaucoup.

  7. #7
    Membre régulier Avatar de youhibadelphi
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Juin 2009
    Messages : 240
    Points : 108
    Points
    108
    Par défaut
    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.

  8. #8
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Edit1.editOptions := Edit1.editOptions - [eoallowCut, eoallowCopy, eoallowPaste, eoallowContextMenu];
    cela empêche toute action de Copier, Coller, Couper, ou d'appel du menu contextuel dans l'edit.

    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.

  9. #9
    Membre régulier Avatar de youhibadelphi
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Juin 2009
    Messages : 240
    Points : 108
    Points
    108
    Par défaut
    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.

  10. #10
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    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"


  11. #11
    Membre régulier Avatar de youhibadelphi
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Juin 2009
    Messages : 240
    Points : 108
    Points
    108
    Par défaut
    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

  12. #12
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Edit1.editOptions := Edit1.editOptions - [eoallowCut, eoallowCopy, eoallowPaste, eoallowContextMenu];

  13. #13
    Membre régulier Avatar de youhibadelphi
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Juin 2009
    Messages : 240
    Points : 108
    Points
    108
    Par défaut
    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

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 468
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 468
    Points : 1 342
    Points
    1 342
    Par défaut
    Bonjour à toutes et à tous,

    @ Youhibadelphi, as tu bien recopié son code, car cela fonctionne :

    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;
    Utilisation :

    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;
    ou :

    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

  15. #15
    Membre régulier Avatar de youhibadelphi
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Juin 2009
    Messages : 240
    Points : 108
    Points
    108
    Par défaut
    salut
    oui j'ai bien copris la solution mais j'ai posé une autre question
    comment faire pour bloquer les touches ctrl+v?
    merci

  16. #16
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    en supprimant les options
    eoallowCut, -> CTRL+X
    eoallowCopy, -> CTRL+C
    eoallowPaste -> CTRL+V

  17. #17
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 468
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 468
    Points : 1 342
    Points
    1 342
    Par défaut
    Bonjour à toutes et à tous,

    @ Youhibadelphi, je répondais à ton post du 21/11/2009 à 16H39 :

    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
    Quant à mon dernier post, il y avait deux utilisations de cette excellente solution de Dr. Who, dont la 1ère répondait à ta demande :

    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

  18. #18
    Membre régulier Avatar de youhibadelphi
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Juin 2009
    Messages : 240
    Points : 108
    Points
    108
    Par défaut
    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.

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    Points : 32
    Points
    32
    Par défaut popumenu
    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.

  20. #20
    Membre régulier Avatar de youhibadelphi
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Juin 2009
    Messages : 240
    Points : 108
    Points
    108
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Lazarus] Désactiver le copier/coller dans un TEdit
    Par Invité dans le forum Lazarus
    Réponses: 5
    Dernier message: 03/07/2011, 17h47
  2. Réponses: 3
    Dernier message: 29/03/2005, 14h39
  3. gerer le copier/coller dans une richEdit
    Par SBP dans le forum MFC
    Réponses: 4
    Dernier message: 10/02/2005, 22h00
  4. Protéger Couper/Copier/Coller dans un Objet en développement
    Par tibi666 dans le forum Composants VCL
    Réponses: 14
    Dernier message: 06/12/2004, 15h52
  5. [Swing]copier coller... dans le menu.
    Par parksto dans le forum Composants
    Réponses: 3
    Dernier message: 10/05/2004, 23h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo