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 :

procedure WndProc indomptable :(


Sujet :

Langage Delphi

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut procedure WndProc indomptable :(
    Slt,

    j'ai un composant qui herite du richedit et je souhaite effectuer un traitement lorsque l'utilisateur effectue un collage dans le texte,

    j'essai donc de detourner la procedure WndProc avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TMyCmp.WndProc(var Message: TMessage);
    begin
     
        inherited;
     
        if Message.Msg = WM_PASTE then
        begin
             Traitement(True);
        end;
     
    end;
    Rien n'y fais !

    que je mette le wm_past, wm_char....

    je vois pas ce que je dois modifier pour que cela marche,
    vous auriez une idee ?

  2. #2
    bjl
    bjl est déconnecté
    Membre averti Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Points : 338
    Points
    338
    Par défaut
    bonjour,

    et en essayant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TMyCmp.WndProc(var Message: TMessage); 
    begin 
     
        if Message.Msg = WM_PASTE then 
        begin 
             Traitement(True); 
        end
        else  inherited; 
     
    end;

  3. #3
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Il est en effet possible (je n'en suis pas sûr, c'est une supposition) que le traitement appelé dans inherited modifie Message.

    Je ne suis pas sûr qu'il soit dans tes intentions de squeezer le traiement normal comme le propose bjl, mais tu peux Faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TMyCmp.WndProc(var Message: TMessage);
    var
      Msg : Cardinal;
    begin
     
       Msg := Message.Msg;
       inherited;
     
        if Msg = WM_PASTE then
        begin
             Traitement (True);
        end;
     
    end;
    Roland

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    ça non plus ne donne rien


  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 302
    Points
    11 302
    Billets dans le blog
    6
    Par défaut
    je pense que tu dois "faire" 2 procédures :
    1) tu stockes l'adresse de WndProc dans old_addr
    2) tu définis une variable old_proc de type procedure de traitement et tu la fais pointer sur old_addr
    3) dans ta procédure maison, tu appelles d'abord old_proc en lui passant le message (en copie, pas en var) ; puis tu fais ton traitement perso
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Peux-tu vérifier que lors du collage, ta procédure est bien appelée ? (Tu palces un point d'arrêt ou un Showmessage). Du même coup, tu peux vérifier la valeur de message.Msg, et si elle correspond bien à WM_PASTE. On saura un peu mieux où on en est
    Roland

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    ben justement non,
    jai l'impression que c'est un autre message qui passe et non wm_paste

  8. #8
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Quelle est la valeur (hexa ou entier) de Message.Msg ?
    Roland

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    j'arrive pas a savoir quel message est envoyé,
    un BP dessus bloque sans arret et dedans, jamais

  10. #10
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 302
    Points
    11 302
    Billets dans le blog
    6
    Par défaut
    il est possible que tu doives filtrer le message WM_COMMAND qui a l'air déclenché par les raccourcis clavier et dont le wID serait WM_PASTE :
    The WM_COMMAND message is sent when the user selects a command item from a menu, when a control sends a notification message to its parent window, or when an accelerator keystroke is translated.

    WM_COMMAND
    wNotifyCode = HIWORD(wParam); // notification code
    wID = LOWORD(wParam); // item, control, or accelerator identifier
    hwndCtl = (HWND) lParam; // handle of control


    Parameters

    wNotifyCode

    Value of the high-order word of wParam. Specifies the notification code if the message is from a control. If the message is from an accelerator, this parameter is 1. If the message is from a menu, this parameter is 0.

    wID

    Value of the low-order word of wParam. Specifies the identifier of the menu item, control, or accelerator.

    hwndCtl

    Value of lParam. Identifies the control sending the message if the message is from a control. Otherwise, this parameter is NULL.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  11. #11
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    c'est pas lui non plus ... snif

    pas moyen de trouver

    du coup, j'ai fais differemment mais j'aimerai quand meme bien trouver,
    ne serait ce que pour ma culture perso

  12. #12
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Citation Envoyé par firejocker
    j'arrive pas a savoir quel message est envoyé,
    un BP dessus bloque sans arret et dedans, jamais
    Je continue sur mon idée de résupérer le message.Msg émis lors du collage. Je ne suis pas sûr de comprendre les "dessus" et "dedans" mais si cela signifie dans et en dehors du bloc "if message.Msg", tu pourrais éviter les arrêts inutiles en définissant un flag que tu mets à True juste avant de coller, à False juste après, et dans WndProc, en dehors du bloc if, tu mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if MonFlag 
      then Showmessage (IntToHex (Message.Msg));
    et ensuite, en recherchant cette valeur hexa dans l'unité Messages, on devrait bien arriver à la trouver, non ?
    Roland

  13. #13
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    jvais tenter ca ...

Discussions similaires

  1. Apropos des Transactions au sein d'un Stored Procedure
    Par Sarbacane dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 16/11/2004, 08h21
  2. [VB6] Interrompre toutes procédures
    Par lutin_vert dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/09/2002, 11h39
  3. Declaration Type ds une procedure
    Par Qwazerty dans le forum Langage
    Réponses: 6
    Dernier message: 28/08/2002, 09h09
  4. [TP]code asm dans une procedure
    Par M.Dlb dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 17/08/2002, 20h43
  5. Reprendre une procedure dans une autre ?
    Par Poisson Rouge dans le forum Langage
    Réponses: 3
    Dernier message: 17/07/2002, 22h51

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