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 :

Intercepter une touche


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Par défaut Intercepter une touche
    Bonjour,

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
        case Key of
            VK_RETURN: procedureA();
            VK_ESCAPE: procedureB();
        end;
    end;
    Lorsque j'appuie sur "entrée" ou sur "échap" les procédures s'exécutent correctement mais je voudrais éviter d'entendre un bip. Je ne sais pas si ce serait la solution mais j'ai tenté de mettre à la fin mais cela produit une erreur de compilation ...
    Comment faire ?

  2. #2
    Membre émérite
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Par défaut
    #0 est un caractère
    il faut mettre 0 et pas #0
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  3. #3
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Par défaut
    Effectivement merci, je n'ai plus l'erreur de compilation. En revanche j'entends toujours ce bip inesthétique.
    Comment l'éviter ?

  4. #4
    Membre émérite
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Par défaut
    Au lieu d'utiliser le onKeyDown, utilise le onKeyPress
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Tu as pensé à faire la même chose sur OnKeyUp ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  6. #6
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Par défaut
    J'entends toujours le bip avec OnKeyUp. Quant à onKeyPress le paramètre Key est attendu avec le type char et je ne sais pas comment transformer VK_ESCAPE pour que ça compile ...

  7. #7
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    C'était ça le problème ?? Chr(VK_ESCAPE), ça résoudra ton problème...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  8. #8
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Par défaut
    Le seul évènement à ne pas générer de bip c'est le onKeyPress.
    Merci.

  9. #9
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Bizarre...

    En général, je n'utilise même pas OnKeyDown et OnKeyUp pour gérer des touches "simples", je me contentes de mettre KeyPreview à True et d'utiliser OnKeyPress, je n'ai jamais eu besoin "d'annuler" la touche (du moins pas pour ESC !).

    Pour l'appli que je suis en train de faire, j'ai ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TMainForm.FormKeyPress(Sender: TObject; var Key: Char);
    begin
         If Ord(Key)=VK_ESCAPE Then
            Begin
            If Lak.Dialog.AskFor(QuitButton.Hint,qtQuitApp) Then
               QuitButton.Click;
            End;
    end;
    Pas un seul "bip"... Essaie de voir si ce genre de code fait pareil chez toi ou pas, en inhibant (même temporairement) OnKeyPress et OnKeyDown.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  10. #10
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Par défaut
    Tu voulais me faire tester la simulation d'un click si j'ai bien compris ? Chez moi en tout cas ça bip. En fait ça bip tant que j'annule pas la touche.

  11. #11
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par fredero
    Tu voulais me faire tester la simulation d'un click si j'ai bien compris ? Chez moi en tout cas ça bip. En fait ça bip tant que j'annule pas la touche.
    Houlà, tu prends au pied de la lettre, ou quoi ??? Je t'ai donné un code d'exemple, c'est la structure qui est importante, pas le traitement !!

    Je voulais te faire tester ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);
    begin
         Case Ord(Key) Of 
              VK_RETURN: procedureA(); 
              VK_ESCAPE: procedureB(); 
         End; 
    end;
    Réponds aussi aux points qui ont été soulignés, stp :
    - Ton KeyPreview est bien mis à True sur ta fiche ?
    - As-tu bien désactivé les gestionnaires OnKeyPress et OnKeyDown avant de tester, comme je te l'ai indiqué ?

    Tant qu'on y est : as-tu des boutons configurés comme "Default" ou "Cancel", sur cette même fiche ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  12. #12
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Par défaut
    - La structure en question provoque un bip.
    - KeyPreview est bien à true. En fait je suis obligé sinon la Form n'intercepte pas la touche.
    - je n'ai qu'un seul gestionnaire de touches déclaré c'est KeyPress
    - je ne sais pas ce que signifie des boutons configurés comme "Default" ou "Cancel" ... j'imagine que je n'en ai pas.

    En fait ma form est très simple elle ne contient que deux Tbuttons, deux TLabels et deux TEdits.

  13. #13
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Des TEdits ?? Tu ne serais pas, vraiment "au hasard", dans le champ d'un TEdit au moment où tu appuie sur ESC et que le bip se produit ? Si c'est le cas, il faut que tu regarde du côté des gestionnaires des TEdit, c'est probablement eux qui font les bips.

    Sinon, poste ton code (le DFM et le PAS), si ta fiche est aussi simple que ça, ça ira plus vite pour trouver...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  14. #14
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Par défaut
    Voici les codes: login.pas et login.dfm. Je te remercie.
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    unit login;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm2 = class(TForm)
        edtLogin: TEdit;
        lblLogin: TLabel;
        edtPassword: TEdit;
        lblPassword: TLabel;
        btnQuitter: TButton;
        btnOk: TButton;
        Label1: TLabel;
        procedure checkLogin();
        procedure btnOkClick(Sender: TObject);
        procedure FormKeyPress(Sender: TObject; var Key: Char);
        procedure btnQuitterClick(Sender: TObject);
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
        Form2: TForm2;
     
    implementation
     
     
    {$R *.dfm}
     
    procedure TForm2.btnOkClick(Sender: TObject);
    begin
        checkLogin();
    end;
     
    procedure TForm2.btnQuitterClick(Sender: TObject);
    begin
        Application.Terminate();
    end;
     
    procedure TForm2.checkLogin();
    begin
        if (edtLogin.text='toto') and (edtPassword.text='tata') then
        begin
            label1.caption:='ok';
        end
        else begin
            label1.caption:='pas ok';
        end;
    end;
     
    procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);
    begin
        case Key of
            chr(VK_RETURN): checkLogin();
            chr(VK_ESCAPE): Application.Terminate();
        end;
        //Key:=#0;
    end;
     
     
     
    end.
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    object Form2: TForm2
      Left = 510
      Top = 124
      BorderIcons = []
      BorderStyle = bsDialog
      Caption = 'Connexion'
      ClientHeight = 143
      ClientWidth = 287
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      KeyPreview = True
      OldCreateOrder = False
      Position = poDesktopCenter
      OnKeyPress = FormKeyPress
      PixelsPerInch = 96
      TextHeight = 13
      object lblLogin: TLabel
        Left = 83
        Top = 22
        Width = 32
        Height = 13
        Alignment = taRightJustify
        Caption = 'Login :'
      end
      object lblPassword: TLabel
        Left = 45
        Top = 52
        Width = 70
        Height = 13
        Alignment = taRightJustify
        Caption = 'Mot de passe :'
      end
      object Label1: TLabel
        Left = 17
        Top = 80
        Width = 253
        Height = 13
        Alignment = taCenter
        AutoSize = False
        Caption = '...'
      end
      object edtLogin: TEdit
        Left = 120
        Top = 20
        Width = 121
        Height = 21
        TabOrder = 0
        Text = 'toto'
      end
      object edtPassword: TEdit
        Left = 120
        Top = 50
        Width = 121
        Height = 21
        PasswordChar = '*'
        TabOrder = 1
        Text = 'tata'
      end
      object btnQuitter: TButton
        Left = 151
        Top = 100
        Width = 75
        Height = 25
        Caption = 'Quitter'
        TabOrder = 2
        OnClick = btnQuitterClick
      end
      object btnOk: TButton
        Left = 61
        Top = 100
        Width = 75
        Height = 25
        Caption = 'Ok'
        TabOrder = 3
        OnClick = btnOkClick
      end
    end

  15. #15
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    OK, j'ai compris où est ton problème... Justement, tu n'utilises pas les propriétés "Default" et "Cancel" de tes deux boutons !

    Si tu mets la propriété "Default" de ton bouton "btnOk" à True, il réagira automatiquement à la pression sur la touche Entrée.
    De même, si tu mets la propriété "Cancel" de ton bouton "btnQuitter" à True, c'est à la touche ESC qu'il réagira automatiquement...

    Du coup, plus besoin de ton évènement OnKeyPress, il faut et il suffit d'intégrer ton checkLogin dans le gestionnaire de click de btnOk.

    Voici le code corrigé :
    Login.pas
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    unit login;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm2 = class(TForm)
        edtLogin: TEdit;
        lblLogin: TLabel;
        edtPassword: TEdit;
        lblPassword: TLabel;
        btnQuitter: TButton;
        btnOk: TButton;
        Label1: TLabel;
        procedure btnOkClick(Sender: TObject);
        procedure btnQuitterClick(Sender: TObject);
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
        Form2: TForm2;
     
    implementation
     
     
    {$R *.dfm} 
     
    procedure TForm2.btnOkClick(Sender: TObject);
    begin
        if (edtLogin.text='toto') and (edtPassword.text='tata') then
        begin
            label1.caption:='ok';
        end
        else begin
            label1.caption:='pas ok';
        end;
    end;
     
    procedure TForm2.btnQuitterClick(Sender: TObject);
    begin
        Application.Terminate();
    end;
     
    end.
    Login.dfm :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    object Form2: TForm2
      Left = 510
      Top = 124
      BorderIcons = []
      BorderStyle = bsDialog
      Caption = 'Connexion'
      ClientHeight = 143
      ClientWidth = 287
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      KeyPreview = True
      OldCreateOrder = False
      Position = poDesktopCenter
      PixelsPerInch = 96
      TextHeight = 13
      object lblLogin: TLabel
        Left = 83
        Top = 22
        Width = 32
        Height = 13
        Alignment = taRightJustify
        Caption = 'Login :'
      end
      object lblPassword: TLabel
        Left = 45
        Top = 52
        Width = 70
        Height = 13
        Alignment = taRightJustify
        Caption = 'Mot de passe :'
      end
      object Label1: TLabel
        Left = 17
        Top = 80
        Width = 253
        Height = 13
        Alignment = taCenter
        AutoSize = False
        Caption = '...'
      end
      object edtLogin: TEdit
        Left = 120
        Top = 20
        Width = 121
        Height = 21
        TabOrder = 0
        Text = 'toto'
      end
      object edtPassword: TEdit
        Left = 120
        Top = 50
        Width = 121
        Height = 21
        PasswordChar = '*'
        TabOrder = 1
        Text = 'tata'
      end
      object btnQuitter: TButton
        Left = 151
        Top = 100
        Width = 75
        Height = 25
        Cancel = True
        Caption = 'Quitter'
        TabOrder = 2
        OnClick = btnQuitterClick
      end
      object btnOk: TButton
        Left = 61
        Top = 100
        Width = 75
        Height = 25
        Caption = 'Ok'
        Default = True
        TabOrder = 3
        OnClick = btnOkClick
      end
    end
    OK ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  16. #16
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Par défaut
    Merci beaucoup !

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

Discussions similaires

  1. Intercepter une touche appuyée sur le clavier
    Par pcayrol dans le forum C#
    Réponses: 12
    Dernier message: 20/01/2009, 20h38
  2. intercepter une touche clavier, c pourtant simple
    Par xoco dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 26/11/2008, 15h50
  3. Comment intercepter une touche clavier avec un projet GUI
    Par guitz2fr dans le forum Débuter
    Réponses: 12
    Dernier message: 24/06/2008, 21h50
  4. Intercepter une touche Quick Report
    Par platoon64 dans le forum Delphi
    Réponses: 2
    Dernier message: 03/08/2006, 17h33
  5. Réponses: 5
    Dernier message: 26/06/2006, 17h47

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