如何调用enter代替tab的过程(60分)

  • 主题发起人 主题发起人 天国之时
  • 开始时间 开始时间

天国之时

Unregistered / Unconfirmed
GUEST, unregistred user!
if Key = #13 then
begin
Key := #0;
Tcontrol.Perform(Wm_NextDlgCtl,0,0);
是用enter代替tab的过程

我想变成一个公共过程
在form。keypress里面使用
不知道这个公共过程怎么用??
 
//回车键转TAB键(在FormKeyDown事件中调用)
function FEnterAsTab(hWnd : HWND) : BOOL;
begin
Result := PostMessage(hWnd, WM_KEYDOWN, VK_TAB, 0);
end;
 
if key = VK_RETURN then
begin
//回车移动焦点,如果是memo,则应包含ctrl键才可以。
if not ((sender as TForm).ActiveControl is TCustomMemo) then
SendMessage((sender as TForm).Handle, WM_NEXTDLGCTL, 0, 0)
else begin
if Shift = [ssCtrl] then
SendMessage((sender as TForm).Handle, WM_NEXTDLGCTL, 0, 0);
end;
 
把它写成函数来调用
 
给你一个采用消息的实例吧:
procedure TfrmMain.EnterToTab(var Msg: TMsg; var Handled: Boolean);
begin
//2005.10.07 20:03由于空格键在按钮上无响应,改为
if(Msg.Message=WM_KEYDOWN)and(Msg.wParam=VK_RETURN) then
if (Screen.ActiveControl is TButton) then//不能是按钮
begin
if Msg.wParam=VK_SPACE then
begin
Keybd_Event(VK_RETURN, 0, 0, 0);
Handled:=True;
end;
end else if not(Screen.ActiveControl is TButtonControl) then//不能是按钮
begin
if Screen.ActiveControl is TDBGrid then
if TDBGrid(Screen.ActiveControl).SelectedIndex=TDBGrid(Screen.ActiveControl).Columns.Count-1 then
TDBGrid(Screen.ActiveControl).SelectedIndex:=0//如果是网格的最后一列,就回到第一列,否则就到下一列
else
TDBGrid(Screen.ActiveControl).SelectedIndex:=TDBGrid(Screen.ActiveControl).SelectedIndex+1
else Keybd_Event(VK_TAB, 0, 0, 0);//如果不是网格,就发送Tab消息
Handled:=True;//表示该消息已经处理。
end;
end;

在主窗体的创建事件中指定:
Alication.OnMessage:=EnterToTab;
 
后退
顶部