Free Pascal Keyboard单元过程函数详解.doc

上传人:sk****8 文档编号:2988886 上传时间:2019-05-16 格式:DOC 页数:18 大小:179.50KB
下载 相关 举报
Free Pascal Keyboard单元过程函数详解.doc_第1页
第1页 / 共18页
Free Pascal Keyboard单元过程函数详解.doc_第2页
第2页 / 共18页
Free Pascal Keyboard单元过程函数详解.doc_第3页
第3页 / 共18页
Free Pascal Keyboard单元过程函数详解.doc_第4页
第4页 / 共18页
Free Pascal Keyboard单元过程函数详解.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、索引:DoneKeyboard FunctionKeyName GetKeyboardDriver GetKeyEvent GetKeyEventChar GetKeyEventCode GetKeyEvntFlags GetKeyEventShiftState GetKeyEventUniCode InitKeyBoardIsFunctionKey KeyEventToString PollKeyEvent PollShiftStateEvent PutKeyEvent SetKeyboardDriverShiftStateToString TranslateKeyEvent Transla

2、teKeyEventUniCode这个单元实现独立于系统的键盘接入层,它可以用来轮询键盘状态,并等待某些事件。等待键盘事件可以通过 GetKeyEvent 函数来实现,它会返回一个依赖驱动程序的键盘事件。这个事件可以由 translatekeyevent 函数转换成可解释事件。这个函数的结果可用于其他事件检查函数。一个自定义的键盘驱动程序(keyboard driver)可由 SetKeyboardDriver 函数安装。当前键盘驱动程序可以用 GetKeyBoardDriver 检索。使用这个单元,一开始要调用 InitKeyboard,最后要调用 DoneKeyBoard。 (后面的程序都

3、是这样。 )注:经测试,下文的功能键指 F1F12 及方向键和 Home、 End、Insert、Page Up、Page Down、Delete 。下文说的 shift 应该是指 shift、ctrl 、alt。检测 shift 状态时返回结果是这三个键中任意多个被按下或都未按下。常量:以下常量定义了一些错误常量,可能由键盘函数返回:errKbdBase = 1010;errKbdInitError = errKbdBase + 0;errKbdNotImplemented = errKbdBase + 1;以下常量表示指定的键盘按键。第一个常量指定了功能键:constkbdF1 = $FF

4、01;kbdF2 = $FF02;kbdF3 = $FF03;kbdF4 = $FF04;kbdF5 = $FF05;kbdF6 = $FF06;kbdF7 = $FF07;kbdF8 = $FF08;kbdF9 = $FF09;kbdF10 = $FF0A;kbdF11 = $FF0B;kbdF12 = $FF0C;kbdF13 = $FF0D;kbdF14 = $FF0E;kbdF15 = $FF0F;kbdF16 = $FF10;kbdF17 = $FF11;kbdF18 = $FF12;kbdF19 = $FF13;kbdF20 = $FF14;常量$15 到$1F 为未来的功能键预留

5、。以下常量指定光标移动键:kbdHome = $FF20;kbdUp = $FF21;kbdPgUp = $FF22;kbdLeft = $FF23;kbdMiddle = $FF24;kbdRight = $FF25;kbdEnd = $FF26;kbdDown = $FF27;kbdPgDn = $FF28;kbdInsert = $FF29;kbdDelete = $FF2A;常量$2B 到$2F 为未来的键盘上的键预留。以下标志也被定义:kbASCII = $00;kbUniCode = $01;kbFnKey = $02;kbPhys = $03;kbReleased = $04;他

6、们可以用来检查键盘事件包含什么样的数据。以下 shift 状态的标志可以用来决定一个键的 shift 状态(即按一个键时 alt、shift 、ctrl 是否按下):kbLeftShift = 1;kbRightShift = 2;kbShift = kbLeftShift or kbRightShift;kbCtrl = 4;kbAlt = 8;以下常量字符串用于按键名字函数 FunctionKeyName 和 KeyEventToString:SShift : Array 1.3 of string5 = (SHIFT,CTRL,ALT);LeftRight : Array 1.2 of

7、string5 = (LEFT,RIGHT);UnicodeChar : String = Unicode character ;SScanCode : String = Key with scancode ;SUnknownFunctionKey : String = Unknown function key : ;SAnd : String = AND;SKeyPad : Array 0.($FF2F-kbdHome) of string6 =(Home,Up,PgUp,Left,Middle,Right,End,Down,PgDn,Insert,Delete,);他们可以被改成本地化的键

8、名当需要的时候。类型:TKeyEvent 类型是键盘事件的基础类型:TKeyEvent = Longint;击键用 4 字节的 TKryEvent 类型编码。击键的不同变量编码通过转换 TKeyEvent 类型到TKETRecord 类型。TKeyRecord = packed recordKeyCode : Word;ShiftState, Flags : Byte;end;以下为 TKeyRecord 结构体的解释:变量 意义KeyCode 视于 flags,物理表现的一个按键(在 dos 下扫描码,ASCII 码对)或翻译的 ASCII/unicode 字母。Shiftstate 按下一

9、个键是 shift 的状态。Flags 决定怎样解释 KeyCodeShift 的状态可以用不同的 shift 状态常量检查,最后一个类型中的标记可以用kbASCII、kbUniCode、kbFnKey、kbPhys、kbReleased 常量中的一个检查。如果两个按键返回同样的字符按键,没有办法找出按下了哪一个。如果需要知道,未翻译的字符码必须使用,但是这依赖于系统。依赖于系统的常量被定义来覆盖这些,它们有可能有同样的名字。TKeyboardDriver 记录可以被用来安装一个自定义的键盘驱动通过使用 SetKeyboardDriver函数。TypeTKeyboardDriver = Rec

10、ordInitDriver : Procedure;DoneDriver : Procedure;GetKeyEvent : Function : TKeyEvent;PollKeyEvent : Function : TKeyEvent;GetShiftState : Function : Byte;TranslateKeyEvent : Function (KeyEvent: TKeyEvent): TKeyEvent;TranslateKeyEventUniCode: Function (KeyEvent: TKeyEvent): TKeyEvent;end;不同的变量对应这个单元接口部

11、分的不同函数。过程和函数:DoneKeyboard定义:Procedure DoneKeyboard;描述:如果键盘驱动处于活动状态,此过程初始化键盘接口。如果键盘驱动处于非活跃状态,这个过程什么也不做。这会使键盘驱动程序清空任何已分配的内存。或恢复程序在其中运行的控制台或终端到调用 InitKeyBoard 命令前的状态。这个过程应该在程序结束时调用。不这么做的活可能使终端或控制台窗口处于一个不可用状态。它确切的行动取决于程序运行的平台。返回 页首FunctionKeyName定义:Function FunctionKeyName (KeyCode : Word) : String;描述:将

12、代码为 KeyCode 的功能键转换为字符串形式返回。这可以是一个实际的功能键,也可以是光标移动键。错误:如果 keycode 不包含功能键,返回 SUnknownFunctionKey 字符串,并在其后添加KeyCode。例子:Program Example8; Program to demonstrate the FunctionKeyName function. Uses keyboard; Var K : TkeyEvent; begin InitKeyboard; Writeln(Press function keys, press “q“ to end.); Repeat K:=G

13、etKeyEvent; K:=TranslateKeyEvent(K); If IsFunctionKey(k) then begin Write(Got function key : ); Writeln(FunctionKeyName(TkeyRecord(K).KeyCode); end; Until (GetKeyEventChar(K)=q); DoneKeyboard; end.返回页首GetKeyboardDriver定义:Procedure GetKeyboardDriver (Var Driver : TKeyboardDriver);描述:通过 driver 返回当前活跃打

14、键盘驱动程序。这个过程可以用来加强现有的键盘驱动程序。 返回页首GetKeyEvent定义:function GetKeyEvent: TKeyEvent;描述:返回上一个键盘事件如果一个被储存在 PendingKeyEvent 中,或者等待一个如果没有可见的(意思是有键按下就返回,没有就等待直到有键按下) 。在 PollKeyEvent 中一个非阻塞的版本是可用的。错误:没见按下,返回 0.例子:program example1; This program demonstrates the GetKeyEvent function uses keyboard; Var K : TKeyEve

15、nt; begin InitKeyBoard; Writeln(Press keys, press “q“ to end.); Repeat K:=GetKeyEvent; Write(Got key event with ); Case GetKeyEventFlags(K) of kbASCII : Writeln(ASCII key); kbUniCode : Writeln(Unicode key); kbFnKey : Writeln(Function key); kbPhys : Writeln(Physical key); kbReleased : Writeln(Release

16、d key event); end; K:=TranslateKeyEvent(K); Writeln(Got key : ,KeyEventToString(K); Until (GetKeyEventChar(K)=q); DoneKeyBoard; end.返回 页首GetKeyEventChar定义:function GetKeyEventChar(KeyEvent: TKeyEvent): Char;描述:返回 keyevent 的字符码部分如果它包含一个翻译的字符键的键码。字符码是按下的字符键的 ASCII 码。如果他返回空字符表示这个键不是字符键,是功能键。返回页首GetKeyE

17、ventCode定义:function GetKeyEventCode(KeyEvent: TKeyEvent): Word;描述:返回翻译后的 keyevent 的功能键码部分,如果它包含一个翻译的功能键。如果按下的键不是功能键,返回空。例子:Program Example2; Program to demonstrate the GetKeyEventCode function. Uses keyboard; Var K : TKeyEvent; begin InitKeyBoard; Writeln(Press function keys, or press “q“ to end.);

18、Repeat K:=GetKeyEvent; K:=TranslateKeyEvent(K); If (GetKeyEventFlags(K)0 then begin K:=GetKeyEvent; K:=TranslateKeyEvent(K); writeln; Writeln(Got key : ,KeyEventToString(K); end else write(.); Until (GetKeyEventChar(K)=q); DoneKeyBoard; end.返回页首PollShiftStateEvent定义:function PollShiftStateEvent: TKe

19、yEvent;描述:返回当前键盘事件的 shift 状态。如果没有键盘事件在等待就返回 0.例子:program example6; This program demonstrates the PollShiftStateEvent function uses keyboard; Var K : TKeyEvent; begin InitKeyBoard; Writeln(Press keys, press “q“ to end.); Repeat K:=PollKeyEvent; If k0 then begin if (k2 mod 2)=0 then K2:=K+1 else K2:=0

20、; K:=TranslateKeyEvent(K); Writeln(Got key : ,KeyEventToString(K); if (K20) then begin PutKeyEvent(k2); K2:=TranslateKeyEVent(K2); Writeln(Put key : ,KeyEventToString(K2) end end Until (GetKeyEventChar(K)=q); DoneKeyBoard; end.返回页首SetKeyboardDriver定义:Function SetKeyboardDriver (Const Driver : TKeybo

21、ardDriver) : Boolean;描述:设置 driver 为键盘驱动程序,如果当前键盘驱动程序未被初始化。如果当前键盘驱动程序已被初始化,它就什么不做。在设置驱动程序之前,当前键盘驱动程序应通过调用DoneKeyboard 来禁用。如果驱动程序被设置就返回 true,没有就返回 false。返回页首ShiftStateToString定义:Function ShiftStateToString(KeyEvent : TKeyEvent; UseLeftRight : Boolean) : String;描述:返回 keyEvent 键盘事件的 shift 状态的字符串描述。它可以返回空字符串。Shift 状态通过使用 SShift 常量中的字符串来描述。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。