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

WinDev Discussion :

Gestion des événements clavier dans une fenêtre. [WD15]


Sujet :

WinDev

  1. #1
    Membre averti
    Homme Profil pro
    Buisint
    Inscrit en
    Septembre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Buisint

    Informations forums :
    Inscription : Septembre 2008
    Messages : 220
    Points : 438
    Points
    438
    Par défaut Gestion des événements clavier dans une fenêtre.
    Bonjour à tous,

    Je cherche à intercepter la touche "Echappe" dans une fenêtre Windev... et cela ne fonctionne pas, du moins pas comme je le souhaiterais !

    En l'espèce, j'ai une fenêtre appelée FEN_ModeListe qui contient un champ Fenêtre Interne.
    Le champ Fenêtre Interne prend pour source une fenêtre Interne ne comportant qu'un seul champ : un champ table.
    La source peut être au choix une table sur le fichier client, le fichier clé ou le fichier produit.
    La sélection se fait par bouton de la barre d'outil (un pour chaque fichier).

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    FEN_ModeListe
      -> FI_ListeClé     -> champ TABLE_Clé
      -> FI_ListeClient  -> champ TABLE_Client
      -> FI_ListeProduit -> champ TABLE_Produit
    Cela établi, l'idée est de permettre à l'utilisateur de fermer FEN_ModeListe par un simple Echappe (par exemple, s'il a ouvert la liste par erreur).

    Pour ce faire, je peux utiliser un "Evénement()" sur chacun des champs TABLE, et cela marche très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Evénement(EntréeLigne,TableAGérer,WM_KEYDOWN)
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PROCEDURE EntréeLigne(MessageWindows)
       SI ToucheEnfoncée(VK_RETURN) OU MessageWindows=WM_LBUTTONDBLCLK ALORS
           Utilise(FEN_GeneClefs)
    FIN
    SI ToucheEnfoncée(VK_ESCAPE) ALORS
           Ferme(FEN_ModeListe)
    FIN
    Mais cela suppose de gérer les événements à trois endroits de l'application.

    Je préfère donc mettre en œuvre une solution au niveau de la fenêtre FEN_ModeListe.
    Mais pour ce faire, je suis apparemment obligé d'utiliser la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Evénement(Echappe,FEN_ModeListe..Nom+".*",WM_KEYDOWN)
    Or, cette syntaxe fait référence aux champs, alors que je me disais (naïvement) qu'il devrait être possible de faire la même chose en ne faisant référence qu'à la fenêtre (comme semble l'indiquer la documentation), de cette façon-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Evénement(Echappe,FEN_ModeListe..Nom,WM_KEYDOWN)
    Ce qui ne fonctionne pas, d'où - enfin - ma question : pourquoi cela ne fonctionne-t-il pas ??

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 410
    Points : 513
    Points
    513
    Par défaut
    Salut,

    Si c'est uniquement pour la touche Echapp pourquoi ne pas créer un bouton invisible ou hors fenêtre de type Annulation ou avec un raccourci Echapp puis de lui associer le code que tu veux ?

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4 341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4 341
    Points : 5 953
    Points
    5 953
    Par défaut
    En spécifiant le nom de la fenêtre comme objet concerné par l'évènement, tu ne récupères que les évènement propre à la fenêtre, en excluant ceux concernant les champs. Si tu veux gérer les 2, tu dois mettre 2 lignes avec la fonction evenement, une sur les champs et une pour la fenêtre. Tu peux bien évidemment appeler la même fonction.

  4. #4
    Membre averti
    Homme Profil pro
    Buisint
    Inscrit en
    Septembre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Buisint

    Informations forums :
    Inscription : Septembre 2008
    Messages : 220
    Points : 438
    Points
    438
    Par défaut
    @basam95 :
    merci de ta réponse.

    Ça me semble être une très bonne idée et plus simple que ma gestion par événement ; merci.

    C'est une technique dont je n'ai pas encore le réflexe dans Windev.
    Toutefois, je pourrais être amené à prendre en compte d'autres événements dans mon gestionnaire unique, comme je le fais aujourd'hui pour chaque table, et cela ne fonctionnerait alors plus.

    @Louis Griffont :
    merci de ta réponse.

    C'est très clair.

    Je clos la discussion.

    Et merci pour votre rapidité !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/07/2008, 19h29
  2. Intégrer des raccourcis claviers dans une JFrame
    Par FistOr dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 18/03/2008, 18h46
  3. Trapper les événements clavier dans une fenêtre
    Par NicoV dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 02/03/2008, 10h28
  4. Réponses: 7
    Dernier message: 19/04/2007, 13h33
  5. Réponses: 2
    Dernier message: 12/10/2004, 13h04

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