Bonjour,
Dans un formulaire, j'ai remplacé un stringgrid par un DBGrid lié à un ClientDataSet.
Je veux passer à la ligne quand la touche entrée est frappée.
Ma procédure avant:
ma procédure après :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 procedure Tfrm1.grid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_RETURN) or (Key = VK_UP) or (Key = VK_DOWN) then begin grid1.Cells[grid1.Col,grid1.Row] := FormateVal(grid1.Cells[grid1.Col,grid1.Row]); // OK if (Key = VK_RETURN) then begin if grid1.Row <> grid1.RowCount-1 then // MARCHE BIEN grid1.Row := grid1.Row + 1; end; end; end;
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 procedure Tfrm1.grid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var Row, Col : integer; begin Row := TDrawGrid(grid1).Row; Col := TDrawGrid(grid1).Col; if (Key = VK_RETURN) or (Key = VK_UP) or (Key = VK_DOWN) then begin grid1.DataSource.DataSet.Edit; grid1.SelectedField.AsString := FormateVal(grid1.SelectedField.AsString); (* 1 *) if (Key = VK_RETURN) then begin if Row <> TDrawGrid(grid1).RowCount-1 then (* 2 *) TDrawGrid(grid1).Row := TDrawGrid(grid1).Row + 1; end; end; end;
(* 1 *)Ca ne marche pas. Il ne prend pas la valeur en cours de modification mais la valeur avant modif.
(* 2 *)Ca ne marche pas. A l'écran, quand je valide par entrée dans ma cellule, la cellule du dessous s'affiche en édition avec la valeur de la cellule du dessus.
Merci d'avance pour votre aide.
Partager