Bonjour à tous,
Dans le cadre d'une montée en compétences sur Delphi 6, j'ai entrepris de développer un 2048.
Je suis à peu près satisfaite du fonctionnement du jeu à un ou deux détails près, mais ce n'est pas ce qui m'intéresse ici.
Pour planter le décor, j'ai utilisé un TStringGrid pour afficher ma grille et mes chiffres, et des TSpeedButton pour les déplacements dans les quatre directions. Si tout cela fonctionne, j'ai décidé de passer à l'étape supérieure et de prendre aussi en compte les flèches directionnelles du clavier en plus des TSpeedButton... et c'est là que le bât blesse.
En effet, j'ai eu beau utiliser un grand nombre de solutions différentes, je n'arrive pas à entrer dans une procédure de récupération d'une touche du clavier. Les seules touches à réagir sont les flèches directionnelles, qui permettent à un fin cadre en pointillé de passer d'une case à l'autre de mon TStringGrid, ce dont je me moque éperdument. Cela vient sans doute de mon TabStop à True (que j'ai mis ainsi pour éviter d'avoir une case surlignée de bleu) car quand je le passe à False les flèches directionnelles n'ont plus aucun effet sur mon TStringGrid.
J'ai utilisé les options suivantes pour essayer de capturer la saisie clavier pour lancer les procédures de mouvement des chiffres :
Tenter d'appeler OnKeyDown sur ma TStringGrid :
Tenter d'appeler OnKeyUp sur ma TStringGrid :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TForm1.GrilleKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin showmessage('spLeftClick'); If ord(Key) = VK_LEFT then begin spLeft.Click; end; end;
Tenter d'appeler OnKeyDown / OnKeyUp sur le Form :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TForm1.GrilleKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin showmessage('spLeftClick'); If ord(Key) = VK_LEFT then begin spLeft.Click; end; end;
Tenter d'utiliser un OnPressKey sur mon Form :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin showmessage('spLeftClick'); If ord(Key) = VK_LEFT then begin spLeft.Click; end; end;
Tenter de ruser en utilisant un TEdit pour capter les touches (solution proposée ici) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char) ; begin if Key=chr(25) then begin showmessage('spLeftClick'); spLeft.Click; end; end;
J'ai aussi essayé de tenter de capturer la saisie sur un projet vierge, avec juste un ShowMessage pour voir si je rentrais dedans, sans succès.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_Left: begin showmessage('spLeftClick'); spLeft.Click; end; end; end;
Si quelqu'un a des idées sur la raison pour laquelle je ne parviens pas à capturer mes saisies clavier, je suis toute ouïe.
Partager