在Grid的Cell中,当按左时,跳到前一个Cell,按右键时跳到后一个Cell.
注意:
    因为Cell在Edit时,要实现的不是在该单元格(Cell)中左右移动,要实现Cell间的移动.
说明:
    如同控件本身带的,按上下键时,可以实现上下一个Cell间的移动。

解决方案 »

  1.   

    procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if(Key in [VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN]) then
      begin
        case key of
          VK_LEFT:
            if(TDrawGrid(DBGrid1).Col <> 0)then
              TDrawGrid(DBGrid1).Col := TDrawGrid(DBGrid1).Col -1;
          VK_RIGHT:
            if(TDrawGrid(DBGrid1).Col <> TDrawGrid(DBGrid1).ColCount -1)then
              TDrawGrid(DBGrid1).Col := TDrawGrid(DBGrid1).Col +1;
          VK_UP:
            if(TDrawGrid(DBGrid1).Row <> 0)then
              TDrawGrid(DBGrid1).row := TDrawGrid(DBGrid1).row -1;
          VK_DOWN:
            if(TDrawGrid(DBGrid1).Row <> TDrawGrid(DBGrid1).RowCount -1 )then
            TDrawGrid(DBGrid1).row := TDrawGrid(DBGrid1).row + 1;
        end;
        key := 0;
      end;
    end;
      

  2.   

    上下键本来就可以
    procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if(Key in [VK_LEFT, VK_RIGHT]) then
      begin
        case key of
          VK_LEFT:
            if(TDrawGrid(DBGrid1).Col <> 1)then
              TDrawGrid(DBGrid1).Col := TDrawGrid(DBGrid1).Col -1;
          VK_RIGHT:
            if(TDrawGrid(DBGrid1).Col <> TDrawGrid(DBGrid1).ColCount -1)then
              TDrawGrid(DBGrid1).Col := TDrawGrid(DBGrid1).Col +1;
        end;
        key := 0;
      end;
    end;
      

  3.   

    meiqingsong(阿飛)的方法可以实现,记得引用Qt.
      

  4.   

    当cell 在 Edit 时键盘事件根本没触发是不是要用到 钩子
      

  5.   

    改写TInplaceEditor ,处理WM_KEYDOWN消息处理过程然后把TGrid的编辑器指定为你新改写的编辑器