Procedure TForm1.FormKeyPress(Sender:Tobject;Var Key:Char);
Begin
 if key in [#13,char(VK_UP),char(VK_DOWN)] then { 判断是按执行键}
 if not (ActiveControl is TDbgrid) Then
 Begin { 不是在TDbgrid控件内}
  key:=#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 Selectedindex:=0;
 end;
End; 

解决方案 »

  1.   

    需要用回车键代替TAB键下移一个控件时,把KeyPress设为True,加入下列代码拦截击键:
    Procedure TForm1.FormKeyPress(Sender:Tobject;Var Key:Char);
    Begin
     if key=#13 then { 判断是按执行键}
     if not (ActiveControl is TDbgrid) Then
     Begin { 不是在TDbgrid控件内}
      key:=#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 Selectedindex:=0;
     end;
    End; 
      

  2.   

    需要用回车键代替TAB键下移一个控件时,把KeyPress设为True,加入下列代码拦截击键:
    Procedure TForm1.FormKeyPress(Sender:Tobject;Var Key:Char);
    Begin
     if key=#13 then { 判断是按执行键}
     if not (ActiveControl is TDbgrid) Then
     Begin { 不是在TDbgrid控件内}
      key:=#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 Selectedindex:=0;
     end;
    End; 
      

  3.   

    可以这样做:
    OnKeyDown中:
    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if (key=VK_Return) or (key=VK_DOWN) then PostMessage(WM_KEYDOWN, VK_TAB, 0 ,0)
      else if key = VK_UP then TWinControl(sender).SelectNext(TWincontrol(Sender), true, true);
    end;  
    把要控制的控件的OnKeyDown指向Edit1KeyDown这个过程即可
      

  4.   

    { 在FORM的OnKeyPress事件中插入,注意将Form的KeyPreview属性设为True }
    begin
    if Key = #13 then
    if not (ActiveControl is TStringGrid) then begin { 如果不是TStringGrid }
    Key := #0; { 清除按键 }
    Perform(WM_NEXTDLGCTL, 0, 0); { 否则移到下一Control上 }
    end
    else if (ActiveControl is TStringGrid) then
    with TStringGrid(ActiveControl) do
    if selectedindex < (fieldcount -1) then
    selectedindex := selectedindex +1
    else
    selectedindex := 0;
    end;
    另一种更简便的方法,这是wj朋友提供的:
    在StringGrid的KeyPress事件中写入
    if Key=Chr(VK_RETURN) then
    SendMessage(StringGrid.Handle,WM_CHAR,VK_TAB,0);
    *在D2,D3中用时去掉Chr()函数。
    让 WINDOWS 模拟按了一个按键,例如按下 ENTER或者 TAB 键?
    PostMessage(Object.Handle, WM_KEYDOWN, VK_TAB, 0);
    获得命令行参数
    1. 取得命令列参数的个数: ParamCount 函数
    2. 呼叫 ParamStr(0), 传回执行档的档名(含路径)
    3. 呼叫 ParamStr(n), 传回第n个参数的内容
    例子:
    procedure TForm1.FormCreate(Sender: TObject);
    var
    ix: integer;
    begin
    Memo1.Lines.Clear;
    if ParamCount = 0 then
    Memo1.Lines.Add('??统??.')
    else
    begin
    Memo1.Lines.Add('档名:' + ParamStr(0));
    for ix := 1 to ParamCount do
    Memo1.Lines.Add(ParamStr(ix));
    end;
    end;
      

  5.   

    // 编辑框的 OnKeyDown 事件过程
    procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin
       case Key of
          VK_RETURN:  // 回车
             FindNextControl(Sender as TWinControl, (Shift = []), True, False).SetFocus;
          VK_DOWN:    // 下箭头
             FindNextControl(Sender as TWinControl, True, True, False).SetFocus;
          VK_UP:      // 上箭头
             FindNextControl(Sender as TWinControl, False, True, False).SetFocus;
       end;
    end;