{///// Grids549 //// ///////////} Unit Grids549;
Interface
Uses DBGRIDS, Classes, Windows
Type TdbGrid549 = Class (TDBGRID) Public Property InplaceEditor; End; Procedure Cursorctrl (Sender: Tobject; Var Key: Word; Shift: tshiftstate);
IMPLEMentation
{TDBGRID549}
Procedure Cursorctrl (Sender: Tobject; Var Key: Word; Shift: TshiftState); {Warn: this procedure may change to zerov_right and vk_left to 0
Call this in DBGridKeyDown procedrueeg: procedure TForm1.DBGrid1KeyDown (Sender: TObject; var Key: Word; Shift: TShiftState); begin Grids549.CursorCtrl (Sender, Key, Shift); end;} var GridEditorMode: Boolean; begin if Shift <> [] then Exit; if (Key <> VK_RIGHT) and (Key <> VK_LEFT) then Exit; GridEditorMode: = TDBGrid (Sender) .EditorMode; if not GridEditorMode then TDBGrid (Sender) .EditorMode: = True; if Key = VK_RIGHT then begin if GridEditorMode and (TDBGrid549 (Sender) .InplaceEditor.SelStart <> Length (TDBGrid549 (Sender) .InplaceEditor.Text)) then begin Exit; end; // Last field, move to next record if TDBGrid (Sender) .SelectedIndex = TDBGrid (Sender) .FieldCount - 1 then begin TDBGrid (Sender) .DataSource.DataSet.Next; TDBGrid (Sender) .SelectedIndex: = 0; end else // Focus on next field if TDBGrid (Sender) .EditorMode then begin TDBGrid (Sender) .SelectedIndex: = TDBGRID (sender) .SelectedIndex 1; End; Else if key = VK_L EFT then begin if GridEditorMode and (TDBGrid549 (Sender) .InplaceEditor.SelStart <> 0) then Exit; // First field, move to prior record if TDBGrid (Sender) .SelectedIndex = 0 then begin TDBGrid (Sender) .DataSource.DataSet .Prior; TDBGrid (Sender) .SelectedIndex: = TDBGrid (Sender) .FieldCount - 1; end else // Focus on prior field if TDBGrid (Sender) .EditorMode then begin TDBGrid (Sender) .SelectedIndex: = TDBGrid (Sender). SELECTEDINDEX - 1; End; end; key: = 0; end; end.