




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
看见微软智能拼音输入法的小键盘了吗?那东东可以在输入的时候用代替键盘。 当不希望操作员使用键盘的时候,那么你就要考虑为她或他提供软键盘了。下面我们就用VB来做这 个软键盘。 准备工作: 先画两个窗体Form1和Form2,Form2是作为接收按键测试用的,在上面放一个文本框Text1,把 Text1的MultiLine属性设为True,ScrollBars设为3-Both,然后写入如下代码: PrivateDeclareFunctionEnableWindowLibuser32(ByValhwndAsLong,ByVal fEnableAsLong)AsLong PrivateSubForm_Load() 调整大小 Me.Width=Screen.Width*0.9 Me.Height=Screen.Height*0.9 Form1.Show 禁止鼠标和键盘输入 EnableWindowText1.hwnd,False EndSub PrivateSubForm_Resize() 调整文本框大小 Text1.Top=0 Text1.Left=0 Text1.Width=Me.ScaleWidth Text1.Height=Me.ScaleHeight EndSub PrivateSubForm_Unload(CancelAsInteger) End EndSub Form1作为小键盘用,把它的BorderStyle设为3-FixedDialog,把ControlBox属性设 为False,这样小键盘就没有标题栏了。Form1得跟微软智能拼音输入法的小键盘完全一样的大小 的窗体,经笔者的计算长高是53102130。然后放上10个按扭,其中九个的Caption分别是 Tab、Caps、Shift、Ins、Del、(空格)、Esc、Enter和(退格)。它们的位置和大小如下设 置: CaptionTopLeftHeightWidthName Shift12300400840Command1 Caps8280400560Command2 Tab4100400480Command3 Ins16400400570Command4 Del1640870400550Command5 (空格)164014004002565Command6 Esc16404670400550Command7 Enter8204590400630Command9 (退格)8204590400630Command10 接下来做一个Height为400、Width为360的按扭Command8,Caption为Aa(注意中间是两个空 格,这一点非常重要!),由于按扭太小,系统会自动换行,看上去A在a的上面。复制该按扭,然 后在窗体上粘贴,程序会提示你是否产生控件数组,选择是,Command8变成了Command8(0),新产 生的按扭为Command8(1),一直粘贴,直到Command8(46),修改它们的Caption使之与键盘上的其 它键一样。这里要注意几点: 1、按扭的字体为“小五”,有几个键显示的结果是纵向并排,可把字体设为“六号”,使之横向 并排,字体使用宋体,否则和显示的不漂亮。 2、&符号要使用两个,即&7(&与7之间只有一个空格),确保每个按扭的Caption的长度为四 个字母。 3、把窗体的MousePointer设为15-SizeAll,以便在运行的时候移动小键盘。 4、把所有按键的MousePointer都设为99-Custom,而MouseIcon设为手形指针。 5、由于要指示Shift是否按下,Command1的Style属性设置为1-Graphical。 6、Form2的StartUpPosition属性设置为2-屏幕中心。 我们把Command8(x)的这些键暂时叫做“普通键”。由于前面已经定位了9个特殊键,所以可以通 过菜单栏的“格式”里面的“顶端对齐”、“相同水平间距”等选项很容易地把47个普通键放到与 键盘对应的位置上。另外,为了显示CAPSLOCK的状态,我们在窗体上加一个标签Label1,把它的 AutoSize属性设为True,Caption属性设为,它的Top、Left、Height和With分别为1340、 4800、180和180。 接下来是写代码了,这里主要用了SendMessage发送消息的API函数,由于按扭CAPTION设置的巧 妙,所以47个普通键的代码就用的很少。所有代码如下: API声明 PrivateDeclareFunctionReleaseCaptureLibuser32()AsLong PrivateDeclareFunctionSendMessageLibuser32AliasSendMessageA(ByVal hwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsLong)AsLong PrivateDeclareFunctionSetWindowPos&Libuser32(ByValhwndAsLong,ByVal hWndInsertAfterAsLong,ByValXAsLong,ByValYAsLong,ByValcxAsLong, ByValcyAsLong,ByValwFlagsAsLong) PrivateDeclareSubGetKeyboardStateByStringLibuser32 AliasGetKeyboardState(ByValpbKeyStateAsString) PrivateDeclareSubSetKeyboardStateByStringLibuser32 AliasSetKeyboardState(ByVallppbKeyStateAsString) 常数 ConstVK_CAPITAL=&H14 ConstWM_CHAR=&H102 ConstHTCAPTION=2 ConstWM_NCLBUTTONDOWN=&HA1 ConstWM_KEYDOWN=&H100 ConstVK_DELETE=&H2E ConstVK_INSERT=&H2D 定义变量 DimrcasLong PrivateSubCommand1_Click() Shift键 IfCommand1.BackColor=&H8000000BThen Command1.BackColor=&H80000005 Else Command1.BackColor=&H8000000B EndIf EndSub 退格键 PrivateSubCommand10_Click() rc=SendMessage(Form2.Text1.hwnd,WM_CHAR,8,1) EndSub 大小写转换键 PrivateSubCommand2_MouseDown(ButtonAsInteger,ShiftAsInteger,XAs Single,YAsSingle) DimCAPITALKeyAsString*256 CAPITALKey=Space$(256) GetKeyboardStateByString(CAPITALKey) IfLabel1.ForeColor=vbBlackThen Label1.ForeColor=vbGreen Mid$(CAPITALKey,VK_CAPITAL+1,1)=Chr$(1) Else Label1.ForeColor=vbBlack Mid$(CAPITALKey,VK_CAPITAL+1,1)=Chr$(0) EndIf CallSetKeyboardStateByString(CAPITALKey) EndSub TAB键 PrivateSubCommand3_Click() rc=SendMessage(Form2.Text1.hwnd,WM_CHAR,9,1) EndSub Ins键 PrivateSubCommand4_Click() rc=SendMessage(Form2.Text1.hwnd,WM_KEYDOWN,VK_INSERT,&H510001) EndSub Del键 PrivateSubCommand5_Click() rc=SendMessage(Form2.Text1.hwnd,WM_KEYDOWN,VK_DELETE,1) EndSub 空格键 PrivateSubCommand6_Click() rc=SendMessage(Form2.Text1.hwnd,WM_CHAR,32,1) EndSub Esc键 PrivateSubCommand7_Click() rc=SendMessage(Form2.Text1.hwnd,WM_CHAR,27,1) EndSub 普通键 PrivateSubCommand8_Click(IndexAsInteger) DimkeyxAsInteger IfCommand1.BackColor=&H80000005XorLabel1.ForeColor=vbGreenThen keyx=Asc(Mid(Command8(Index).Caption,1,1) Else keyx=Asc(Mid(Command8(Index).Caption,4,1) EndIf rc=SendMessage(Form2.Text1.hwnd,WM_CHAR,keyx,1) Command1.BackColor=&H8000000B EndSub 回车键 PrivateSubCommand9_Click() rc=SendMessage(Form2.Text1.hwnd,WM_CHAR,13,1) EndSub 让小键盘在最前面 PrivateSubForm_Load() rtn=SetWindowPos(Me.hwnd,-1,0,0,0,0,3) EndSub 移动没有标题的小键盘 PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,Y AsSingle) IfButton=1Then DimReturnValAsLong X=ReleaseCapture() ReturnVa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年注册验船师资格考试(B级船舶检验专业基础安全)能力提高训练题及答案一
- 2025年公路水运检测师考试《道路工程》真题及答案(完整版)
- 2025年注册验船师资格考试(C级船舶检验法律法规)强化练习题及答案一
- 2025年(自考)护理管理学考试题库及答案(含各题型)
- 2025年高校教务招聘笔试模拟题及考点解析
- 2025年高级测试工程师面试题解析及测试技巧
- 2025年金融专业毕业生求职面试模拟题集及解析
- 2025年考试无忧技术类招聘笔试模拟题及答案速递
- 校长读书汇报课件
- 2025年信息系统项目管理师中级模拟题与答案指南
- 排尿评估及异常护理方法
- 语音厅新人培训:从零开始到主播之路
- 2025央国企AI+数智化转型研究报告
- 公司销售pk策划方案
- 2025年浙江省初中学业水平考试数学试卷真题(精校打印)
- 最小单元应急管理制度
- 洞藏酒项目商业实施计划书
- 税收征管数字化转型实践的国际比较及借鉴
- 2024年甘肃白银有色集团股份有限公司招聘真题
- 药房药品追溯管理制度
- 液氧应急预案管理制度
评论
0/150
提交评论