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 :

Frame et raccourci clavier : pas possible ?


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Frame et raccourci clavier : pas possible ?
    bonjour

    J'ai un morceau d'application qui utilise des frames pour de la saisie "modulaire" (plusieurs formats de frames hérité d'un ancêtre commun dans un scrollbox...) : tout marche bien.

    Je crée une nouvelle frame avec des besoins de raccourcis clavier (comme on le sait, l'utilisateur va toujours plus vite quand il n'a pas besoin de toucher sa souris) et j'y arrive pas

    Les boutons avec "&" ne réagissent pas, alors que sur la form en dessous, ça marche dans tous les cas

    Pas de keydown/keypress sur une frame : le problème viendrait-il de là ?

    J'ai même codé des keydown et keypress sur la form de dessous qui lançait une procédure créée dans l'ancêtre des frames et implémentée dans la frame qui m'intéresse : rien ne passe par keydown et keypress.

    Je veux faire un (vrai ou faux, peu importe) page control, je veux bien que la page change sur toutes les frames affichées, c'est même mieux
    Cela ne m'intéresse pas de coder l'évènement sur un contrôle en particulier (et le faire sur tous... )

    Vous avez une idée ? faut un notifyevent ? (un notify pour pouvoir utiliser ALT+touche, ça me parait un peu fort mais s'il n'y a que ça...)


  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 448
    Points
    28 448
    Par défaut
    les évènements clavier sont envoyés au control qui a le focus, il y a peu de chance que ce soit la Frame

    et TForm.KeyPreview permet a une fiche d'intercepter les touches avec ses contrôles enfants, mais ça n'existe pas pour une Frame
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    c'est ballot, si ça fonctionne bien à la souris, faut que je trouve le moyen de m'en passer

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Je maintiens en ce moment une application qui utilise massivement les
    J'ai ainsi une série de fenêtre qui contiennent une section spécifique ainsi que Frame qui contient 3 frames dont une contient un PageControl qui contient 7 Frames
    Moi qui n'aime pas les Frames, je suis servi !

    Les raccourcis via & fonctionne sur le PageControl contenu dans la Frame, il permet de se balader d'onglet en onglet
    Mais fonctionne aussi dans les Frames contenus dans le PageControl, cela agit sur le TBitBtn ou les TCheckBox ayant un raccourci

    Par contre, cela n'a pas été très bien pensé, car les & utilisent la même lettre pour plusieurs raccourcis avec les Frame c'est difficile de penser à la Frame Parent qui elle même est dans une autre Frame ...

    Selon les circonstances, parfois les raccourcis nécessite la touche ALT, et dans certains cas, il déclenche sans même le ALT
    En général, c'est selon le composant qui a le Focus,
    si c'est un TEdit, ALT nécessaire car c'est pour switch entre le mode saisie et le mode shorcut,
    si c'est un TStringGrid en lecture seule cela n'oblige pas le ALT
    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

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Je ne suis pas un fan des frames non plus, mais faut avouer quand dans certains cas de figures, c'est bien pratique

    J'ai fait un petit programme avec une form dans laquelle je colle des frames en dur (j'avais fait dynamiquement mais ça fait pareil), contenant un bouton avec &
    ça marche, mais pour la 1ère frame, aucun effet sur les autres. Même si le bouton d'une autre frame a le focus, le raccourci va déclencher le bouton de la 1ère (messagebox du nom de la frame, pas de risque de me tromper) alors que la touche Entrée va déclencher celui qui a le focus

    Je ne peux pas faire + simple et ça ne fonctionne déjà pas

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Les lettres sont toutes différentes ?
    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

  7. #7
    Futur Membre du Club
    Inscrit en
    Août 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Ah non, vu que ce sont les mêmes frames répétées, ce sont les mêmes raccourcis

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Voilà !
    C'est le premier qui est géré, les autres passent à la trappe !
    C'est que je disais dans mon précédent poste : "Par contre, cela n'a pas été très bien pensé, car les & utilisent la même lettre pour plusieurs raccourcis avec les Frame c'est difficile de penser à la Frame Parent qui elle même est dans une autre Frame ..."

    Je ne sais pas exactement comment son balayer les objets, je pense via la propriété Controls\Parent, dès qu'un objet répond au raccourci, c'est lui qui le reçoit, et cela s'arrête là !
    Les Frames ne sont pas autonomes, c'est la TForm qui contient le tout qui dispatch tout ça !

    Tu as bien mis KeyPreview à true pour gérer keydown/keypress ?
    Sinon utilise TApplication.OnMessage ou TApplicationEvents.OnMessage pour capturer WM_KEYDOWN et WM_SYSKEYDOWN
    Une fois le raccourci obtenu, tu regarderas quelle frame est en cours d'affichage et tu appeleras ses events !


    Une autre idée, serait d'utiliser un TTabControl au lieu de TPageControl
    Tu n'as dans ce cas qu'une seule Frame qui se recharge lors du changement d'onglet !
    La partie stockage des données sera plus subtile à gérer !
    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

  9. #9
    Futur Membre du Club
    Inscrit en
    Août 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci

    J'ai crû avoir touché au KeyPreview, manisfestement non, car cela fonctionne tel que j'ai codé !
    C'est un peu particulier, mais ce comportement m'intéresse : activation des onglets par un raccourci clavier, sur toutes les frames affichées en même temps

    Donc, sur la Form, j'ai mis dans FormKeyDown :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      if Shift = [ssAlt] then
        for i := 0 to ScrollBox_donnees.ComponentCount - 1 do
           (ScrollBox_donnees.Components[i] as TFrameAncetre).RaccourciClavier(Key);
    La méthone RaccourciClavier est virtuelle dans la Frame Ancêtre et implémentée dans la Frame qui m'intéresse : ça marche nickel

    Résolu !

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

Discussions similaires

  1. Raccourci clavier quand l'appli n'a pas le focus.
    Par piemur2000 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 09/12/2009, 11h08
  2. Réponses: 0
    Dernier message: 04/06/2008, 16h37
  3. Ne pas catcher un raccourci clavier
    Par alexthomas dans le forum MFC
    Réponses: 9
    Dernier message: 07/03/2008, 15h34
  4. raccourci clavier ne fonctionnant pas
    Par vinc-mai dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 04/02/2008, 17h58
  5. [configuration] pas de raccourci clavier et page JSP
    Par Erreip dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 08/11/2005, 12h14

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