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 :

[D2010] Comment envoyer une combinaison de touche à un composant ?


Sujet :

Langage Delphi

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut [D2010] Comment envoyer une combinaison de touche à un composant ?
    Comment envoyer une combinaison de touche à un composant ?

    Par exemple, pour envoyer la touche [F2]:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PostMessage(RichEdit.Handle, WM_KEYDOWN, VK_F2, 0);
    Mais pour envoyer [Ctrl + Shift + I] ?

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par Lung Voir le message
    Comment envoyer une combinaison de touche à un composant ?

    Par exemple, pour envoyer la touche [F2]:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PostMessage(RichEdit.Handle, WM_KEYDOWN, VK_F2, 0);
    Mais pour envoyer [Ctrl + Shift + I] ?

    il faut envoyer les touches VK_LCONTROL, VK_LSHIFT puis Ord('I') en VM_KEYDOWN puis WM_KEYUP

    ou passer par Keybd_Event() pour faire la même chose
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    il faut envoyer les touches VK_LCONTROL, VK_LSHIFT puis Ord('I') en VM_KEYDOWN puis WM_KEYUP

    ou passer par Keybd_Event() pour faire la même chose
    J'ai essayé, mais ça ne fonctionne pas (le RichEdit ne reçoit rien, ou alors juste le [Ctrl] dans le meilleur des cas : j'ai un point d'arrêt dans son évènement OnKeyDown).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       SendMessage(RichEdit.Handle, WM_KEYDOWN, VK_LCONTROL, 0);
       SendMessage(RichEdit.Handle, WM_KEYDOWN, VK_LSHIFT, 0);
       SendMessage(RichEdit.Handle, WM_KEYDOWN, VK_U, 0);
       SendMessage(RichEdit.Handle, WM_KEYUP, VK_U, 0);
       SendMessage(RichEdit.Handle, WM_KEYUP, VK_LSHIFT, 0);
       SendMessage(RichEdit.Handle, WM_KEYUP, VK_LCONTROL, 0);
    Pareil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       Keybd_Event(VK_LCONTROL, 0, 0, 0);
       Keybd_Event(VK_LSHIFT, 0, 0, 0);
       Keybd_Event(VK_U, 0, 0, 0);
       Keybd_Event(VK_U, 0, KEYEVENTF_KEYUP, 0);
       Keybd_Event(VK_LSHIFT, 0, KEYEVENTF_KEYUP, 0);
       Keybd_Event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0);
    J'ai même testé le code de LadyWasky :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       SimulateKeyDown(VK_LCONTROL);
       SimulateKeyDown(VK_LSHIFT);
       Sendkeys('U');
       SimulateKeyUp(VK_LSHIFT);
       SimulateKeyUp(VK_LCONTROL);
    Je ne pensais pas que ce serait si compliqué.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Citation Envoyé par Lung Voir le message
    Pareil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       Keybd_Event(VK_LCONTROL, 0, 0, 0);
       Keybd_Event(VK_LSHIFT, 0, 0, 0);
       Keybd_Event(VK_U, 0, 0, 0);
       Keybd_Event(VK_U, 0, KEYEVENTF_KEYUP, 0);
       Keybd_Event(VK_LSHIFT, 0, KEYEVENTF_KEYUP, 0);
       Keybd_Event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0);
    La question est de savoir depuis où et comment tu génères ces commandes : Même application ? Même fiche ? Par TButton ? par TSpeedButton ?
    Ne pas oublier que c'est le contrôle détenant la focalisation qui sera affecté. Keybd_Event ne fait que remplir le buffer de clavier sans se soucier de la destination.

  5. #5
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    La question est de savoir depuis où et comment tu génères ces commandes : Même application ? Même fiche ? Par TButton ? par TSpeedButton ?
    Même application, même onglet de PageControl, par un élément d'un menu contextuel.

    Citation Envoyé par Andnotor Voir le message
    Ne pas oublier que c'est le contrôle détenant la focalisation qui sera affecté. Keybd_Event ne fait que remplir le buffer de clavier sans se soucier de la destination.
    J'ai essayé de faire un RichEdit.SetFocus, mais ça ne change rien.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    euh...c'est supposé faire quoi Ctrl+Shift+U ?!

    car Ctrl+Shift+I ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      RichEdit1.SetFocus;
      Keybd_Event(VK_LCONTROL, 0, 0, 0);
      Keybd_Event(VK_LSHIFT, 0, 0, 0);
      Keybd_Event(Ord('I'), 0, 0, 0);
      Keybd_Event(Ord('I'), 0, KEYEVENTF_KEYUP, 0);
      Keybd_Event(VK_LSHIFT, 0, KEYEVENTF_KEYUP, 0);
      Keybd_Event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0);
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    euh...c'est supposé faire quoi Ctrl+Shift+U ?!
    Ça souligne la sélection, enfin dans Wordpad tout au moins.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    euh...c'est supposé faire quoi Ctrl+Shift+U ?!
    Je cherche à reproduire l'indentation / dé-indentation (comme dans Delphi, PsPad, ...) dans un RichEdit (et ça fonctionne).

    Mais par contre, j'avais un problème avec l'appel depuis un élément de menu.
    Je crois que j'ai trouvé le coupable. Ca serait encore le TActionList qui capture la combinaison de touche.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  9. #9
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    C'était bien ça. J'ai été obligé de retirer le raccourci du TActionManager.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

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

Discussions similaires

  1. comment simuler l'appui d'une combinaison de touches
    Par camatchou dans le forum Débuter
    Réponses: 12
    Dernier message: 04/04/2014, 13h26
  2. Réponses: 3
    Dernier message: 14/09/2009, 09h31
  3. Réponses: 20
    Dernier message: 27/11/2007, 14h40
  4. [VCL] Comment détecter une combinaison de touches ?
    Par micatmidog dans le forum Composants VCL
    Réponses: 3
    Dernier message: 23/01/2005, 14h19
  5. Comment envoyer une commande à une console ?
    Par seb_asm dans le forum Assembleur
    Réponses: 3
    Dernier message: 27/03/2004, 14h09

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