Bonjour,
Et là, peut-être une piste :
http://perso.orange.fr/bardou/michel/trucs.htm
Une remarque / variante de Jean-Yves Queinec (08/09/99)
S'il existe des composants fenêtrés sur la fiche (boutons par exemple), les touches fléchées ne peuvent pas être interceptées en positionnant simplement KeyPreview à true. Si par exemple je veux dessiner sur une paintbox à l'aide des touches fléchées, ce sont les boutons qui reçoivent systématiquement les messages des touches de direction, ainsi que ceux produits par <Tab>. Voici une solution : -->
Implémentez l'événement OnCreate de votre TForm ainsi :
1 2 3 4 5 6 7
| procedure TForm1.FormCreate(Sender: TObject);
var
bmp : Tbitmap;
i : integer;
begin
Application.OnMessage := TraiteMessages;
...... |
dans la déclaration de la Tform, juste sous
procedure FormCreate(Sender: TObject);
Ajoutez :
1 2
| procedure TraiteMessages(Var msg : TMsg; Var Handled: boolean);
{ Gestionnaire de message au niveau application } |
Puis dans la partie implémentation :
{ Intercepte les messages clavier et en particulier les touches flèchées }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Procedure Tform1.TraiteMessages(Var msg : TMsg; Var Handled: boolean);
var
dx, dy : integer;
begin dx: 0; dy := 0;
With msg do
begin
IF Message = WM_KEYDOWN then
Case wparam of
VK_LEFT : dx := -1;
VK_RIGHT : dx := 1;
VK_UP : dy := -1;
VK_DOWN : dy := 1;
end;
end;
IF (dy = 0) AND (Dx = 0) then Handled := false else
begin
handled := true; // message traité
Mouvement(dx, dy) // exécution du tracé
end;
end; |
Partager