用Enter键代替Tab键

在实际的程序开发中我们经常有这样的要求,用户不喜欢用Tab键,他希望用Enter键来代替。我们应该什么做呢?

首先:设定Form的KeyPreview属性为True。

其次:把Form上的所有Button的Default属性设为False。

最后:在Form的OnKeyPress事件中添加如下代码:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin

if Key = #13 then

begin

Key := #0;

Perform(Wm_NextDlgCtl

0

0);

end;

end;

*********************************
perform(WM_NEXTDLGCTL,0,0);这是向下移动,

perform(WM_NEXTDLGCTL,1,0);即可向上移动


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

***********************
利用RETURN代替TAB   
   
Shift + Tab

perform(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

posted @ 2004-08-11 11:17  泡面 @ 幸福  阅读(2201)  评论(0编辑  收藏  举报