procedure TFMain.EnterNext(Sender: TObject; var Key: Word;
      Shift: TShiftState);
begin
  if key=vk_return then{ 判断是按执行键}
     if not (ActiveControl is TDbgrid) Then
        Begin { 不是在TDbgrid控件内}
        key:=word(#0);
        Perform(WM_NEXTDLGCTL, 0, 0);{移动到下一个控件}
        end
  else
  if (ActiveControl is TDbgrid) Then{是在 TDbgrid 控件内}
       begin
       With TDbgrid(ActiveControl) Do
            if Selectedindex<(FieldCount-1) then
                Selectedindex:=Selectedindex+1{ 移动到下一字段}
            else if not readonly then (ActiveControl as TDbgrid).DataSource.DataSet.Insert
            else begin
                 Selectedindex:=0;
                 Perform(WM_NEXTDLGCTL, 0, 0);
                 end;
       end;End;
使用:
for i:=1 to 18 do  //回车代替Tab移动输入焦点
    (FindComponent('dbedit'+inttostr(i)) as TDBEdit).OnKeyDown:=FMain.EnterNext;