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

Delphi Discussion :

Limiter l'évènement OnKeyPress


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 14
    Points : 12
    Points
    12
    Par défaut Limiter l'évènement OnKeyPress
    Bonjour,
    je développe une application qui lit un port série (1 données / seconde) et qui trace des graphiques en même temps.
    La priorité numéro 1 de l'application est l'acquisition des données par le port série.
    Sur mes graphiques l'utilisateur peut déplacer (touches up et down) un curseur afin de lire les valeurs (X,Y) correspondantes.
    Le problème qui se pose est que lorsque l'utilisateur laisse appuyer sur une des 2 touches pour monter ou descendre plus vite, l'activité du PC atteint les 100% et l'acquisition du port série ne se fait plus correctement (les données ne sont pas traitées dès qu'elles arrivent).
    Je voudrais donc limiter l'évènement onKeyPress pour qu'il soit impossible par exemple d'appuyer 2 fois de suite sur une touche sans qu'il se passe une demi seconde.
    D'avance merci...

  2. #2
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Bonjour,

    Sur l'évenement OnKeyPress tu dois avoir la passibilité de "stopper" le traitement par
    ou
    je ne connais plus le type de key.

    Il faudra parcontre que tu détermines quand tu acceptes ou refuses de traiter l'eévenement.
    soit en déclanchant un timer (qui consome un peu aussi) qui tout les x intervals réouvrira l'autorisation de traitement.

    Autrement le clavier répond tout les 250 millisecondes et je crois que c'est un paramètre sur lequel tu peux jouer. Tu peux sans doute chercher de ce côté aussi.

    a+

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Je crains que le même problème se produise pour d'autres types d'actions (exemple : déplacement inintérrompu de la fenêtre - en restant cliqué sur le bandeau).

    Un timer de quelque dizaines de millisecondes est-il utilisé pour lire les caractères de la ligne série ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 160
    Points : 167
    Points
    167
    Par défaut Mmmm...
    Citation Envoyé par yoco9
    Bonjour,
    je développe une application qui lit un port série (1 données / seconde) et qui trace des graphiques en même temps.
    La priorité numéro 1 de l'application est l'acquisition des données par le port série.
    Sur mes graphiques l'utilisateur peut déplacer (touches up et down) un curseur afin de lire les valeurs (X,Y) correspondantes.
    Le problème qui se pose est que lorsque l'utilisateur laisse appuyer sur une des 2 touches pour monter ou descendre plus vite, l'activité du PC atteint les 100% et l'acquisition du port série ne se fait plus correctement (les données ne sont pas traitées dès qu'elles arrivent).
    Je voudrais donc limiter l'évènement onKeyPress pour qu'il soit impossible par exemple d'appuyer 2 fois de suite sur une touche sans qu'il se passe une demi seconde.
    D'avance merci...
    Dites nous en plus mon cher...
    Avec quoi travaillez vous? Objet TTImer? Thread?
    Comment attaquez vous la RS232? Objet trouvé sur internet? unit à vous?
    Baud rate?
    Vos etes sur une lecture "passive"? ou sur une sorte de protocol question/reponse?
    Comment faites vous votre graphique?
    peut-on avoir un bout de code?

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Pour le port j'utilise Async Pro.
    La lecture se fait par l'évènement OnTrigger.
    la lecture est passive.
    Pour le graphique j'utilise le composant TChart mais reste ouvert à toutes propositions sur ce sujet (quelques bugs sur le zoom).

  6. #6
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    et le code mon petit???

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    pas besoin de bout de code
    le thread est la meilleur des solutions afin de pouvoir fonctionnée en tache
    de fond

    le fait de bloquer l'appui sur les touche ne lui aportera rien de plus


    @+ Phil

  8. #8
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    le thread est la meilleur des solutions afin de pouvoir fonctionnée en tache de fond
    100% d'accord, mais une bibli de gestion du port série correcte doit dèjà utiliser cette technique.

    Peut-être simplement essayer une instruction Application.processmessage dans le Onkeypress.

  9. #9
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    la gestion des touches est fait dans une procedure(keyup,keydon) ou normal(l'objet lui meme le fait)????

Discussions similaires

  1. [Débutant] Ajouter un évènement OnKeyPress à un textBox
    Par nath-0-0 dans le forum C#
    Réponses: 2
    Dernier message: 04/04/2012, 17h04
  2. [Dojo] Suppression de l'événement onKeyPress
    Par DevBetty dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 23/11/2009, 14h48
  3. Déconnecter l'événement onKeyPress
    Par DevBetty dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 18/11/2009, 10h41
  4. question sur évènement OnKeyPressed
    Par steph_1 dans le forum Langage
    Réponses: 3
    Dernier message: 14/09/2007, 15h29
  5. Réponses: 5
    Dernier message: 15/04/2006, 23h01

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