Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 19 sur 19
  1. #1
    Membre du Club
    Inscrit en
    mars 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : mars 2007
    Messages : 96
    Points : 69
    Points
    69

    Par défaut Simuler OnKeyDown dans TTimer

    Bonjour a toutes et a tous .
    Voila plus de deux semaines que je galère pour simuler la procédure - FormKeyDown - dans un timer.
    Pour bien expliquer : comment savoir si une touche a été pressée dans l’évènement d’un TTimer .
    Merci pour toutes aide

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    Var Key:Word;
        Shift: TShiftState;
    begin
    label2.Caption:= chr(Key);
     
     if  GetKeyState(VK_SHIFT) < 0 then 
        begin
          Label1.caption:='Shift +'+Label2.Caption;
       end;
     
    end;

  2. #2
    Expert Confirmé Sénior Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    10 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 10 073
    Points : 14 301
    Points
    14 301

    Par défaut

    Essaye ceci

    Code :
    1
    2
    3
    4
    5
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
     if  (GetAsyncKeyState(VK_SHIFT) and $8000) <> 0 then
        Label1.caption:='Shift +'+Label2.Caption;
    end;
    Il faut que Shift soit appuyé au même du Timer, si tu as laisse Interval à 1000, tu risque de le louper
    Essaye à 50ms, n'oublie pas le Enabed du Timer aussi !

    GetAsyncKeyState and $0001 permet de gérer si Shift a été appuyé entre cet appel et le précédent, je ne l'ai jamais utilisé ainsi pour ma part

    On a parlé de cela dans Problème de touche clavier , je te laisse lire ce sujet
    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

  3. #3
    Membre du Club
    Inscrit en
    mars 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : mars 2007
    Messages : 96
    Points : 69
    Points
    69

    Par défaut

    Merci ShaiLeTroll pour votre réponse si rapide

    je n'ai pas de problème pour la détection du Shift mais mon problème est que je ne sais comment que Label2 intercepte la touche clavier appuyée .

  4. #4
    Membre Expert Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    août 2008
    Messages
    1 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : août 2008
    Messages : 1 527
    Points : 1 024
    Points
    1 024

    Par défaut

    Citation Envoyé par MIWAN Voir le message
    mon problème est que je ne sais comment que Label2 intercepte la touche clavier appuyée .
    Normal un TLabel n'est pas un descendant de TWinControl mais d'un TGraphicControl

    Il faut que tu l'attaque avec les Evénements Windows WM_KEY etc...

  5. #5
    Membre émérite Avatar de Montor
    Homme Profil pro
    Inscrit en
    avril 2008
    Messages
    863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : avril 2008
    Messages : 863
    Points : 891
    Points
    891

    Par défaut

    Citation Envoyé par BuzzLeclaire Voir le message
    Normal un TLabel n'est pas un descendant de TWinControl mais d'un TGraphicControl

    Il faut que tu l'attaque avec les Evénements Windows WM_KEY etc...

    Elle ne détienne pas le focus

  6. #6
    Membre Expert Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    août 2008
    Messages
    1 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : août 2008
    Messages : 1 527
    Points : 1 024
    Points
    1 024

    Par défaut

    Citation Envoyé par Montor Voir le message
    Elle ne détienne pas le focus
    Cela dépends de ce que tu souhaite faire, si c'est un déplacement personnellement je place le tlabel dans un tpanel.
    Si c'est juste pour détecter le clique pour faire une modification de texte cela suffira..

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    septembre 2008
    Messages
    3 413
    Détails du profil
    Informations forums :
    Inscription : septembre 2008
    Messages : 3 413
    Points : 5 795
    Points
    5 795

    Par défaut

    Citations

    1. Simuler OnKeyDown dans TTimer
    2. comment savoir si une touche a été pressée dans l’évènement d’un TTimer
    3. je n'ai pas de problème pour la détection du Shift mais mon problème est que je ne sais comment que Label2 intercepte la touche clavier appuyée


    Perso... j'ai pas compris la question

  8. #8
    Expert Confirmé Sénior
    Avatar de Ph. B.
    Homme Profil pro Philippe
    Freelance
    Inscrit en
    avril 2002
    Messages
    1 339
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2002
    Messages : 1 339
    Points : 4 011
    Points
    4 011

    Par défaut

    Citation Envoyé par Andnotor Voir le message
    Perso... j'ai pas compris la question
    C'est ce que je me suis dit hier soir...
    Philippe.

  9. #9
    Membre éprouvé Avatar de Caribensila
    Homme Profil pro PIERRE-LUC REAUD
    Inscrit en
    septembre 2010
    Messages
    278
    Détails du profil
    Informations personnelles :
    Nom : Homme PIERRE-LUC REAUD
    Âge : 63
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : septembre 2010
    Messages : 278
    Points : 494
    Points
    494

    Par défaut

    C'est, je pense, l'opportunité de l'utilisation d'un Timer qui pose problème et qui a été mal comprise par MIWAN.

    « Le composant Timer permet de déclencher un événement (une seule fois ou de façon répétitive) après un intervalle de temps mesuré. »

  10. #10
    Membre du Club
    Inscrit en
    mars 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : mars 2007
    Messages : 96
    Points : 69
    Points
    69

    Par défaut

    Citation Envoyé par Andnotor Voir le message
    Citations

    1. Simuler OnKeyDown dans TTimer
    2. comment savoir si une touche a été pressée dans l’évènement d’un TTimer
    3. je n'ai pas de problème pour la détection du Shift mais mon problème est que je ne sais comment que Label2 intercepte la touche clavier appuyée


    Perso... j'ai pas compris la question

    peut être que je n'étais pas claire :

    dans les événements (onKeyDown et onKeyPress) le label intercepte les caractères tapés dans le clavier ; mais quand la forme n'est pas active on perd la réception des touches . a cause de ce la je cherche a simulé ces procédures dans un Ttimer;

    j'ai bien fait beaucoup de manipulations et je n'ai pas pu arriver a mes besoins

    par exemple :les procédures de Sub0
    http://www.developpez.com/telecharge...e2ee45a2146ee9

    on voit qu'il détecte la sourie et meme que la fiche(Form) n'a pas de focus , mais comment afficher les caractères svp ?

  11. #11
    Membre du Club
    Inscrit en
    mars 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : mars 2007
    Messages : 96
    Points : 69
    Points
    69

    Par défaut

    Citation Envoyé par Caribensila Voir le message
    C'est, je pense, l'opportunité de l'utilisation d'un Timer qui pose problème et qui a été mal comprise par MIWAN.
    oui je ne sais comment procéder pour que le label affiche les caractères .

  12. #12
    Expert Confirmé Sénior
    Avatar de Ph. B.
    Homme Profil pro Philippe
    Freelance
    Inscrit en
    avril 2002
    Messages
    1 339
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2002
    Messages : 1 339
    Points : 4 011
    Points
    4 011

    Par défaut

    Citation Envoyé par MIWAN Voir le message
    peut être que je n'étais pas claire :
    Eh bien, je dirais pas très...
    Citation Envoyé par MIWAN Voir le message
    dans les événements (onKeyDown et onKeyPress) le label intercepte les caractères tapés dans le clavier ; mais quand la forme n'est pas active on perd la réception des touches . a cause de ce la je cherche a simulé ces procédures dans un Ttimer;
    Si la fiche n'est pas active, c'est qu'une autre l'est et c'est elle qui récupère les événements clavier (les messages windows en fait) ?

    En fait, je pense que la solution revient à traiter ces messages, mais pour en être sur, pourriez vous présenter plus concrètement ce que vous voulez obtenir comme fonctionnement ?
    Philippe.

  13. #13
    Membre du Club
    Inscrit en
    mars 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : mars 2007
    Messages : 96
    Points : 69
    Points
    69

    Par défaut

    Citation Envoyé par Ph. B. Voir le message

    En fait, je pense que la solution revient à traiter ces messages, mais pour en être sur, pourriez vous présenter plus concrètement ce que vous voulez obtenir comme fonctionnement ?
    OK

    pour l'affichage de l'état des souris il est dans le source de Mr: Sub0
    ce qui me manque :
    1 - si je tape c sur le clavier ---> le TLabel affiche c.
    2 - si je fait Shift + C ---> Le TLabel affiche : ' Shift + ' C
    ainsi que pour les autres combinaisons du clavier.

  14. #14
    Expert Confirmé Sénior
    Avatar de Ph. B.
    Homme Profil pro Philippe
    Freelance
    Inscrit en
    avril 2002
    Messages
    1 339
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2002
    Messages : 1 339
    Points : 4 011
    Points
    4 011

    Par défaut

    Citation Envoyé par MIWAN Voir le message
    ce qui me manque :
    1 - si je tape c sur le clavier ---> le TLabel affiche c.
    2 - si je fait Shift + C ---> Le TLabel affiche : ' Shift + ' C
    ainsi que pour les autres combinaisons du clavier.
    On pourrait peut-être utiliser un TApplicationEvents qui se chargerait d'intercepter les messages et de traiter ceux qui sont pertinents via le gestionnaire de message OnMessage. Les messages à étudier sont entre autres WM_KEYDOWN, WM_KEYUP, WM_CHAR...
    En fonction de l'information capturée, on peut remplir de manière adéquate le TLabel.
    Philippe.

  15. #15
    Membre du Club
    Inscrit en
    mars 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : mars 2007
    Messages : 96
    Points : 69
    Points
    69

    Par défaut

    bonsoir

    pour les Touches shift , alt c'est bon avec le code suivant pour ce qui s'intéresse

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     
    dans un timer 
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      i : byte;
    begin
     
      for i:=8 To 222 do
      begin
             if GetAsyncKeyState(i)=-32767 then
          if GetKeyState(VK_Shift)<0 then
          Label1.Caption:='Shift + '+(GetCharFromVirtualKey(i))
          else
          Label1.Caption:=(GetCharFromVirtualKey(i));
      end;
     
     
    end;
    maintenant je suis bloqué par la combinaison VK_CONTROL et un autre caractère . la ou j'espère une aide

  16. #16
    Membre du Club
    Inscrit en
    mars 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : mars 2007
    Messages : 96
    Points : 69
    Points
    69

    Par défaut

    Citation Envoyé par Andnotor Voir le message
    Citations

    1. Simuler OnKeyDown dans TTimer
    2. comment savoir si une touche a été pressée dans l’évènement d’un TTimer
    3. je n'ai pas de problème pour la détection du Shift mais mon problème est que je ne sais comment que Label2 intercepte la touche clavier appuyée


    Perso... j'ai pas compris la question

    bonjour

    je cherche a savoir comment intercepter une combinaison des touches clavier.

  17. #17
    Membre actif
    Homme Profil pro Tarek Kouda
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Nom : Homme Tarek Kouda
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : décembre 2012
    Messages : 110
    Points : 160
    Points
    160

    Par défaut onkeydown de tforme

    salu a tt le monde
    il n'existe pas un evenement onkeydown dans le composant ttimer
    mai en pent jouer avec on keydown de notre form et en utilison une variable de teste pour savoir si une touche et enfoncer moi j'utilise la varibla tag de timer si tag a la valeur 1 alor une touche est enfoncer sinon on fai rien .
    voula la source

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
    timer1.Tag := 1;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    if timer1.Tag = 1 then
    begin
    //--- ecrire ce que veu tu faire
    timer1.tag :=0;    // renitialiser la variable a 0
    end
     
     
    end;

  18. #18
    Membre du Club
    Inscrit en
    mars 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : mars 2007
    Messages : 96
    Points : 69
    Points
    69

    Par défaut

    bonjour

    Citation Envoyé par tarekk73
    il n'existe pas un evenement onkeydown dans le composant ttimer

    ça tt le monde le sait c'est pour cela j'ai le titre (simulation);

    moi j'utilise la varibla tag de timer si tag a la valeur 1 alor une touche est enfoncer sinon on fai rien .
    ce petit trick ne marche pas quand la fiche perd le focus .

    on toutes les cas je suis très reconnaissant de votre intervention merci.

    NB:

    je crois que je dois fouiller dans les HOOKS - Claviers.


  19. #19
    Membre actif
    Homme Profil pro Tarek Kouda
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Nom : Homme Tarek Kouda
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : décembre 2012
    Messages : 110
    Points : 160
    Points
    160

    Par défaut ce petit trick ne marche pas quand la fiche perd le focus

    salu amie
    onkeydown existe que dans les composantS visuel ( les composants qui recoit la focalisation)
    dans notre cas ttimer ne recoit pas la focalisation. c'est pour ça j'ai utilisez un composant visuel . en plus de ça onkeydown de n'importe quel composant ne s'execute automatiquement que si son composant et on focalisation .
    merci et bon courage amie

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •