Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Débutant
Débutant Pour bien débuter avec Delphi
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 30/11/2012, 18h27   #1
MIWAN
Membre du Club
 
Inscription : mars 2007
Messages : 96
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 96
Points : 64
Points : 64
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;
MIWAN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2012, 19h26   #2
ShaiLeTroll
Expert Confirmé Sénior
 
Avatar de ShaiLeTroll
 
Homme
Développeur C++\Delphi
Inscription : juillet 2006
Messages : 9 202
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

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

Informations forums :
Inscription : juillet 2006
Messages : 9 202
Points : 13 255
Points : 13 255
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

Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié !
ShaiLeTroll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2012, 20h15   #3
MIWAN
Membre du Club
 
Inscription : mars 2007
Messages : 96
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 96
Points : 64
Points : 64
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 .
MIWAN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2012, 21h01   #4
BuzzLeclaire
Membre Expert
 
Avatar de BuzzLeclaire
 
Homme
Dev/For/Vte/Ass
Inscription : août 2008
Messages : 1 499
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 499
Points : 1 059
Points : 1 059
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...
BuzzLeclaire est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2012, 21h08   #5
Montor
Membre émérite
 
Avatar de Montor
 
Homme
Inscription : avril 2008
Messages : 863
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations forums :
Inscription : avril 2008
Messages : 863
Points : 844
Points : 844
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
Montor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2012, 23h01   #6
BuzzLeclaire
Membre Expert
 
Avatar de BuzzLeclaire
 
Homme
Dev/For/Vte/Ass
Inscription : août 2008
Messages : 1 499
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 499
Points : 1 059
Points : 1 059
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..
BuzzLeclaire est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2012, 00h55   #7
Andnotor
Rédacteur/Modérateur
 
Avatar de Andnotor
 
Inscription : septembre 2008
Messages : 2 857
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 2 857
Points : 5 967
Points : 5 967
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
Andnotor est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 01/12/2012, 12h35   #8
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 032
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 1 032
Points : 2 665
Points : 2 665
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2012, 13h13   #9
Caribensila
Membre expérimenté
 
Avatar de Caribensila
 
Homme PIERRE-LUC REAUD
programmateur ( programmeur amateur ;)
Inscription : septembre 2010
Messages : 277
Détails du profil
Informations personnelles :
Nom : Homme PIERRE-LUC REAUD
Âge : 62
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : programmateur ( programmeur amateur ;)
Secteur : Santé

Informations forums :
Inscription : septembre 2010
Messages : 277
Points : 537
Points : 537
C'est, je pense, l'opportunité de l'utilisation d'un Timer qui pose problème et qui a été mal comprise par MIWAN.

Citation:
« 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é. »
Caribensila est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2012, 16h22   #10
MIWAN
Membre du Club
 
Inscription : mars 2007
Messages : 96
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 96
Points : 64
Points : 64
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 ?
MIWAN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2012, 16h26   #11
MIWAN
Membre du Club
 
Inscription : mars 2007
Messages : 96
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 96
Points : 64
Points : 64
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 .
MIWAN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2012, 17h18   #12
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 032
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 1 032
Points : 2 665
Points : 2 665
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2012, 18h37   #13
MIWAN
Membre du Club
 
Inscription : mars 2007
Messages : 96
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 96
Points : 64
Points : 64
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.
MIWAN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2012, 17h07   #14
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 032
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 1 032
Points : 2 665
Points : 2 665
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2012, 21h14   #15
MIWAN
Membre du Club
 
Inscription : mars 2007
Messages : 96
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 96
Points : 64
Points : 64
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
MIWAN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 09h44   #16
MIWAN
Membre du Club
 
Inscription : mars 2007
Messages : 96
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 96
Points : 64
Points : 64
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.
MIWAN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2012, 21h57   #17
tarekk73
Membre habitué
 
Homme Tarek Kouda
Développeur informatique
Inscription : décembre 2012
Messages : 72
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 : 72
Points : 102
Points : 102
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;
tarekk73 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2012, 15h50   #18
MIWAN
Membre du Club
 
Inscription : mars 2007
Messages : 96
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 96
Points : 64
Points : 64
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);

Citation:
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.

MIWAN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 22h46   #19
tarekk73
Membre habitué
 
Homme Tarek Kouda
Développeur informatique
Inscription : décembre 2012
Messages : 72
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 : 72
Points : 102
Points : 102
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
tarekk73 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h14.


 
 
 
 
Partenaires

Hébergement Web