给onkeydown中的 参数Key赋值,但是不起作用? ( 积分: 50 )

  • 主题发起人 主题发起人 zr1800
  • 开始时间 开始时间
Z

zr1800

Unregistered / Unconfirmed
GUEST, unregistred user!
例如下面的代码,本意是想屏蔽掉edit的所有输入,但是运行后,发现根本没有任何作用,edit仍然可以正常输入。
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
key := 0;
end;
但是,如果在onkeypress里面让 Key := #0,就可以屏蔽掉所有的ascii按键。
请问,这是delphi的本意吗?在Onkeydown事件里面,如何才能屏蔽某个按键呢?
 
if not (Key in ['0'..'9']) and (Key <> #8) then
Key := #0;
这是屏蔽掉所有非数字的代码.
你参考一下吧.
 
你这个是响应onkeypress的,我想问的是onkeydown里面给key赋值为何不起作用。
 
屏蔽edit输入不用那么麻烦吧,将enabled 值设为false不就行呗. 在onkeypress中用键值表示某键0..9,而在onkeydown中另一种表示:如回车vk_return,方向键vk_up,vk_down,其它要查一下资料
 
正如 lucky.gong 所说,二个事件的响应是不同的,onkeypress 响应的是非控制性ascii值的按键,而Onkeydown 里响应的是控制性ascii值的按键,如: ALT SHIFT F1-F12等功能按键。
 
感谢楼上朋友顶贴,但是你们答非所问。
重复一遍:我想问的是onkeydown里面给key赋值为何不起作用。
 
不可能把,怕是Edit1的KeyDown事件没有指向 OnKeyDown
 
不对吧,你试试加代码后,选中输入的数值按Del键看看还能删除么?
无柄叶 说的没错!
如果你在OnkeyPress里想处理Shift及Ctrl或F1..等的话就只有GetKeyBoardState和SetKeyBoardState了。其它的Ascii输入是可以用KeyPress置#0的。
在KeyPress可以处理的问题就不要放在KeyDown中啦(KeyDown之后还有KeyUp的,除非两个都处理掉就XX了)。
 
呵呵!嘿嘿!
 
经测试,ONKEYDOWN中,在将KEY置0的同时,将Shift也置[],可以做到XX。
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
key := 0;
Shift:=[];
end;
楼主试试!!
 
sedwen, 我试了上面的方法,还是没有屏蔽掉edit的输入啊?不知道你怎么测试的?

算了,结了。
 
多人接受答案了。
 
后退
顶部