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 :

Bloquer le focus sur 2 seuls composants (touche TAB)


Sujet :

Langage Delphi

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 540
    Points : 123
    Points
    123
    Par défaut Bloquer le focus sur 2 seuls composants (touche TAB)
    Bonjour à tous

    Je veux fixer la tabulation entre deux boutons et eux seuls. Je ne veux pas que TAB mette le focus sur un autre contrôle par exemple le boutons QUITTER.

    Voici ce que ça donne :



    Comment faire ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Si je me base uniquement sur ce que tu présentes, tu n'as rien à faire puisque les labels et panels ne prennent pas le focus.

    Si d'autres contrôles "focusables" sont présents alors il suffit simplement de mettre leurs propriétés TabStop à False.

    @+ Claudius

  3. #3
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Je veux fixer la tabulation entre deux boutons et eux seuls. Je ne veux pas que TAB mette le focus sur un autre contrôle par exemple le boutons QUITTER.
    Utilise des SpeedButton a lieux de TButton
    Si je me base uniquement sur ce que tu présentes, tu n'as rien à faire puisque les labels et panels ne prennent pas le focus.
    Les panels sont focusables

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 540
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Salut

    Si je me base uniquement sur ce que tu présentes, tu n'as rien à faire puisque les labels et panels ne prennent pas le focus.

    Si d'autres contrôles "focusables" sont présents alors il suffit simplement de mettre leurs propriétés TabStop à False.

    @+ Claudius
    OK. Mais impossible d'intercepter VK_TAB (touche tabulation) !
    Que ce soit avec KeyPress ou KeyDown, rien à faire Le focus change bien, mais je ne peux pas intercepter le vk_tab pr le traiter comme je veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm1.Btn_NonKeyDown(Sender: TObject; var Key: Word; 
      Shift: TShiftState);
    begin
            if Key = 27 then Refuser_Confirmation;
            if Key = vk_Tab then Basculer_Focus_Oui_Non; 
    end;

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Montor Voir le message
    Les panels sont focusables
    Avec une demande explicite avec SetFocus, mais pas avec la touche TAB ou encore un clic sur ce panel.

    Citation Envoyé par bvsud Voir le message
    OK. Mais impossible d'intercepter VK_TAB
    Pour quoi faire ?

    Reprenons, quels sont les composants présents sur ta fiche ?
    Car je ne comprends ton problème. Si comme tu le montres dans ton 1° message il n'y a que des panels, labels et les 2 boutons, TAB te fera basculer de l'un vers l'autre des deux boutons.

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 540
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Avec une demande explicite avec SetFocus, mais pas avec la touche TAB ou encore un clic sur ce panel.


    Pour quoi faire ?

    Reprenons, quels sont les composants présents sur ta fiche ?
    Car je ne comprends ton problème. Si comme tu le montres dans ton 1° message il n'y a que des panels, labels et les 2 boutons, TAB te fera basculer de l'un vers l'autre des deux boutons.
    Voilà : c'est exactement ça. Et TAB le fait bien.

    MAIS je veux modifier l'apparence du bouton détenant le focus (le mettre en relief, quoi, fsBold, modif de couleur, etc). Donc, lorsque TAB bascule le focus de l'un à l'autre, je dois envoyer des instructions. Comment le faire si je n'arrive pas à détecter l'appui sur TAB ??

    C'est là le seul pb. Au départ, le bouton "focusé" est bien en relief... mais à l'appui de TAB, il ne change pas ! Même si c'est bien l'autre bouton qui détient alors le focus !

    TAB (VK_TAB) est réellement indétectable ?

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Utilise les événements OnEnter et OnExit des boutons.
    Que tu implémentes par exemple comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    procedure TForm1.BtnEnter(Sender: TObject);
    begin
      with TButton(Sender) do
      begin
        Font.Style := [fsBold];
        Font.Color := clBlue;
      end;
    end;
     
    procedure TForm1.BtnExit(Sender: TObject);
    begin
      with TButton(Sender) do
      begin
        Font.Style := [];
        Font.Color := clBlack;
      end;
    end;
    Il suffit d'assigner des 2 événements à tes 2 boutons.

    @+ Claudius

  8. #8
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 540
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Re,

    Utilise les événements OnEnter et OnExit des boutons.
    Que tu implémentes par exemple comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    procedure TForm1.BtnEnter(Sender: TObject);
    begin
      with TButton(Sender) do
      begin
        Font.Style := [fsBold];
        Font.Color := clBlue;
      end;
    end;
     
    procedure TForm1.BtnExit(Sender: TObject);
    begin
      with TButton(Sender) do
      begin
        Font.Style := [];
        Font.Color := clBlack;
      end;
    end;
    Il suffit d'assigner des 2 événements à tes 2 boutons.

    @+ Claudius

    OK !! Je vais appliquer le truc . Merci !

  9. #9
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 540
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Re,

    Utilise les événements OnEnter et OnExit des boutons.
    Que tu implémentes par exemple comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    procedure TForm1.BtnEnter(Sender: TObject);
    begin
      with TButton(Sender) do
      begin
        Font.Style := [fsBold];
        Font.Color := clBlue;
      end;
    end;
     
    procedure TForm1.BtnExit(Sender: TObject);
    begin
      with TButton(Sender) do
      begin
        Font.Style := [];
        Font.Color := clBlack;
      end;
    end;
    Il suffit d'assigner des 2 événements à tes 2 boutons.

    @+ Claudius
    Ca marche pas J'ai fini par déboucher là-dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.Btn_NonKeyPress(Sender: TObject; var Key: Char);
    begin
            Touche := integer(Key);
     
            if Touche = 27 then Refuser_Confirmation
            else Focuser_Btn_Oui; 
     
    end;
    J'ai essayé avec ton With et Sender : pas de réaction.

    De toute façon, TAB n'est pas interceptée à contrario de toutes les autres touches !! Donc, la procédure Focuser_Btn_Oui n'est appelée que si je tape sur a,b,c.... etc, mais pas TAB.

    TAB déplace effectivement le focus d'un bouton à l'autre, mais c'est tout. Comme on ne peut pas la détecter, on n epeut pas la traiter. C'est comme si le compilo se chargeait de tout sitôt que TAB est appuyée, et qu'il empêche le programmeur d'implémenter du code.

    Les routines Focuser_Btn_Oui et Focuser_Btn_Non sont bien appelées... mais pas si je tape sur TAB !!! C'est fou ça...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    procedure Focuser_Btn_Oui;
    begin
          Form1.Btn_Oui.SetFocus;
          Form1.Btn_Oui.Font.Style := [fsBold];
          Form1.Btn_Oui.ColorText := clRed;
     
          Form1.Btn_Non.Font.Style := [];
          Form1.Btn_Non.ColorText := clBlack;
     
    end;
     
     
    procedure Focuser_Btn_Non;
    begin
          Form1.Btn_Non.SetFocus;
          Form1.Btn_Non.Font.Style := [fsBold];
          Form1.Btn_Non.ColorText := clRed;
     
          Form1.Btn_Oui.Font.Style := [];
          Form1.Btn_Oui.ColorText := clBlack;
    end;

  10. #10
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut


    Citation Envoyé par bvsud Voir le message
    Ca marche pas ...
    J'ai essayé avec ton With et Sender : pas de réaction.
    peux-tu nous montrer comment tu as implémenté la proposition de Cl@udius ?

Discussions similaires

  1. Réponses: 15
    Dernier message: 20/02/2014, 14h54
  2. Bloquer le focus sur un champ
    Par Ric21 dans le forum IHM
    Réponses: 9
    Dernier message: 19/03/2007, 17h26
  3. [C#] Une seule instance : focus sur l'appi lancée
    Par annalady dans le forum Windows Forms
    Réponses: 1
    Dernier message: 14/04/2006, 11h51
  4. donner le focus sur un composant dont la fenetre est invisib
    Par yoghisan dans le forum Composants VCL
    Réponses: 12
    Dernier message: 17/06/2005, 16h27
  5. Hook sur un seul composant d'un TFrom
    Par Neilos dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/11/2004, 17h46

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