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 :

Evénement catché dans toute l'interface.


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Points : 42
    Points
    42
    Par défaut Evénement catché dans toute l'interface.
    Bonjour à tous.tes

    Ce matin je me suis dit que j'aurai bien besoin d'un événement, du genre OnKeyPress, déclenché dans toute l'appli, et donc pas seulement lié à un composant.
    J'ai bien pensé à un shortCut dans un menu caché, mais je voudrais que cet événement soit déclenché quand on appuie sur les flèches du clavier. Il n'y a pas de shortCut pour les flèches .
    J'ai une interface avec énormément de composants, et je ne me vois pas lier cet événement à chacun d'entre eux .
    Quelqu'un connaîtrait-il une astuce ?

    Merci d'avance.
    Pas changer assiettes pour fromage.

  2. #2
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    Bonjour

    Es-tu sur une application FMX ou VCL ?

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Points : 42
    Points
    42
    Par défaut
    Bonjour pprem,
    VCL.
    Pas changer assiettes pour fromage.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 091
    Points : 41 069
    Points
    41 069
    Billets dans le blog
    62
    Par défaut
    que ce soit VCL ou FMX je pense que cela ne changera rien. Peut-être en "surclassant" (hackant) le onKeyPress des composants visuels
    quelque chose comme
    Hypothèse 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    type 
    TWinControl :  class(VCL.Controls.TwinControl)
    procedure KeyPress(var key : char); 
    end; 
     
    procedure TWinControl.KeyPress(var key : char);
    begin
      // traitement flèche ---------------------------------
     
      // ---------------------------------------------------
      if Assigned(FOnKeyPress) then FOnKeyPress(Self, Key);
    end;
    Quoique, keypress est réducteur puisque un seul char, il vaudrait mieux partir sur le procedure TWinControl.KeyDown(var Key: Word; Shift: TShiftState);
    Hypothèse 2 :
    mettre KeyPreview à true pour la forme et surchargé Form.DoKeyDown


    @pprem pas sympa de pas vouloir teaser, je vais finir par devenir très curieux !
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 745
    Points : 13 306
    Points
    13 306
    Par défaut
    Il suffit de traiter WM_KEYDOWN dans TApplicationEvents.OnMessage.

  6. #6
    Membre éclairé Avatar de viper1094
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 570
    Points : 853
    Points
    853
    Par défaut
    Je dis ça comme ça même si je n'y comprend rien à ce qu'elles sont, mais si je ne m'abuse, les hotkeys peuvent convenir à ta situation non ? ( Me taper pas si je dis n'importe quoi )
    "C'est d'un ennui…"

    Shikamaru Nara

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Peut-être en "surclassant" (hackant) le onKeyPress des composants visuels
    Merci Sergio. Je pense que je vais me lancer dans cette direction dès que j'ai un moment.

    Citation Envoyé par Andnotor Voir le message
    Il suffit de traiter WM_KEYDOWN dans TApplicationEvents.OnMessage.
    Peut-être mieux ... Je vais creuser . Merci Andnotor.

    Citation Envoyé par viper1094 Voir le message
    Je dis ça comme ça même si je n'y comprends rien à ce qu'elles sont, mais si je ne m'abuse, les hotkeys peuvent convenir à ta situation non ? ( Me tapez pas si je dis n'importe quoi )
    Malheureusement non, la demande est sur les flèches du clavier .
    Pas changer assiettes pour fromage.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 745
    Points : 13 306
    Points
    13 306
    Par défaut
    OnKeyPress est l'événement correspondant au message WM_CHAR. Les touches de direction ne génèrent pas ce message.

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Points : 42
    Points
    42
    Par défaut
    Ah ben ouai merci. De toute façon je vais commencer par ta solution. Re-merci Andnotor
    Pas changer assiettes pour fromage.

  10. #10
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Il suffit de traiter WM_KEYDOWN dans TApplicationEvents.OnMessage.
    Ok, ça marche nickel. Merci Andnotor.
    Mais mon problème est qu'il est en "compétition" avec les TSpinEdit de mon interface
    Du coup, quand un SpinEdit a le focus, l'utilisateur se sert des flèches pour en modifier la valeur, et l'interface réagît également à l'évènement.
    Je pourrais fouiller partout sans être sûr que cela existe, mais si quelqu'un pouvait me dire comment savoir quel objet d'une interface a le focus sans fouiller toute l'interface à sa recherche, il serait une bien bonne personne .
    Pas changer assiettes pour fromage.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 745
    Points : 13 306
    Points
    13 306
    Par défaut
    Screen.ActiveControl

  12. #12
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    La fiche a un FocusControl qui indique quel composant est actuellement sélectionné.

  13. #13
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Points : 42
    Points
    42
    Par défaut
    Rrrâââhhh ! Merci mes amis. Je n'y croyais même pas.
    Ca devrait le faire.
    Pas changer assiettes pour fromage.

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

Discussions similaires

  1. [Système][fichier] recherche de fichier dans tout le disque dur
    Par helonear dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 15/12/2010, 10h43
  2. [1.x] ArrayIterator dans tout les interfaces
    Par belgacem.tlili dans le forum Symfony
    Réponses: 2
    Dernier message: 21/10/2010, 11h12
  3. [Interface]Caster dans un type interface ?
    Par Pill_S dans le forum Langage
    Réponses: 7
    Dernier message: 21/10/2005, 13h26
  4. Evenement clavier sur toute l'interface
    Par Guybrush dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 08/02/2005, 12h13
  5. Réponses: 9
    Dernier message: 09/11/2004, 11h41

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