MasterJ
Messages postés37Date d'inscriptionjeudi 27 juin 2002StatutMembreDernière intervention13 août 2002
-
29 juil. 2002 à 22:21
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 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..
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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.
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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.