Tjrs on keyPress les touches F?

MasterJ Messages postés 37 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 13 août 2002 - 29 juil. 2002 à 22:21
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 - 29 juil. 2002 à 22:46
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
A voir également:

3 réponses

cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
29 juil. 2002 à 22:34
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) ---
MasterJ Messages postés 37 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 13 août 2002
29 juil. 2002 à 22:41
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
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
29 juil. 2002 à 22:46
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) ---
Rejoignez-nous