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

Composants VCL Delphi Discussion :

[TMemo] Comment insérer les touches pressées ?


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 168
    Points : 123
    Points
    123
    Par défaut [TMemo] Comment insérer les touches pressées ?
    Bonjour,
    Lors de l'execution de mon programme, je suis parfois soumis à saisir un entier, je voudrais que celui-ci s'affiche dans un memo lors de la saisie.

    La saisie se fait pendant l'execution du programme, donc je ne peux utiliser le lines.add.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      if (mode_saisie = true) then // On récupère les touches pressées
      begin
        // Vérification que les touches pressées sont que des entiers (0 à 9)
        if (Key in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']) then
        begin
          buffer.ajouter(strtoint(Key)) ;
          console.SetSelTextBuf(PChar(Key)) ;
        end ;
      end ;
    end;
    Il n'a aucun effet sur le memo. Maintenant si j'utilise ce code là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      if (mode_saisie = true) then // On récupère les touches pressées
      begin
        // Vérification que les touches pressées sont que des entiers (0 à 9)
        if (Key in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']) then
        begin
          buffer.ajouter(strtoint(Key)) ;
          console.SetSelTextBuf(@Key) ;
        end ;
      end ;
    end;
    Soit utiliser @ et non PChar(), alors les touches sont bien affichés mais il rajoute un 'B' après chaque saisie et je ne comprend pas pourquoi...

    Une idée ?

    Merci.

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2003
    Messages : 43
    Points : 57
    Points
    57
    Par défaut
    Pourquoi tu ne peux pas utiliser Lines.Add pendant l'exécution ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Memo1.Lines.Add(Key);
    Ca devrait très bien marcher

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 168
    Points : 123
    Points
    123
    Par défaut
    chaque touche pressé doit être ajouter à la suite, enfin sur la même ligne dans le mémo.

    merci

  4. #4
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); 
    begin 
      if (mode_saisie = true) then // On récupère les touches pressées 
      begin 
        // Vérification que les touches pressées sont que des entiers (0 à 9) 
        if (Key in ['0'.. '9']) then 
        begin 
          buffer.ajouter(strtoint(Key)) ; 
          console.Lines.Text :=  console.Lines.Text+Key;
        end ; 
      end ; 
    end;
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2003
    Messages : 43
    Points : 57
    Points
    57
    Par défaut
    Ah d'accord, donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Memo1.Text := Memo1.Text + Key;
    Ca devrait aller

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2003
    Messages : 43
    Points : 57
    Points
    57
    Par défaut
    Arf grillé

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 862
    Points : 11 327
    Points
    11 327
    Billets dans le blog
    6
    Par défaut
    je suppose que ton memo a le focus et ta form le KeyPreview
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); 
    begin if (mode_saisie = true) then // On récupère les touches pressées 
      begin 
        // Vérification que les touches pressées sont que des entiers (0 à 9) 
        if  not Key in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']) then key := #0;
     
    end ; 
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 168
    Points : 123
    Points
    123
    Par défaut
    Bah ma technique fonctionne presque, je ne comprend pas c'est pourquoi il rajoute un caractère...

    je tape 123, il affiche 1B2B3B :/

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 168
    Points : 123
    Points
    123
    Par défaut
    Je n'avais pu vu quelques réponses vu quelles ont été postées en même temps... La technique de Nono40 fonctionne !

    Merci à tous.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/04/2011, 20h45
  2. Réponses: 1
    Dernier message: 23/08/2006, 11h38
  3. Réponses: 3
    Dernier message: 30/06/2006, 14h39
  4. Réponses: 2
    Dernier message: 25/03/2005, 09h23

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