下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用 VB 制作软键盘 看见微软智能拼音输入法的小键盘了吗?那东东可以在输入的时候用代替键盘。 当不希望 操作员使用键盘的时候,那么你就要考 虑为她或他提供软键盘了。下面我们就用 VB 来做这 个软键盘。 准备工作: 先画两个窗体 Form1 和 Form2,Form2 是作为接收按键测试用的, 在上面放一个文本框 Text1, 把 Text1 的 MultiLine 属性设为 True,ScrollBars 设为 3-Both, 然后写入如下代码: Private Declare Function EnableWindow Lib user32 (ByV al hwnd As Long, By
2、V al fEnable As Long) As LongPrivate Sub Form_Load() 调整大小 Me.Width = Screen.Width * 0.9 Me.Height = Screen.Height * 0.9 Form1.Show 禁止鼠标和键盘输入 EnableWindow Text1.hwnd, False End Sub Private Sub Form_Resize() 调整文本框大小 Text1.Top = 0 Text1.Left = 0 Text1.Width = Me.ScaleWidth Text1.Height = Me.ScaleHeight
3、 End Sub Private Sub Form_Unload(Cancel As Integer) End End Sub Form1 作为小键盘用, 把它的 BorderStyle 设为 3-Fixed Dialog, 把 ControlBox 属性设为 False, 这样小键盘就没有标题栏了。 Forml得跟微软智能拼音输入法的小键盘完全一样的大小的窗体,经笔者的计算长x高是 5310 x 2130。然后放上10个按扭,其中九 个的 Caption 分别是 Tab、Caps、f Shift、Ins、Del、(空格)、Esc、Enter 和(退格)。它们 的位置和大小如下设置: Capt
4、ion Top Left Height Width Name f Shift 1230 0 400 840 Command1 Caps 828 0 400 560 Command2 Tab 410 0 400 480 Command3 Ins 1640 0 400 570 Command4 Del 1640 870 400 550 Command5 (空格) 1640 1400 400 2565 Command6 Esc 1640 4670 400 550 Command7 Enter 820 4590 400 630 Command9 (退格) 820 4590 400 630 Comman
5、d10 接下来做一个 Height为400、Width为360的按扭Command8,Caption为A a (注意中间是两 个空格,这一点非常重要! ),由于按扭 太小,系统会自动换行,看上去 A 在 a 的上面。复制该按扭,然后在窗体上粘贴,程序会 提示你是否产生控件数组,选择是 Command8 变 成 了 Command8(0), 新 产 生 的 按 扭 为 Command8(1), 一 直 粘 贴 , 直 到 Command8(46) ,修改它们的 Caption 使之与键盘上的 其它键一样。这里要注意几点: 1 、按扭的字体为“小五” ,有几个键显示的结果是纵向并排,可把字体设为“
6、六号” ,使之 横向并排,字体使用宋体,否则f和显示的不漂亮。 2、 &符号要使用两个,即& 7(&与7之间只有一个空格),确保每个按扭的 Caption的长 度为四 个字母。 3、把窗体的 MousePointer 设为 15 - Size All ,以便在运行的时候移动小键盘。 4、 把所有按键的 MousePointer都设为99 - Custom,而Mouselcon设为手形指针。 5、由于要指示 Shift 是否按下, Command1 的 Style 属性设置为 1-Graphical 。 6、Form2 的 StartUpPosition 属性设置为 2-屏幕中心。 我们把 Co
7、mmand8(x) 的这些键暂时叫做“普通键” 。由于前面已经定位了 9 个特殊键,所以 可以通 过菜单栏的“格式”里面的 “顶端对齐” 、“相同水平间距”等选项很容易地把 47 个普通键放到与键盘对应的位置上。 另外,为了显示 CAPS LOCK 的状态,我 们在窗体上加一个标签Labell,把它的 AutoSize属性设为True,Caption属性设为,它的 Top、Left、Height 和 With 分别 1340、 4800、180和180。接下来是写代码了,这里主要用了SendMessage发送消息的 API函数, 由于按扭 CAPTION 设置的巧妙,所以 47 个 普通键的代
8、码就用的很少。所有代码如下: API 声明 Private Declare Function ReleaseCapture Lib user32 () As Long Private Declare Function SendMessage Lib user32 Alias SendMessageA (ByV al hwnd As Long, ByV al wMsg As Long, ByV al wParam As Long, lParam As Long) As Long Private Declare Function SetWindowPos& Lib user32 (ByV al h
9、wnd As Long, ByV al hWndInsertAfter As Long, ByV al X As Long, ByV al Y As Long, ByVal cx As Long, ByVal cy As Long, ByV al wFlags As Long) Private Declare Sub GetKeyboardStateByString Lib user32 Alias GetKeyboardState (ByV al pbKeyState As String) Private Declare Sub SetKeyboardStateByString Lib us
10、er32 Alias SetKeyboardState (ByV al lppbKeyState As String) 常数 Const VK_CAPITAL = &H14 Const WM_CHAR = &H102 Const HTCAPTION = 2 Const WM_NCLBUTTONDOWN = &HA1 Const WM_KEYDOWN = &H100 Const VK_DELETE = &H2E Const VK_INSERT = &H2D 定义变量 Dim rc as Long Private Sub Command1_Click() Shift 键 If Command1.B
11、ackColor = &H8000000B Then Command1.BackColor = &H80000005 Else Command1.BackColor = &H8000000B End If End Sub 退格键 Private Sub Command10_Click() rc = SendMessage(Form2.Text1.hwnd, WM_CHAR, 8, 1) End Sub 大小写转换键 Private Sub Command2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Sing
12、le) Dim CAPITALKey As String * 256 CAPITALKey = Space$(256) GetKeyboardStateByString (CAPITALKey) If Label1.ForeColor = vbBlack Then Label1.ForeColor = vbGreen Mid$(CAPITALKey, VK_CAPITAL + 1, 1) = Chr$(1) Else Label1.ForeColor = vbBlack Mid$(CAPITALKey, VK_CAPITAL + 1, 1) = Chr$(0) End If Call SetK
13、eyboardStateByString(CAPITALKey) End Sub TAB 键 Private Sub Command3_Click() rc = SendMessage(Form2.Text1.hwnd, WM_CHAR, 9, 1) End Sub Ins 键 Private Sub Command4_Click() rc = SendMessage(Form2.Text1.hwnd, WM_KEYDOWN, VK_INSERT, &H510001) End Sub Del 键 Private Sub Command5_Click() rc = SendMessage(For
14、m2.Text1.hwnd, WM_KEYDOWN, VK_DELETE, 1) End Sub 空格键 Private Sub Command6_Click() rc = SendMessage(Form2.Text1.hwnd, WM_CHAR, 32, 1) End Sub Esc 键 Private Sub Command7_Click() rc = SendMessage(Form2.Text1.hwnd, WM_CHAR, 27, 1) End Sub 普通键 Private Sub Command8_Click(Index As Integer) Dim keyx As Inte
15、ger If Command1.BackColor = &H80000005 Xor Label1.ForeColor = vbGreen Then keyx = Asc(Mid(Command8(Index).Caption, 1, 1) Else keyx = Asc(Mid(Command8(Index).Caption, 4, 1) End If rc = SendMessage(Form2.Text1.hwnd, WM_CHAR, keyx, 1) Command1.BackColor = &H8000000B End Sub 回车键 Private Sub Command9_Cli
16、ck() rc = SendMessage(Form2.Text1.hwnd, WM_CHAR, 13, 1) End Sub 让小键盘在最前面 Private Sub Form_Load() rtn = SetWindowPos(Me.hwnd, -1, 0, 0, 0, 0, 3) End Sub 移动没有标题的小键盘 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then Dim ReturnV al As Long X = ReleaseCapture() ReturnVal = SendMe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 检测技术服务合同范本
- 卫浴建材采购合同标准文本模板
- 建筑施工合同示范文本及业务指导手册
- 商业合同风险防控案例分析
- 大数据清洗服务合同协议
- 城际配送配送增值服务合同协议
- 居家办公人员劳动合同
- PDA数据采集合作合同协议
- 货物进口报关协议合同
- 2025年特种专业工程施工总承包合同
- 埃斯特维华义制药有限公司年产35吨4800、25吨4790高级中间体技改项目环境影响报告书
- 魔力宝贝宠物卡片武器物品编码
- 小学毕业班动员会教学课件
- 汽车坡道玻璃雨棚施工方案
- 护理质量检查记录69528
- 盆底肌表面肌电解读
- 《南州六月荔枝丹》公开课PPT
- 四川省地震灾区重大地质灾害治理工程资料全套表格
- 核对稿-700单元联锁
- 山塘整治工程建设方案
- 中国医院质量安全管理 第4-6部分:医疗管理 医疗安全(不良)事件管理 T∕CHAS 10-4-6-2018
评论
0/150
提交评论