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

Langage Delphi Discussion :

Court-circuiter le ctrl+V avant l'affichage


Sujet :

Langage Delphi

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut Court-circuiter le ctrl+V avant l'affichage
    Bonjour

    Je voudrais modifier le contenu du presse-papier avant de l'afficher dans un tEdit (sous DELPHI XE2Pro).
    Pour cela, je fait dans le OnKeyDown :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    VAR
       Chaine : String;
    begin
         IF ((ssCtrl in Shift) AND ((Key = ord('V')) OR (Key = ord('V'))))  THEN
          begin
                  if Clipboard.HasFormat(CF_TEXT) THEN
                  begin
                     // mes modifs
     
                  END;   // Fin de IF
          END;   // Fin de IF
    end;
    Ca ne marche pas

    j'ai essayé la proposition de ero-sennin. Mais là non plus cela ne fonctionne pas (le contenu du presse-papier est collé tel-quel).

    quelqu'un, aurait-il une autre solution ?

    NB : cela se produit que la propriété KeyPreview de la form soit a Vrai ou Faux.

    merci olivier
    Merci d'ajouter un sur les tags qui vous ont aidé

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Peut-être qu'en capturant WM_PASTE dans la WndProc du TEdit, tu aurais plus de succès

    PasteFromClipboard envoie un WM_PASTE espérons que Windows le fait aussi !

    Il est dommage qu'il n'existe pas un OnPaste, OnCopy et OnCut dans le TClipboard !
    Mais essaye avec une ACTION TEditPaste qui normalement capture le Paste sur l'Edit ayant le Focus comme le fait Lung selon les conseils de tenpigs



    Sinon voir le code du Dr.Who
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Je suis passé par le TEditPaste ses ACTIONs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TfPrincipal.EditPasteExecute(Sender: TObject);
    begin
        IF (Application.FindComponent('fForm') <> NIL) THEN
        begin
           IF fForm.ActiveControl.Name = fForm.AdvEdit1.Name THEN
            begin
     
                 // Faire les modifs 
     
            END;   // Fin de IF
        END;   // Fin de IF
    End;
    et ca marche

    Merci
    Merci d'ajouter un sur les tags qui vous ont aidé

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Depuis D2009, je dirais que c'est plutôt le CF_UNICODETEXT qu'il aurait fallu modifier. Il ne faut pas oublier que le presse-papier contient la donnée sous divers formats et que c'est l'application cible qui choisi celui qui lui convient le mieux

    Citation Envoyé par ShaiLeTroll Voir le message
    Il est dommage qu'il n'existe pas un OnPaste, OnCopy et OnCut dans le TClipboard !
    On peut surveiller le couper/copier assez simplement par SetClipboardViewer (XP) ou AddClipboardFormatListener (Vista+)

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    C'est juste pour finaliser le code afin qu'il puisse servir à d'autres :

    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
    procedure TfPrincipal.EditPasteExecute(Sender: TObject);
    VAR
       Chaine : String;
    begin
       // gere le contenu du presse-papier
        IF (Application.FindComponent('fForm') <> NIL) THEN
        begin
              if Clipboard.HasFormat(CF_TEXT) THEN
              begin
                  Chaine := Clipboard.AsText;
     
                  // Mes modifications 
     
                  Clipboard.AsText := Chaine;
              END;   // Fin de IF
        End ELSE
        Begin
     
        END;   // Fin de IF
        //SendMessage(GetFocus, WM_PASTE, 0, 0);
        PostMessage(getFocus(), WM_PASTE, 0, 0 );
    A noter que :
    SendMessage(GetFocus, WM_PASTE, 0, 0); ne retourne pas chaine avec certains composants (test avec un composant de TMS) Pourquoi ? je n'ai pas cherché
    Merci d'ajouter un sur les tags qui vous ont aidé

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

Discussions similaires

  1. [PageControl] Raccourcis claviers court-circuités
    Par Manopower dans le forum Composants VCL
    Réponses: 8
    Dernier message: 04/09/2009, 16h52
  2. [Disque Dur] Problème de court-circuit
    Par saih_tam dans le forum Composants
    Réponses: 9
    Dernier message: 20/05/2009, 15h03
  3. Réponses: 2
    Dernier message: 06/07/2007, 10h41
  4. Réponses: 13
    Dernier message: 09/04/2007, 13h20
  5. Réponses: 4
    Dernier message: 16/03/2004, 18h03

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