一个困扰了我多天的问题,关于回车键模仿Tab键,在一个单独的form1中可以用这样的语句实现:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); 
    begin 
     if Key = #13 then { 如果按下了回车键 } 
     begin 
     Key := #0; { 吃掉回车键 } 
     Perform(WM_NEXTDLGCTL, 0, 0); { 移动到下一个控制 } 
     end; 
end; 
但是后来发现,如果将form1放到另外一个form2中的panel1容器里,具体的方法是这样:
form1.ManualDock(Fform2.Panel1,nil,AlClient);
form1.Show;在这之后,
Perform(WM_NEXTDLGCTL, 0, 0)
就失效了。请问如何解决??????谢谢各位!

解决方案 »

  1.   

    在你的Form2上写;;Form2的OnCreate里写 self.KeyPreview :=True; 然后,在key的事件中写你的代码      if Key = #13 then { 如果按下了回车键 } 
         begin 
         Key := #0; { 吃掉回车键 } 
         Perform(WM_NEXTDLGCTL, 0, 0); { 移动到下一个控制 } 
         end;
      

  2.   

    Shift + Tabperform(WM_NEXTDLGCTL,0,0);这是向下移动,请问如何向上移动??????
    perform(WM_NEXTDLGCTL,1,0);即可向上移动
    为什么不看MSDN,不看HELP你当然不知道了。
    perform(WM_NEXTDLGCTL,0,1)
    控制焦点移动,还可以利用TWinControl.SelectNext()方法来做!
    *********************
    Form.KeyPreview := true; 在Form的KeyDown中
      if Key = VK_RETURN then
      begin
        if ActiveControl is TDBGrid or ... then
          PostMessage(ActiveControl.Handle, WM_KEYDOWN, VK_TAB, 0);
        else
          PostMessage(Handle, WM_KEYDOWN, VK_TAB, 0);
        Key := 0;
      end
    ---------------
    procedure EnterToTab(aForm: TForm; var Key: Char);
    begin
      if Key = #13 then
      begin
        key := #0;
        aForm.Perform(CM_DialogKey, VK_TAB, 0);
      end;
    end;
    ***************
    或者拦截Application.OnMessage即可,添加代码:
    if Msg.Message = WM_KEYDOWN then
    begin
      if Msg.wParam = VK_RETURN then
        Keybd_event(VK_TAB, 0, 0, 0);
    end; //if
      

  3.   

    Form2写同样的事件代码就可以了
      

  4.   

    在keyDown中实现
      if Key=VK_RETURN then
        Key := VK_TAB
      

  5.   

    //虽然接了,但我还是要再发一贴~~
    //如果窗体上还有象Memo需要处理回车的控件咋办?~~
    //所以需要判断~~function GetParentForm(mHandle: THandle): THandle; overload;
    begin
      Result := mHandle;
      while GetParent(Result) <> 0 do Result := GetParent(Result);
    end; { GetParentForm }procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    var
      vBuffer: array[0..255] of Char;
    begin
      case Msg.message of
        WM_KEYDOWN: if Msg.wParam = VK_RETURN then begin
          GetClassName(Msg.hwnd, vBuffer, SizeOf(vBuffer));
          if SameText(vBuffer, 'TEdit') or SameText(vBuffer, 'TComboBox') or
            SameText(vBuffer, 'Edit') then begin
            Handled := True;
            SendMessage(GetParentForm(Msg.hwnd), WM_NEXTDLGCTL, 0, 0);
          end;
        end;
      end;
    end;
      

  6.   

    zswangII(伴水清清)
    伴水老大, 果然高人一筹, 从小节就可看出