Bonjour tout le monde !

Je cherche comment automatiser le déplacement et l'affichage du curseur dans un StringGrid. Je voudrais que le curseur se déplace à la ligne suivante lorsque l'utilisateur appuie sur Entrée.

J'ai trouvé un code qui fait presque ce que je veux, mais pas tout à fait. Voyez l'exemple suivant : si je clique sur le bouton, ou si j'appuie sur Entrée, le résultat n'est pas exactement le même, quoique le code soit identique. En cliquant sur le bouton, le curseur se déplace et s'affiche. En appuyant sur Entrée, la sélection (?) se déplace, mais le curseur n'apparaît pas.
Pratiquement ça ne fait pas de différence, puisque qu'on peut quand même taper du texte, sans avoir à cliquer d'abord sur la cellule, mais pour l'utilisateur c'est quand même plus clair s'il voit le curseur qui clignote.

Bref, pourquoi est-ce que j'obtiens deux résultats différents ? et comment avoir le curseur clignotant après un appui sur la touche Entrée ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
unit UCurseur2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
 
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  with StringGrid1 do
  begin
    if Row < RowCount - 1 then
      Row := Row + 1
    else
      Row := 0;
    SetFocus;
    EditorMode := True;
  end;
end;
 
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = 13 then
    with StringGrid1 do
    begin
      if Row < RowCount - 1 then
        Row := Row + 1
      else
        Row := 0;
      SetFocus;
      EditorMode := True;
    end;
end;
 
end.
P.-S. Impossible de retrouver une discussion que j'avais ouverte sur un projet de carnet de notes du professeur pour Delphi XE2. C'est ce projet que je reprends : j'aurais bien voulu relire et éventuellement continuer la même discussion.