如何使TForm响应键盘事件(50分)

  • 主题发起人 主题发起人 陈冲伟
  • 开始时间 开始时间

陈冲伟

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个Form之上加了一个TFileListBox,并为TForm写了响应键盘的
事件KeyDown().在程序开始运行时,可以响应TForm的KeyDown()事件,
担当我用TFileListBox选择文件之后(即将焦点转移到TFileListBox之上
后),TForm的KeyDown事件就无法响应了.请问如何才能使TForm的
KeyDown事件始终得到响应.
 
KeyDown事件本来就是要有焦点才会响应的。焦点到了TFileListBox上,就只会产生TFileListBox的KeyDown事件了。
要达到你的要求,其实很简单,只要在FileListBox1.OnKeyDown中响应Form1.OnKeyDown就行了。
 
但是现在我想重新定义某些建的功能,如Pageup/PageDown本来在文件
列表框中的功能是移到下一页,现在我想把它重定义为移到下一项.
这该如何实现呢?
 
Form1.KeyPreview:=true
这样键盘消息就会先送到Form1.KeyDown里面去了
 
tqz说的没错,设置为true后,按下键后先响应form的keydown事件,再响应控件的
keydown事件,自己可以处理
 
tqz说的没错,设置为true后,按下键后先响应form的keydown事件,再响应控件的
keydown事件,自己可以处理
 
可以用WINAPI函数定义一个键盘事件
 
自己搞定消息.........
 
不用很麻烦,就是像TQZ说的那样,键盘事件ONKEYDOWN,PRESS....就都由FORM的首先响应了.
 
我试过KeyPreview属性的,但是没有用.TFileListBox还是会接受到Key Event并
按照预定义的键盘方式运作.
 
陈兄:

如此这般:FORM1.KEYPREVIEW要设为TURE;

procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin

if key=33 then
key:=0;
if key=34 then
key:=0;
inherited Keydown( key, shift);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=33 then
listbox1.ItemIndex:=listbox1.itemindex-1;
if key=34 then
listbox1.ItemIndex:=listbox1.itemindex+1;

end;
 
1.把FORM的KETPERVIEW设成TRUE
2.在FORM的ONKEYDOWN中写你要写的东西
3.在FORM的ONKEYDOWN中写你要写的东西之后再加上
KEY:=0;
 
我试了诸位所说的方法,当程序刚运行时是没问题的,但是当我点击FileListBox
控件之后,再按上/下键时,程序的蓝带(焦点)就会在FilterComboBox和
DirComboBox之间移动(我的程序中有TFilterComboBox, TFileListBox,
TDrvComboBox和TDirListBox各一个),而不调用相应的事件响应函数。
 
你的程序写来看看吧
 
此问题 陈冲伟 SIR 还有要说的吗?
 
问题解决了, 可能是我别的地方写错了, 谢谢大家.
 
多人接受答案了。
 
后退
顶部