送分题:。。。。。。。。。。。。。(50分)

H

hm123

Unregistered / Unconfirmed
GUEST, unregistred user!
有许多EDIT 控件我想让光标按回车后从EDIT1、 edit2......顺序移动该如何实现?
要在每个控件中都加事件的话可以实现,可太麻烦了, 其它语言都可以自动移动。
 
OnKeyDown事件中
if Key = VK_RETURN then
PostMessage(Handle, WM_KEYDOWN, VK_TAB, 0)
 
设置edit的taborder顺序
form的keypreview属性设置为true
 
你首先将这些EDIT的TabOrder属性设到一个挨一个了就可以了
 
将每个 edit 的 OnKeyPress 设置为 Edit1KeyPress
procedure TForm1.Edit1KeyPress(Sender: TObject;
var Key: Char);
begin
if key=#13 then
selectNext(TWincontrol(sender),true,false);
end;
 
可以你设置窗体Form的KeyPreview为true,然后写一个commonKeydown事件:
procedure TBillInputInnerBaseForm.CommonKeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_RETURN) or (Key = VK_NEXT) then
begin
SelectNext(TWincontrol(Sender), True, True);
end;
end;
然后在每个Edit的OnKeyDown事件中指定为这个公有事件即可。
 
你可以在ide状态下设置tab order
然后在
procedure TFormBuildingList.FormKeyPress(Sender: TObject;
var Key: Char);
begin
if key=#13 then
// 判断是按执行键
begin

key := #0;
selectnext(activecontrol,true,true);
end;
end;
注意:form 的keypress须为true
 
补充;然后在每个EDIT的KEYPRESS时间里加上:
if key = #13 then
begin
key := #0;
perform(wm_nextdlgctl, 0, 0);
end;
 
在窗体的KEYPRESS事件中加
procedure TForm_LuRu.FormKeyPress(Sender: TObject;
var Key: Char);
begin
if key=#13 then
{ 判断是按执行键}
begin
if not (ActiveControl is TDbgrid) then
begin
{ 不是在TDbgrid控件内}
key:=#0;
perform(WM_NEXTDLGCTL,0,0);{移动到下一个控件}
end else
if (ActiveControl is TDbgrid) then
{是在 TDbgrid 控件内}
begin
With TDbgrid(ActiveControl) do
if Selectedindex<(FieldCount-1) then

Selectedindex:=Selectedindex+1{ 移动到下一字段}
else
Selectedindex:=0;
end;
end;
end;

在ide状态下设置tab order
form的keypreview属性设置为true
 
procedure TForm1.FormKeyPress(Sender: TObject;
var Key: Char);
begin
if key=#13 then
// 判断是按执行键
begin

selectnext(activecontrol as twincontrol,true,true);
key := #0;
end;
end;
 
定义消息处理
procedure CMDialogKey(var Message: TCMDialogKey);
message CM_DIALOGKEY;
实现消息响应
procedure TForm1.CMDialogKey(var Message: TCMDialogKey);
begin
{回车的功能与Tab类似}
if Message.CharCode = 13 then
SelectNext(ActiveControl, true, True)
else
inherited;
end;
其他地方不用任何修改,简单吧!
 
jsxjd 的办法最好,先把edit的Taborder设成一个挨一个就是了。
将每个 edit 的 OnKeyPress 设置为 Edit1KeyPress
procedure TForm1.Edit1KeyPress(Sender: TObject;
var Key: Char);
begin
if key=#13 then
selectNext(TWincontrol(sender),true,false);
end;
 
谢谢大家, 我是刚来的分值不多, 确实JSXJD的方法最简单其他各位吗分就平分吧, 下次我分值多时一定尝还给大家!!!!
 
多人接受答案了。
 

Similar threads

回复
0
查看
752
不得闲
D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部