我想用ENTER代替TAB该怎么做?

解决方案 »

  1.   

    把Form的KeyPreview设为True,然后在Form的OnKeyPress事件中:
    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      if Key = #13 then begin
        KeyBd_Event(VK_TAB,0,0,0);
        KeyBd_Event(VK_TAB,0,2,0);
      end;
    end;
      

  2.   

    KeyPreview设为True
    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      if key=#13 then
      begin
        key:=#0;
        perform(WM_NEXTDLGCTL,0,0);
      end;
    end;
      

  3.   

    Postmessage(edit1.handle,WM_KeyDown,VK_TAB,0);
      

  4.   

    KeyPreview设为True
    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      if key=#13 then
        SelectNext(ActiveControl,True,True);
    end;
      

  5.   

    把Form的KeyPreview设为True,然后在Form的OnKeyPress事件中:
    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      if Key = #13 then 
        Postmessage(ActiveControl.handle,WM_KeyDown,VK_TAB,0);
    end;
      

  6.   

    把Form的KeyPreview设为True,然后在Form的OnKeyPress事件中:
    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      if Key = #13 then 
        Sendmessage(ActiveControl.handle,WM_KeyDown,VK_TAB,0);
    end;
      

  7.   

    用 esu(ESU) 的方法好。
      

  8.   

    给你一种更简单的方法,不用到外加代码, 
     不过要是你要用回车的话(比如控件的换行)就有点麻烦
    procedure AppMessage( var Msg: TMsg;
      var Handled: Boolean);
    begin
       if Msg.Message = WM_KEYDOWN then
        begin
           if Msg.wParam = VK_RETURN then
           Keybd_event(VK_TAB, 0, 0, 0);
       end;
    end;在一个地方加入: application.OnMessage:=AppMessage;整个应用程序的回车都变成Tab了
      

  9.   

    我一般用这个procedure AppMessage( var Msg: TMsg;
      var Handled: Boolean);
    begin
       if Msg.Message = WM_KEYDOWN then
        begin
           if Msg.wParam = VK_RETURN then
           Keybd_event(VK_TAB, 0, 0, 0);
       end;
    end; application.OnMessage:=AppMessage;
      

  10.   

    sendmessage、postmessage是Win32 API;
    sendmessage:等到消息处理完才,返回
    postmessage:发完消息不等处理,就直接返回perform,Keybd_event,SelectNext都是delphi封装了上面的两个函数