`
holoblog
  • 浏览: 1264994 次
博客专栏
E0fcf0b7-6756-3051-9a54-90b4324c9940
SQL Server 20...
浏览量:19562
文章分类
社区版块
存档分类
最新评论

浅析OnKeyPress事件和OnKeyDown/OnKeyUp事件

 
阅读更多
OnKeyPress事件

OnKeyPress事件是在用户按下键盘上任何一个可打印的字符时发生,只有能接收键盘输入的组件才有OnKeyPress事件。我们常常利用OnKeyPress事件截取在编辑框和组合框组件中所输入的击键,还可以立即测试击键的有效性或在字符输入时对其进行一定的格式处理。

例如,在TEdit组件上捕获OnKeyPress事件,判断输入的是否是小写字母,如果是,将其转换为大写字母,代码如下:

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{

if (Key >= 'a' && Key <= 'z')

{

Key += 'A' - 'a';

}

}

Key的值改变为0时可取消击键,这样一来对象便接收不到字符,我们可以利用这个特点来屏蔽某些字符。例如,有时候我们只允许用户输入数字,则加入如下代码:

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{

if (Key < '0' || Key > '9')

{

Key = 0;//取消刚才输入的字符

}

}

注意:OnKeyPress事件可以引用任何可打印的键盘字符,一个来自标准字母表的字符或少数几个特殊字符之一的字符与 CTRL 键的组合,以及 ENTER BACKSPACE 键,但它并不能识别功能键(F1F12),上下左右键,Shift键,Ctrl键以及Alt键等特殊控制键或者是组合键,要捕获这些键可以采用OnKeyDownOnKeyUp事件。

OnKeyDown/OnKeyUp事件

当按下某个键不放时,产生OnKeyDown事件;释放按键时,则产生OnKeyUp事件。虽然 OnKeyDown OnKeyUp 事件可应用于大多数键,它们最经常地还是应用于扩展的字符键如功能键等,以弥补OnKeyPress事件的不足。

例如,TEdit组件的OnKeyDown/OnKeyUp事件过程框架如下:

void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,

TShiftState Shift)

void __fastcall TForm1::Edit1KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

其中参数Key返回键盘的虚拟键码。

注意:OnKeyDownOnKeyUp事件中的KeyWord型的,表示用户按的是键盘上的哪个键,OnKeyPress中的KeyChar型,表示用户输入什么字符。

参数Shift提供事件发生时ShiftCtrlAlt键的状态。ShiftCtrlAlt键的Shift值分别为ssShiftssCtrlssAlt。例如,判断ShiftCtrlAlt键是否被按下的代码如下:

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,

TShiftState Shift)

{

String strInfo("您刚才按下了:/n复合键:");

if (Shift.Contains(ssShift))

strInfo += "Shift";

if (Shift.Contains(ssCtrl))

strInfo += "Ctrl";

if (Shift.Contains(ssAlt))

strInfo += "Alt";

strInfo += "/nASCII码:";

strInfo += IntToStr(Key);

MessageBox(NULL, strInfo.c_str(), "信息提示", MB_OK);

}

注意:要让某个对象产生OnKeyDown事件,OnKeyUp事件或OnKeyPress事件,先要让该对象获得控制权(即具有焦点),一个窗体仅在它没有可视和有效的控件或 KeyPreview 属性被设置为 True 时才能接收该事件。若在该对象上按住某个键再放开它,便会触发上面三个事件。如果三个事件中均有操作,则其执行先后次序为:OnKeyDown事件先执行,OnKeyPress事件其次,OnKeyUp事件最后执行。

OnKeyDownOnKeyUp事件的事件处理过程中包含了最近一次击键发生时,控制键AltShift或者Ctrl是否按下的信息,而OnKeyPress事件只返回键的ASCII字符。

  假设用户按下了Shift+P键,那么这三种键盘事件产生的顺序如下所示:

  (1)按下Shift键时将产生OnKeyDown事件。

  (2)保持Shift键再按下P时将产生OnKeyDown事件。

  (3)由于按下了P键,所以产生了OnKeyPress事件。

4)释放Shift键和P键,将产生OnKeyUp事件。

OnKeyPress 将每个字符的大、小写形式作为不同的键代码解释,即作为两种不同的字符。而 OnKeyDown OnKeyUp 用两个参数解释每个字符的大写形式和小写形式:参数Key返回键盘的虚拟键码,显示物理的键(将 A a 作为同一个键返回),参数Shift指示Shift键的状态,从而返回 A a 其中之一。

疑问:如何判断同时按下ShiftCtrlAlt键?

补充:虚拟键码

大多数虚拟键码的名称在WINUSER.H表头档案中都定义为以VK_开头。下表列出了这些名称和数值(十进制和十六进制),以及与虚拟键相对应的IBM相容机种键盘上的键。

前四个虚拟键码中有三个指的是滑鼠键,您永远都不会从键盘讯息中获得这些滑鼠键代码,但我们能够从滑鼠讯息中获得它们。VK_CANCEL代码是一个虚拟键码,它包括同时按下两个键(Ctrl-Break)Windows应用程式通常不使用此键。

Windows也包括在主键盘上的字母和数字键的虚拟键码,A 键到 Z 键与其 ASCII 码的相应值'A' 'Z' 是一致的,0键到9 键与其 ASCII 码的相应值 '0' '9' 是一致的。

96111代表数字小键盘上的键。

虽然多数的键盘都有12个功能键,但Windows只需要10个,而位元旗标却有24个。

十进位 十六进位 虚拟键码 IBM相容键盘

1 01 VK_LBUTTON 滑鼠左键

2 02 VK_RBUTTON 滑鼠右键

3 03 VK_CANCEL Ctrl-Break

4 04 VK_MBUTTON 滑鼠中键

8 08 VK_BACK Backspace

9 09 VK_TAB Tab

12 0C VK_CLEAR CLEAR 键,Num Lock关闭时的数字键盘5

13 0D VK_RETURN Enter

16 10 VK_SHIFT Shift

17 11 VK_CONTROL Ctrl

18 12 VK_MENU Alt

19 13 VK_PAUSE Pause

20 14 VK_CAPITAL Caps Lock

27 1B VK_ESCAPE Esc

32 20 VK_SPACE Spacebar

33 21 VK_PRIOR Page Up

34 22 VK_NEXT Page Down

35 23 VK_END End

36 24 VK_HOME Home

37 25 VK_LEFT 左箭头

38 26 VK_UP 上箭头

39 27 VK_RIGHT 右箭头

40 28 VK_DOWN 下箭头

41 29 VK_SELECT SELECT

42 2A VK_PRINT PRINT SCREEN

43 2B VK_EXECUTE EXECUTE

44 2C VK_SNAPSHOT SNAP SHOT

45 2D VK_INSERT Insert

46 2E VK_DELETE Delete

47 2F VK_HELP HELP

48-57 30-39 主键盘上的09

65-90 41-5A AZ

91 5B VK_LWIN Windows

92 5C VK_RWIN Windows

93 5D VK_APPS Applications

96-105 60-69 VK_NUMPAD0VK_NUMPAD9 NumLock打开时数字键盘上的09

106 6A VK_MULTIPLY 数字键盘上的*

107 6B VK_ADD 数字键盘上的+

108 6C VK_SEPARATOR 数字键盘上的ENTER

109 6D VK_SUBTRACT 数字键盘上的-

110 6E VK_DECIMAL 数字键盘上的.

111 6F VK_DIVIDE 数字键盘上的/

112-121 70-79 VK_F1VK_F10 功能键F1F10

122-135 7A-87 VK_F11VK_F24 功能键F11F24

144 90 VK_NUMLOCK Num Lock

145 91 VK_SCROLL Scroll Lock

分享到:
评论

相关推荐

    浅析OnKeyPress事件和OnKeyDownOnKeyUp事件

    浅析OnKeyPress事件和OnKeyDown、OnKeyUp事件

    onkeypress和onkeydown以及onkeyup的区别

    onkeypress、onkeydown和onkeyup事件的区别 onkeypress、onkeydown和onkeyup是三种常用的JavaScript事件,都是与键盘输入相关的事件,但它们之间存在着一些细微的区别。 首先,让我们来看一下这三个事件的触发顺序...

    onkeyup,onkeydown和onkeypress的区别介绍

    在JavaScript中,`onkeyup`、`onkeydown`和`onkeypress`是三种与键盘交互相关的事件,它们各自有着特定的用途和响应时机。理解这三个事件的区别对于开发交互式网页应用至关重要。 首先,`onkeydown`事件会在用户按...

    javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick

    ### JavaScript中的键盘和鼠标事件 #### 键盘事件 在Web开发中,`keydown`、`keyup` 和 `keypress` 是JavaScript中常见的键盘事件。了解它们的触发顺序和特性对于创建交互式网页非常有帮助。 1. **keydown事件**...

    javascript-event-keycode-finder:找出javascript的OnKeyDown,OnKeyUp和OnKeyPress事件调用的键码的简单工具

    总的来说,理解JavaScript的键盘事件和键码对于开发富交互性的Web应用至关重要。`OnKeyDown`、`OnKeyUp`和`OnKeyPress`提供了处理用户键盘输入的方法,而键码则充当了识别这些输入的关键标识。通过`javascript-event...

    JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)

    注意:onkeypress 事件与 onkeydown 事件有些细微差别,onkeypress 事件不做相应功能键按下的处理。具体可将下面的示例更改为 onkeydown 事件后,可输入 !@#$ 等特殊字符即可体会出二者之间的差别。 提示 Internet ...

    js onkeypress与onkeydown 事件区别详细说明

    JavaScript中的`onkeypress`和`onkeydown`是两种常见的键盘事件,它们在处理用户与页面交互时起到关键作用。理解这两个事件的区别对于创建响应式的Web应用程序至关重要。 首先,`onkeydown`事件会在用户按下键盘上...

    onmouse事件总结

    8. **onKeyPress/onKeyDown/onKeyUp**: - **浏览器支持**:IE4 | Netscape4 | Opera - **描述**: - `onKeyPress`:当键盘上的某个键被按下并释放时触发。 - `onKeyDown`:当键盘上的某个键被按下时触发。 - `...

    js实现键盘控制图片的移动

    &lt;script type="text/javascript"&gt; function test(id){ alert(id); } if(typeof GetControlundefined) GetControl=function (id) ... document.onkeypress=KeyDown; //附加事件 &lt;/script&gt;

    js 键盘事件 鼠标单击事件

    本篇文章将详细介绍`onkeypress`、`onkeyup`和`onkeydown`这三个事件。 #### 二、`onkeypress`事件 `onkeypress`事件会在用户按下并释放一个字母或数字键时触发。此事件不支持系统键(例如箭头键和功能键)。`...

    JavaScript Event学习第十一章 按键的检测

    在onkeydown和onkeyup事件中,keyCode属性则包含的是键的信息而非字符信息。 在实践中,我们可以使用这两个属性来区分大小写字母,因为大写的“A”和小写的“a”虽然在键盘上是同一个键,但它们在ASCII码表中的值是...

    javaScript常用事件命令

    onkeypress 事件是在按下和释放某个按键时执行的事件。例如,在输入框中输入某个字符时,onkeypress 事件将被触发。 onkeyup 事件 onkeyup 事件是在释放某个按键时执行的事件。例如,在输入框中输入某个字符时,...

    JavaScript触发事件列表

    除了上述事件外,还有许多其他的事件,例如:ondblclick、onkeypress、onkeydown、onkeyup等。 页面相关事件 页面相关事件包括:onabort、onbeforeunload、onerror、onmove、onresize、onscroll、onstop等。 表单...

    JavaScript onkeydown事件入门实例(键盘某个按键被按下)

    与 onkeypress 事件不同的是,onkeydown 事件是响应任意键按下的处理(包括功能键),onkeypress 事件只响应字符键按下后的处理。 提示 Internet Explorer/Chrome 浏览器使用 event.keyCode 取回被按下的字符,而 ...

    BCB 窗体与控件应用基础

    - OnKeyDown和OnKeyUp事件:分别在按键按下和释放时触发,可以获取按键的虚拟码和按键状态,如Shift、Ctrl和Alt键的状态。 - OnMouseDown、OnMouseUp和OnMouseMove事件:与鼠标操作相关,如按下、释放鼠标按钮或...

    js键盘事件全面控制_兼容FireFox和IE

    JS 键盘事件可以分为三种类型:keydown、keypress 和 keyup,它们分别对应 onkeydown、onkeypress 和 onkeyup 这三个事件句柄。在这三个事件类型中,keydown 和 keyup 比较底层,而 keypress 比较高级。 浏览器的...

    JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器.docx

    在 JavaScript 中,我们可以使用 onkeydown、onkeyup、onkeypress 等事件处理程序来捕获键盘事件。 二、如何使用 JavaScript 操作键盘的 Enter 事件? 要使用 JavaScript 操作键盘的 Enter 事件,需要使用 ...

Global site tag (gtag.js) - Google Analytics