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

Composants VCL Delphi Discussion :

Protéger Couper/Copier/Coller dans un Objet en développement


Sujet :

Composants VCL Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Points : 24
    Points
    24
    Par défaut Protéger Couper/Copier/Coller dans un Objet en développement
    Bonjour,

    J'ai un problème, comme beaucoup de gens qui viennent ici ! ;-)

    J'ai conçu un objet Dérivé d'un TCustomRichEdit. Je souhaite le protéger d'action type Couper/Copier/Coller. Pour cela, j'ai déclarer les fonctions suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure WMCopy(var Msg: TMessage); message WM_CUT;
    procedure WMCopy(var Msg: TMessage); message WM_COPY;
    procedure WMCopy(var Msg: TMessage); message WM_PASTE;
    Puis leurs définitions :

    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
     
    procedure TMonObj.WMCopy(var Msg: TMessage);
    begin
    //mon traitement...
    inherited;
    end;
     
    procedure TMonObj.WMCopy(var Msg: TMessage);
    begin
    //mon traitement...
    inherited;
    end;
     
    procedure TMonObj.WMCopy(var Msg: TMessage);
    begin
    //mon traitement...
    inherited;
    end;
    J'ai trouvée ces infos sur Torry's delphi Page.

    Malheureusement, il semblerait que les Ctrl+C, Ctrl+V, Ctrl+X ne génère pas les message WM_COPY, WM_CUT et WM_PASTE car ces fonctions ne sont pas appellé.

    Ai je fais une erreur quelque par ? Quelqu'un a t'il une info sur ce problème ?

  2. #2
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut
    Si en plus tu intercèpte l'appuie des touches CTRL c, v, x avec l'evenement Keydown sur ton RichEdit ? ça permettrait peut être de résoudre ton soucis

  3. #3
    Membre éprouvé
    Avatar de octal
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 441
    Points : 957
    Points
    957
    Par défaut
    s'il le fait dans les evenement clavier ca ne gèrera pas les coller de la souris (menu context)
    http://www.pocketmt.com GLCD Font Creator home site.

  4. #4
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut
    les évenements souris il les gère déjà avec le code qu'il a écrit j'ai cru comprendre, ce n'est que les evenements clavier qu'il lui manque c'est bien ça ?

  5. #5
    Membre éprouvé
    Avatar de octal
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 441
    Points : 957
    Points
    957
    Par défaut Re: Protéger Couper/Copier/Coller dans un Objet en développe
    Citation Envoyé par tibi666
    Bonjour,

    J'ai un problème, comme beaucoup de gens qui viennent ici ! ;-)

    J'ai conçu un objet Dérivé d'un TCustomRichEdit. Je souhaite le protéger d'action type Couper/Copier/Coller. Pour cela, j'ai déclarer les fonctions suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure WMCopy(var Msg: TMessage); message WM_CUT;
    procedure WMCopy(var Msg: TMessage); message WM_COPY;
    procedure WMCopy(var Msg: TMessage); message WM_PASTE;
    Puis leurs définitions :
    est il normal que tu utilise le meme nom de procédure pour les gestionnaire d'evenement (de messages)?
    Je pense que les procedure doivent être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure WMCut(var Msg: TMessage); message WM_CUT;
    procedure WMCopy(var Msg: TMessage); message WM_COPY;
    procedure WMPaste(var Msg: TMessage); message WM_PASTE;
    de meme dans l'implementation
    http://www.pocketmt.com GLCD Font Creator home site.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Points : 24
    Points
    24
    Par défaut
    Oula oula, je vois que ça c'est bousculé pendant la pause déjeuner ;-)

    Pour répondre aux différentes questions :

    L'interception des touchez Ctrl+x, +c, +v dans la procédure Keydown ne permet pas de court-circuité les actions de Couper/Copier/Coller de Windows.

    ATTENTION : Je suis dans la conception d'un objet VCL. Donc pas d'écriture possible de gestionnaires d'événement. Ces gestionnaires OnQuelqueChose sont des propriétés que je mappe pour le développeur qui utilisera mon objet !

    Pour répondre à la dernière remarque, les messages standards windows son du format WM_QUELQUECHOSE. D'après mon bouquin Développement Delphi 6 de CampusPress, la norme veux que la procédure qui répond au message WM_QUELQUECHOSE est pour nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure WMQuelquechose(var Msg: TMessage);
    Voila.

    D'autres idées ?

  7. #7
    Membre éprouvé
    Avatar de octal
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 441
    Points : 957
    Points
    957
    Par défaut
    Citation Envoyé par tibi666
    Pour répondre à la dernière remarque, les messages standards windows son du format WM_QUELQUECHOSE. D'après mon bouquin Développement Delphi 6 de CampusPress, la norme veux que la procédure qui répond au message WM_QUELQUECHOSE est pour nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure WMQuelquechose(var Msg: TMessage);
    Voila.

    D'autres idées ?
    oui je suis d'accord pour la norme de nomination de message mais toi tu donne le meme nom aux trois procedure qui répondre à trois messages différent... tu nomme ta procedure toujour WMCopy(var Msg: TMessage); qu"elle réponde à message WM_CUT, ou WM_COPY ou WM_PASTE.
    Regarde bien la déclaration que tu donne
    http://www.pocketmt.com GLCD Font Creator home site.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Déclares tes 3 procédures en overload ou bien crées en qu'une seule qui fera un case ... of du message

    Je ne sais pas si cela règlera ton problème !

  9. #9
    Membre éprouvé
    Avatar de octal
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 441
    Points : 957
    Points
    957
    Par défaut
    Citation Envoyé par PyRoFlo
    Déclares tes 3 procédures en overload ou bien crées en qu'une seule qui fera un case ... of du message

    Je ne sais pas si cela règlera ton problème !
    Les trois fonctions ont la meme signature (meme nbre et meme type de param) ... l'overload est impossible
    http://www.pocketmt.com GLCD Font Creator home site.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par octal
    Citation Envoyé par PyRoFlo
    Déclares tes 3 procédures en overload ou bien crées en qu'une seule qui fera un case ... of du message

    Je ne sais pas si cela règlera ton problème !
    Les trois fonctions ont la meme signature (meme nbre et meme type de param) ... l'overload est impossible
    Exact, j'ai rien dit

    En revanche case ... of peut faire l'affaire

  11. #11
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    salut
    je sais pas si sa peut marcher mai si tu utilise les Hook clavier, je sais que tu pas pas changer la valeur des touche mai tu peut arréter la translation du message avec msg.result:=1;
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  12. #12
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    salut
    je sais pas si sa peut marcher mai si tu utilise les Hook clavier, je sais que tu pas pas changer la valeur des touche mai tu peut arréter la translation du message avec msg.result:=1;
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Points : 24
    Points
    24
    Par défaut
    Salut octal,

    Effectivement, et j'en suis désolé, je nomme sur ce forum les trois procedure avec le même nom, c'est le genre d'erreur qu'entraîne le copier/coller.

    Rassure toi, j'ai pas fait cette erreur dans le code source !

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Points : 24
    Points
    24
    Par défaut
    Bon, J'ai résolu une partie de mon pb.

    Il semblerait que les messages WM_COPY, WM_CUT et WM_PASTE ne soient pas générés lors de l'appui sur Ctrl+C, X et V. Toutefois, le fait d'utiliser un ActionManager avec avec les actions standard Copier, Couper et Coller génère bien ces messages.

    Je vais donc tenter d'intercepter les ^X, ^C et ^V dans le keyDown (et non pas le OnKeyDown) comme on me l'a suggéré plus haut.

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Points : 24
    Points
    24
    Par défaut
    Homme de peu de fois que je fus ...

    J'ai donc tenté d'intercepté les combinaisons ^c, ^x, ^v dans le KeyPress (et non de KeyDown) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TMonObjet.KeyPress(var Key: Char);
    begin
      Case Key Of
        ^C: CopyToClipboard;
        ^X: CutToClipboard;
        ^V: PasteFromClipboard;
      End;
      If Assigned(FOnKeyPress) then FOnKeyPress(Self, Key);
      inherited KeyPress(Key);
    end;
    Formidable, ça fonction !

    Je peux donc effectuer les traitements que je veux désormé !

    Merci à tous our votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Couper/Copier/Coller dans une Textbox
    Par LaPanic dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/10/2009, 18h19
  2. Couper, Copier, Coller d'un textarea dans IE et Firefox?
    Par Prosis dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/01/2008, 00h35
  3. Réponses: 0
    Dernier message: 18/12/2007, 13h59
  4. gerer le copier/coller dans une richEdit
    Par SBP dans le forum MFC
    Réponses: 4
    Dernier message: 10/02/2005, 21h00
  5. [Swing]copier coller... dans le menu.
    Par parksto dans le forum Composants
    Réponses: 3
    Dernier message: 10/05/2004, 22h56

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