Tjrs on keyPress les touches F?

Signaler
Messages postés
37
Date d'inscription
jeudi 27 juin 2002
Statut
Membre
Dernière intervention
13 août 2002
-
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
-
Comment peut on trapper une touche F9 par exemple. J'essaie

if (key=char(VK_F9)) then do something...;

sans succes

aussi pourquoi dans l'aide de delphi 6 enterprise ils parlent de constante sous la forme KEY_A, KEY_B et pourtant meme en ajoutant l'unit dans les uses ils ne les reconnaient pas..

merci

E_____P
Enjoy Programmation
Jeff

3 réponses

Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
1
Car ces touches ne sont accessibles par le OnKeyPressed. Il faut utiliser le OnKeyDown :

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key=VK_F9 Then ShowMessage('F9');
end;

Il faut vérifier que le KeyPreview de la fiche est bien à True pour que toutes les touches passent d'abord par la fiche avant les contrôles.

Pour les VK_A à VK_Z bien qu'elles soient définies dans l'aide, les constante n'existent pas dans delphi. Mais elles correspondes à leur code Ascii. Donc tu peux comparer Key avec Word('A') et Word('Z').

Attention : On key donc renvoie toujours le code de la touche appuyée indépendemment de l'état du capslock ou des ctrl-alt. C'est au programme de le gérer en utilisant la valeur de Shift de l'évènnement. ( 'a' ne sera jamais envoyé, ce sera toujours 'A' de même Shift-F9 donne toujours le code F9 avec ssShit dans Shift ).

Il faut noter aussi que la fenêtre doit être active pour que le OnKeyDown fonctionne, si une fiche est en arrière plan alors ce n'est pas possible. Si tu souhaite avoir des raccourcis utilisiables de n'importe quel endroit de l'appli, il faut utiliser les messages de Windows ou le composant TRaccourci que j'ai publié sur ce site il y a quelques semaines.

--- :sleepy) Nono du Moulin :sleepy) ---
Messages postés
37
Date d'inscription
jeudi 27 juin 2002
Statut
Membre
Dernière intervention
13 août 2002

Juste besoin d'une petite précision... dans ce cas le sender sera quoi??? Le controle ayant le focus??? Ou le formulaire lui-meme??

merci bcp pour l'aide Nono, c'est tjrs incroyablement complet.

E_____P
Enjoy Programmation
Jeff
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
1
Dans ce cas le Sender est l'adresse de la fiche ( car c'est sur elle qu'est défini l'évènement ).

Mais tu peux connaitre le contrôle actif au moment de l'appui par Form1.ActiveControl. Par exemple :
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key=VK_F9 Then ShowMessage('F9:'+Form1.ActiveControl.Name);
end;
Form1.ActiveControl est utilisable comme Sender.

--- :sleepy) Nono du Moulin :sleepy) ---