怎样将回车键变成TAB键?(100分)

D

Danny

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个TEdit中,怎样实现键入
回车键后将焦点移到下一个控件
中(即实现Tab键的功能)?
另外,怎样用光标上移键实现
Alt+Tab的功能?
 
绝对正宗的回答:

如果只想实现这个功能,定义一个过程:
procedure TYourForm.EnterToTab(Sender: TObject
var Key: Char);
begin
if Ord(Key)=VK_RETURN then
SelectNext(Sender as TWinControl,True,True);
end;

并将TEdit的OnKeyPress指向该过程

(如果还想在OnKeyPress中作别的,当然把这两行写进去就行喽!)


用光标上移实现什么功能?想屏蔽掉windows的任务切换?
 
对不起,应该是怎样用光标上移键
实现Shift+Tab的功能。
 
这不是一样吗?只要发现是上移键,
SelectNext(Sender as TWinControl,False,True);就行了。

第一个逻辑变量是控制向前/向后的,第二个负责检查tabstop。
 
令From1的KeyPreview为True,然后在OnKeyDown上写处理方法:

procedure TForm1.FormKeyDown(Sender: TObject
var Key: Word;
Shift: TShiftState);
begin
case Key of
VK_RETURN:
begin
Key := Word(#0);
if ssShift in Shift then
Perform(WM_NEXTDLGCTL, 1, 0)
else
Perform(WM_NEXTDLGCTL, 0, 0);
end;
VK_UP:
begin
Key := Word(#0);
Perform(WM_NEXTDLGCTL, 1, 0);
end;
end;
end;
 
我赞成Sunset的说法。
 
这个办法有个问题,要是回车时还想做一些其它工作
就不行了.
 
为何按Enter键后会发
出Beep声?
 
确实忘了copy一句话:

Key := #0;

这样就不会有beep声音,否则windows缺省是会对Enter发出声音的。
 
想在Enter时干些什么事情可以定义事件嘛。
 
Hello there,

要想对非ASCII字符件做出反应必须用OnKeyUp/OnKeyDown事件, 一般来说应该使用
OnKeyUp事件, 对于你的情况使用OnKeyDown也可以。

若要聚焦到某一个指定的Control可以使用SetFocus方法

要想使用Sunset提供的办法尔不影响其他Control可以加一个if过滤

if sender is TEdit then
case Key of
...
 
用form截取key肯定是很不灵活的,
无法针对个别control作特殊处理,
总不会一个一个地写case语句吧?
 
我想这位Danny老兄实际上只是想对类似于TEdit的Control上述处理, 故可以为一个
TEdit写一个OnKeyUp事件, 其他类似的控件的OnKeyUp事件都使用该事件方法就行了,
我想一个Form中的Edit总不会很多的
 
对呀,这就是我的第一个回答意思嘛!
不过我建议的是OnKeyPress。
 
dwwang

OnKeyPress 不能够处理组合键, 因为那里的 Key 参数只是一个Char(0 to 255)
然而组合键的值 > 255 故需要用 Word 表示
 
huizhang老兄说得对,要处理组合键,需要OnKeyDown。
 
Hi,各位
我关于以上的讨论,我是这样的做的,开始我也是用SelectNext,不过
我在多个TGroupBox中放TEdit时,跳起来就不方便了。
现在我在定义Form变量处,定义一个array of TWincontrol,用Form的ActiveControl属性控制更方便。
10/29/1998 am
 
见仁见智,实现这一目的的办法确实很多,
我建议的办法不过是一开始工作量最小而已,
如果form十分复杂,要控制的对象又有特殊性,(例如包含grid)
则需要更多的办法了.

应该替Danny感谢大家不断讨论.
 

Similar threads

回复
0
查看
667
不得闲
D
回复
0
查看
740
DelphiTeacher的专栏
D
D
回复
0
查看
742
DelphiTeacher的专栏
D
D
回复
0
查看
591
DelphiTeacher的专栏
D
S
回复
0
查看
950
SUNSTONE的Delphi笔记
S
顶部