设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 687|回复: 0
打印 上一主题 下一主题

利用VBA的键盘类

[复制链接]
跳转到指定楼层
1#
发表于 2003-3-5 18:53:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
利用VBA的键盘类

 

  通过使用VBA,,你已经习惯于使用对象以及它们继承的属性和方法了。事实上,用任何其他的方法编程是很困难(甚至是很痛苦)的。不幸的是,仍然存在大量的只能提供给老式的、非面向对象方法的功能。一个典型的例子是函数调用的海洋棗Windows API。使用类模块的一个诱人特征就是你可以用一套公共接口将这样的功能体包如可以管理的对象。这就是说,你可以隐藏相关的信息集的详细资料,并将它展现给对象。

  例如,假定你已经在某个VBA项目中找到了与用户的键盘进行交互作用的需要。那么你可能想加快或降低箭头闪烁的速度;了解用户具有多少个功能键;修改键盘重复速度及重复之前的延迟时间,或者检索和设置功能键的状态,例如n, c和o。为了做到这一点,需要使用Windows API,,并且需要声明、外部函数调用、使用用户定义的类型和API定义的常量棗所有这些都是令人感到不愉快的。

  如果你有一个简单的Keyboard对象,可以提供属性来为你完成所有的工作,这不是很好吗?当然是!另外,正如已经指出的,这就是本文的目标。Windows API提供了大量的有关键盘的信息,但是检索它需要调用大量 的函数,因此你必须知道应该调用哪个函数,如何调用它们,它们返回什么信息等等。本文介绍了一个VBA Keyboard类,它具有图1中所介绍的属性(使用它们创建的模块和对象的更加吸引人的一个原因是你可以从相同的类例示多个对象,尽管你从不需要在单个应用程序中创建Keyboard类的多个实例,不使用类模块也是没有理由的)。

Property Description Allowable Values Read/Write

KeyboardType Determines the type (number of keys) of the keyboard. N/A R

FunctionKeys Determines the number of function keys. N/A R

CapsLock Retrieves or sets the state of the c toggle. True/False R/W

NumLock Retrieves or sets the state of the n toggle. True/False R/W

ScrollLock Retrieves or sets the state of the o toggle. True/False R/W

Delay Retrieves or sets the keyboard repeat-delay setting. 0-3 R/W

Speed Retrieves or sets the keyboard repeat speed. 0-31 R/W

CaretBlinkTime Retrieves or sets the number of milliseconds between blinks of the insertion caret. 200-1200 (generally in increments of 100) R/W

  图1 Keyboard类提供的属性

  为了测试一下Keyboard.cls(你将在本文的稍后部分找到代码,它还可以通过下载提供棗请参阅本文结尾以获取详细信息),你首先需要一个名为Keyboard的类模块,然后将你的代码插入项目。一旦已经在你的项目中获得了Keyboard类模块,你就可以像使用任何其他类一样使用它了。例如,使用Keyboard类创建该类的一个新实例,然后设置或检索它的可提供属性。例如,为了检索和设置当前键盘延迟设置,你可以使用类似如下的代码:

Dim okb As Keyboard

Set okb = New Keyboard

If okb.Delay < 3 Then

okb.Delay = okb.Delay + 1

End If

  这显然比直接调用大量的Windows API函数要容易得多!

用困难的方法来做

  为了完成它的工作,Keyboard需要调用Windows API。本节文章将研究特定的API调用。如果你怒感兴趣的话,可以介绍如何使用类的跳到下一节。

  键盘类型。检索键盘的类型和功能键的数目很简单。调用GetKeyboardType API函数,向它传递值0可获得键盘类型,传递值2可获得功能键 的数目。该函数将返回如图2所示的键盘类型,如图3所示的功能键数目。

Value Keyboard Type

1 IBM PC/XT or compatible (83-key)

2 Olivetti “ICO” (102-key)

3 IBM PC/AT (84-key) or similar

4 IBM enhanced (101- or 102-key)

5 Nokia 1050 and similar

6 Nokia 9140 and similar

7 Japanese

  图2 GetKeyboardType的键盘类型返回值

Value Number of Function Keys

1 10

2 12 (sometimes 18)

3 10

4 12

5 10

6 24

7 独立于硬件,由OEM指定

  图3 GetKeyboardType的功能键返回值

  当然,为了使用这些函数,类模块需要API函数的声明,因此它必须在它的Declarations段包括如下的代码行:

Private Declare Function GetKeyboardType Lib "User32" _

(ByVal lngTypeFlag As Long) As Long

为了检索键盘类型或功能键的数目(如前所述),Keyboard类模块应包含如下过程:

Property Get KeyboardType() As Long

KeyboardType = GetKeyboardType(0)

End Property

Property Get FunctionKeys() As Long

FunctionKeys = GetKeyboardType(2)

End Property

  键盘切换。为了设置键盘切换,你必须使用GetKeyboardState 和 SetKeyboardState API函数。为了检索切换键盘当前的状态,请使用GetKeyState函数。这需要如下的声明:

Private Declare Function GetKeyState Lib "User32" _

(ByVal lngVirtKey As Long) As Integer

Private Declare Function Ge
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-3 01:19 , Processed in 0.098099 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表