如何实现按回车键使输入聚焦在界面依次从第一文本框跳到第二文本框……(50分)

  • 主题发起人 主题发起人 孤月独明
  • 开始时间 开始时间

孤月独明

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现按回车键使输入聚焦在界面依次从第一文本框跳到第二文本框……?
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
Edit2.SetFocus;
end;
 
试试,[:)]
procedure TForm.KeyDown(var Key: Word; Shift: TShiftState);
var
C: TControlCanvas;
MemoLines: Integer;
TempList: TList;
begin
inherited KeyDown(Key, Shift);

if ActiveControl is TCustomComboBox then
if SendMessage(ActiveControl.Handle, CB_GETDROPPEDSTATE, 0, 0) <> 0 then {drowDown}
Exit;

if Key = VK_RETURN then
begin

if ActiveControl is TCustomMemo then
begin
C := TControlCanvas.Create;
C.Control := ActiveControl;
C.Font := TMemo(ActiveControl).Font;
MemoLines := ActiveControl.ClientHeight div (C.Textheight('XBP') + 1); {1: between line }
C.Free;
if MemoLines > 1 then Exit; {More than One Lines can visible only.}
end;
if (ActiveControl<>Nil) and (ActiveControl.parent.ClassType = BTPanel) then
begin
try
TempList := TList.Create;
ActiveControl.Parent.GetTabOrderList(TempList);
if ActiveControl.TabOrder = TempList.count - 1 then
ActiveControl.parent.SetFocus;
finally
TempList.Free;
end;
end;
Key := VK_TAB;
end;
end;
 
这样用比较好,也更方便
if key=char(vk_return)then
begin
key:=#0;
postmessage(handle,WM_NEXTDLGCTL,0,0);
end;
 
说的太复杂了,其实这是很简单的问题,比如界面有10个文本框,输入完一个,然后按回车,
使得光标移到下一个文本框。几行代码就可以实现,以前用过,现在忘了!
 
原理就是在formkeydown事件中,发送消息,跳道下一个控件
简单的做法就是张智的程序,如果考虑周全,就看我的程序,适合多种特殊控件
 
每个文本框都关联一个OnKeyDown事件
在该事件里中写下面一行代码:
if Key = VK_RETURN then Perform(WM_NEXTDLGCTL,0,0);
 
这个问题也太简单了,请结束贴子。
 
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=13 then key:= 9;
SelectNext(ActiveControl, True, False);
end;
把每个Edit的onkeydown设成这个事件就可以
 
把 ENTER——》TAB 并在整个程序中都起作用

首先,在主窗体中声明以下private过程:

{------}
procedure TMainForm.DoEnterAsTab(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;
{------}
在主窗体的OnCreate事件中加入:

{------}
Application.OnMessage := DoEnterAsTab;
{------}
程序运行期间不断接收 WM_KEYDOWN信息, 若按下的键是VK_RETURN (#13),我们模拟一个键盘事件, 把VK_TAB作为参数传送。在整个程序中都起作用。

 
liujh的方法得先定义好tab顺序。
 
在窗体的ONKEYPRESS事件实现
先把FORM的KEYPREVIEW=TRUE;
if key=#13 then
if not (ActiveControl is TDbgrid) then
begin
key:=#0;
perform(WM_NEXTDLGCTL,0,0);
END
else
if (ActiveControl is TDbgrid) then
begin
with TDbgrid(ActiveControl) do
if Selectedindex(FieldCount-1) then
Selectedindex:=SelectedIndex+1;
else
selectedIndex:=0;
end;
end;
 
先把各个相关的控件排一下顺序。
再把onKeyPress指向同一个。
procedure TmainForm.E_usernameKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
postmessage(handle,WM_NEXTDLGCTL,0,0);
end;

 
孤月独明,You can end this Question;
 
多人接受答案了。
 
后退
顶部