北京电大VisualBasic程序设计第4章VB高级语言技巧.ppt

上传人:w****2 文档编号:6295588 上传时间:2020-02-21 格式:PPT 页数:98 大小:1.04MB
返回 下载 相关 举报
北京电大VisualBasic程序设计第4章VB高级语言技巧.ppt_第1页
第1页 / 共98页
北京电大VisualBasic程序设计第4章VB高级语言技巧.ppt_第2页
第2页 / 共98页
北京电大VisualBasic程序设计第4章VB高级语言技巧.ppt_第3页
第3页 / 共98页
点击查看更多>>
资源描述
1 VisualBasic程序设计 第4章VB高级语言技巧 2 4 1多功能计算器任务4 1 1任务描述在第三章简单计算器的基础 增加以下功能 1 将计算结果转换为十六进制 2 就数字键设置为命令按钮组 使 0 9 数字按键的Index属性分别为0 1 2 3 4 5 6 7 8 9 3 禁止键盘在文本框中输入数据 4 使计算器总是悬浮在其它窗体上 界面如下页所示 3 4 4 1 2界面设计 1 添加 十六进制 和 数字大写 两个文本框 分别命名为txtHex和txtBig 2 删除原来的 0 9 数字按钮控件 并重新放置一个命令按钮控件 将其Caption属性设置为 0 3 复制该数字命令按钮 4 在数字区框架控件上 粘贴该数字命令按钮 系统询问是否创建一个控件数组 回答 是 将它的Caption属性改为 1 Index属性值设置为1 按照上述方法粘贴数字按钮控件 2 9 5 此时得到一个按钮控件数组 0 9 它们的Index书香依次为 0 9 6 将TxtBig的ToolTipText属性设置为 大写数字 5 4 1 3代码设计 1 用API函数实现 总在前面 效果 1 程序代码在代码编辑器的 通用 部分声明SetWindowPos函数及相关常数 PrivateDeclareFunctionSetWindowPosLib user32 ByValhwndAsLong ByValhWndInsertAfterAsLong ByValxAsLong ByValyAsLong ByValcxAsLong ByValcyAsLong ByValwFlagsAsLong AsLongPrivateConstHWND TOPMOST 1PrivateConstSWP NOMOVE H2PrivateConstSWP NOSIZE H1然后在Form的Load事件中加入以下代码 SetWindowPoshwnd HWND TOPMOST 0 0 0 0 SWP NOMOVEOrSWP NOSIZE 6 1 API函数调用的一般方法 要在VB中使用API函数 首先要在工程的标准模块 Module 或窗体的代码的 通用 部分中声明它 然后可以按照调用VB其它函数一样来使用它 获得函数声明的一般方法 在安装VB系统后 通常会在VB程序组中看到 API文本浏览器 的应用程序 步骤如下 沿 开始 程序 MicrosoftVisualStudio6 0 MicrofoftViaualStodio6 0Tools APITextWiewer 找到API浏览器 7 8 第1步 启动 API文本浏览器 9 10 第2步 选择 文件 加载文本文件 菜单项 11 加载WinAPI txt文件 12 第3步 选择API类型 声明 13 第4步 选择立刻用项SetWindowPos 将声明范围设置为 私有 14 按添加按钮 15 第5步 就选定项下的VB代码复制 16 第5步 将复制的VB代码粘贴到窗体代码编辑器中的 通用 声明 部分 17 习题P115一 单项选择题 2 能够实现 窗体总在最前端 界面效果的API函数是 A SetWindowPosB SetWindowAPIC SetWindowShapeD DeclareAPI答案 A 18 2 数字区命令按钮的Click事件 PrivateSubCommand1 Click IndexAsInteger 使用Str函数将Index转换为字符串 然后使用Trim函数去掉前后空格IftxtLabel Text ThentxtFirst Text txtFirst Text Trim Str Index ElsetxtSecond Text txtSecond Text Trim Str Index EndIfEndSub 19 3 禁止用户在文本框中输入数字 PrivateSubtxtResult KeyDown KeyCodeAsInteger ShiftAsInteger KeyCode 0 禁止所有的键盘输入 除BackSpace退格键外 EndSubPrivateSubtxtResult KeyPress KeyAsciiAsInteger KeyAscii 0 禁止BackSpace退格键EndSub 20 习题P116二 填空题 1 通常可将文本框控件的属性设置为True 以禁止键盘输入 答案 Locked 21 4 修改 计算结果 按钮的Click事件代码 计算结果 命令按钮的Click事件PrivateSubCommand17 Click 定义一个Double类型的变量DimMyResultAsDouble 以txtLable Text的值为多重分支条件SelectCasetxtLabel TextCase 当txtLabel Text的值为 时MyResult Val txtFirst Text Val txtSecond Text Case 当txtLabel Text的值为 时MyResult Val txtFirst Text Val txtSecond Text Case 当txtLabel Text的值为 时MyResult Val txtFirst Text Val txtSecond Text Case 当txtLabel Text的值为 时MyResult Val txtFirst Text Val txtSecond Text EndSelect 22 4 修改 计算结果 按钮的Click事件代码 txtResult Text MyResult 显示计算结果 将计算结果转换为十六进制数字txtHex Text Hex MyResult 将计算结果转换为大写数字 采用函数功能完成 txtBig Text ChangeMe MyResult EndSub 23 5 编写ChangeMe函数代码 PrivateFunctionChangeMe FirstAsDouble AsString 声明变量DimstrFirstAsStringDimstrBig 9 AsString 声明一个字符串数组DimstrTempAsStringDimi jAsInteger 设置数组变量的值strBig 0 零 strBig 1 壹 strBig 2 贰 strBig 3 叁 strBig 4 肆 strBig 5 伍 strBig 6 陆 strBig 7 柒 strBig 8 捌 strBig 9 玖 24 5 编写ChangeMe函数代码 将Double型的参数First转换为字符串型strFirst Trim Str First strTemp 开始数字转换Fori 1ToLen strFirst 取出第i位的字符数字 并将它转换为数值型j Val Mid strFirst i 1 通过数组完成大写转换strTemp strTemp strBig j Nexti 将转换结果返回ChangeMe strTempEndFunction 演示 25 习题P116三 问答题 5 请简述多功能计算器与第3章计算器在功能上的区别 答 区别有以下几点 1 能将计算结果转换为十六进制 2 将数字键设置为命令按钮组 使 0 9 数字按键的Index属性分别为0 1 2 3 4 5 6 7 8 9 用按键的Index来识别输入的数字 3 禁止键盘在文本框中输入数据 4 使计算器总是悬浮在其它窗体上 26 4 2数组的使用 4 2 1数组1 数组的概念VB把一组具有同一名字 不同下标的变量称为数组 它实际上是一组具有相同类型的变量的集合 根据下标的个数可分为一维数组 二维数组 多维数组 例如 设置数组变量的值strBig 0 零 strBig 1 壹 strBig 2 贰 strBig 3 叁 strBig 4 肆 strBig 5 伍 strBig 6 陆 strBig 7 柒 strBig 8 捌 strBig 9 玖 27 2 声明静态数组 数组分为静态数组和动态数组 定义静态数组的方法与变量的声明方法基本相同 有两种声明方法 1 方法1Dim数组名 上界 As数据类型这种定义方法 默认情况下数组的下界从0开始 因此数组元素的个数等于上界 1 数组的全部元素都初始化为0 数值型 或空字符串 字符串型 例如定义一维数组 DimA 5 AsInteger数组A包括6个数组元素 A 0 A 1 A 5 28 2 方法2 Dim数组名 下界To上界 采用这种方法可以根据需要设置下标的起始和结束值 即上界和下界 例如DimA 1To5 AsInteger该数组包括5个元素 A 1 A 2 A 5 也可定义二维数组 例如 DimA 1To5 1To5 AsInteger该数组包括A 1 1 A 1 2 A 1 5 A 5 1 A 5 2 A 5 5 又如 DimA 5 5 AsInteger该数组包括36个元素 A 0 0 A 0 1 A 0 2 A 0 5 A 5 0 A 5 1 A 5 2 A 5 5 29 3 动态数组 如果事先不能确定数组元素的个数 可以采用动态数组声明技术 主要方法是 1 首先声明一个静态数组 只定义其数组名 不指定数组的大小 例如DimAAsInteger 2 在程序执行过程中 使用ReDim语句修改数组的大小或数组的上界 例如 ReDimA 20 AsIntegerReDimA 1To20 AsInteger 30 习题P115一 单项选择题 1 DimA 1To6 1To5 定义的数组包含的元素个数是 A 30B 25C 42D 动态变化答案 A 31 习题P116二 填空题 4 DimA 1To6 定义的数组包含个元素 答案 6 32 习题P116三 问答题 3 什么是数组 如何声明 使用数组有什么好处 答 VB把一组具有同一名字 不同下标的变量称为数组 它实际上是一组具有相同类型的变量的集合 数组分为静态数组和动态数组 定义静态数组的方法与变量的声明方法基本相同 有两种声明方法 方法1 Dim数组名 上界 As数据类型方法2 Dim数组名 下界To上界 As数据类型 使用数组可以使程序代码更清晰 简洁 可以方便灵活地组织数据 33 4 2 2控件数组 控件数组是一种特殊的数组 与普通数组的主要区别是 它的数据类型为控件类型 每个数组元素都是一个控件对象 这些控件对象共用一个相同的名字 即所有的元素的Name属性值相同 各控件元素用Index属性表示数组下标 34 数字区命令按钮的Click事件 PrivateSubCommand1 Click IndexAsInteger 使用Str函数将Index转换为字符串 然后使用Trim函数去掉前后空格IftxtLabel Text ThentxtFirst Text txtFirst Text Trim Str Index ElsetxtSecond Text txtSecond Text Trim Str Index EndIfEndSub 35 数字区命令按钮的Click事件也可编写如下 PrivateSubCommand1 Click IndexAsInteger SelectCaseIndexCase0IftxtLabel Text ThentxtFirst Text txtFirst Text 0 ElsetxtSecond Text txtSecond Text 0 EndIfCase1IftxtLabel Text ThentxtFirst Text txtFirst Text 1 ElsetxtSecond Text txtSecond Text 1 EndIf 36 Case9IftxtLabel Text ThentxtFirst Text txtFirst Text 9 ElsetxtSecond Text txtSecond Text 9 EndIfEndSelectEndSub利用Select或If选择结构 通过对Index属性值的判断 响应不同按钮元素的单击事件 37 习题P116一 单项选择题 3 如果创建了命令按钮数组控件 那么Click事件的参数是 A IndexB CaptionC TagD 没有参数答案 A 38 习题P116二 填空题 2 在程序运行过程中可以使用语句修改数组的上下界 答案 ReDim 39 4 2 3枚举及自定义数据类型 1 枚举当一个变量只可能取几个值时 可将其定义为枚举型 比如一个变量取1 7之间的整数来表示星期几 则可以把这个变量定义为枚举型 枚举类型只能有一个元素 要定义枚举型变量 须先用关键字Emum定义一个枚举类型 例如 PublicEnumenmDay星期日 1星期一 2 星期五 6星期一 7EndEmun 40 4 2 3枚举及自定义数据类型 该语句定义了一个名为enmDay的枚举变量 注意emnDay本身并不是一个变量 它只是用户自己定义的新的数据类型 一经定义 就可以像VB提供的标准数据类型 如String Integer 一样使用 例如 DimMydayAsemnDay 声明一个变量Myday 其数据类型为enmDayMyday 星期日 为变量赋值 即Myday 1使用枚举型时应注意几点 1 枚举类型中的元素只能表示长整型常数 2 枚举类型应在模块级别中定义 3 当定义时没有给枚举成员赋值时 系统自动为第一个成员赋值0 以后的成员值依次加1 41 2 自定义类型自定义类型与枚举类型一样 也是一种构造型数据 称为记录类型 使用方法如下 1 定义PublicTypeStudent学号AsString 10姓名AsString 10年龄AsInteger籍贯AsStringEndType该语句定义了一个名为Student的数据类型 2 声明变量DimxAsStudent 3 使用x 学号 2004001 x 姓名 张红 42 枚举和自定义类型是一种有效的数据组织方式 尽管不使用它们也照样可以开发出功能强大的应用程序 但有效地应用这两种方式 可以使程序代码更清晰 简洁 如果要使用这两种方式 最好能在模块中用Public定义 以便整个应用程序使用 43 4 3过程和函数的定义和调用 VB窗体和控件的每一个事件都是一个过程 称为事件过程 它们总是与特定的控件对象相关联 所以被认为是私有 Private 过程 此外 VB还提供了一些内置的由系统预先编好的函数 比如Trim Str和Val函数等 在VB中 将Sub EndSub定义的子程序称为Sub过程 子过程 而将Function EndFuction定义的函数称为Function过程 函数过程 44 4 3 1为什么要编写自定义过程 函数过程是一种代码分块技术 采用这种技术将应用程序划分为多个程序模块 其好处是 1 过程规模小 容易调用和维护 2 过程可以被反复调用 避免了重复编码 加强了可重用性 3 过程是由处理某一特定功能的代码组成 是一个相对独立的实体 将应用程序划分为这样一个实体 会使程序结构简洁 便于阅读维护 45 习题P116三 问答题 1 为什么要编写自定义过程 因为自地那以过程有以下好处 1 过程规模小 容易调用和维护 2 过程可以被反复调用 避免了重复编码 加强了可重用性 3 过程是由处理某一特定功能的代码组成 是一个相对独立的实体 将应用程序划分为这样一个实体 会使程序结构简洁 便于阅读维护 46 4 3 2Sub过程 1 定义一般应在窗体代码编辑器的 通用 部分定义私有的Sub过程 一经定义则可以在窗体的所有地方调用它 47 如果希望定义整个应用程序均可以使用的公有过程 则最好在标准模块 Module 进行 48 2 调用 调用过程的方法非常简单 如图所示 49 习题P116一 单项选择题 4 如果要在窗体代码编辑器的 通用 部分定义私有Sub过程 则正确的语句是 A PublicSubB PublicFnctionC PrivateSubD PrivateFunction答案 C 50 4 3 3Fucttion函数 1 定义Function过程以一个返回值表示执行结果 也有公有的和私有的两种作用范围 例如 在窗体中定义一个返回整型数据的私有Function函数 PrivateFunctionPlusXY xAsInteger yAsInteger AsIntegerPlusXY x yEndFunction2 调用Function过程的调用方法如下 DimIAsIntegerI PlusXY 1 2 51 4 3 4参数传递机制简介 大部分过程都含有参数 将Sub过程或Function过程定义中出现的变量名称为形式参数 而在调用时传递给Sub过程和Function过程的常量 变量或表达式称为实际参数 将参数以变量形式传递的过程称为参数传递 VB中参数传递机制有两种 一种是引用参数传递 默认 另一种是按值传递参数 52 1 引用传递参数 这种方式将参数变量的内存地址传递给Sub或Function过程 过程通过内存地址访问实际参数的内容 从而可以方便地改变实际参数的值 53 PrivateSubChange xAsInteger yAsInteger 本程序将参数x y的值互换DimtAsIntegert xx yy t 在窗体是输出结果Print x x y yEndSubPrivateSubForm Click DimaAsIntegerDimbAsIntegera 3 b 4Changea bPrint a a b bEndSub 演示 运行结果 x 4 y 3A 4 b 3我们发现 调用Change过程后 实际参数a b的值也发生了变化 这就是引用传递参数的执行结果 54 2 按值传递参数 按值传递参数是只把参数的数值传递给过程 也称传值方式 即传递给过程的只是实际参数的副本 即使过程调用时改变了形式参数的值 实际参数也不会改变 如果按值传递参数 需要在定义过程时在形式参数前面加是G关键字ByVal 例如上例中 PrivateSubChange ByValxAsInteger ByValyAsInteger DimtAsIntegert xx yy t 在窗体是输出结果Print x x y yEndSub 运行结果 x 4 y 3a 3 b 4 55 4 4键盘和鼠标使用技巧 驱动VB应用程序运行的主要动力是事件响应 在VB响应的所有事件中 数目最多也最重要的是对键盘和鼠标的响应事件 因为键盘和鼠标是用户和应用程序交互的主要工具 下面系统介绍鼠标和键盘常用事件的使用技巧和原理 56 习题P116三 问答题 2 简述参数传递机制 答 VB中参数传递机制有两种 一种是引用参数传递 默认 另一种是按值传递参数 引用参数传递是将参数变量的内存地址传递给Sub或Function过程 过程通过内存地址访问实际参数的内容 从而可以方便地改变实际参数的值 按值传递参数是只把参数的数值传递给过程 也称传值方式 即传递给过程的只是实际参数的副本 即使过程调用时改变了形式参数的值 实际参数也不会改变 如果按值传递参数 需要在定义过程时在形式参数前面加是G关键字ByVal 57 4 4 1响应键盘事件 常用的键盘事件主要有KeyPress KeyUp和KeyDown KeyPress事件 用户按下某ASCII字符的键 因此它不是对所有的键盘码均响应 比如键盘上的删除键 KeyDown和KeyUp事件 按下或释放键盘上的任意键时均会触发该事件 包括Delete删除键 58 1 焦点处理 窗体或控件 对象 的焦点是对象活动的标志 在Windows应用中 可以同时运行几个应用程序 但只有具有焦点的应用程序才有活动标题栏 才能接受用户输入 在同一窗体中 也只有具有焦点的的TextBox文本框才能接受键盘输入 总之只有获得焦点的窗体或控件才能接受键盘事件 所以在处理键盘事件嵌 应首先对焦点进行处理 59 实现控件焦点的两种方法 1 SetFocus方法在程序运行时 通过鼠标选择操作或控件的SetFocus方法实现 VB所提供的标准控件一般都有一个SetFocus方法 通过该方法可以把焦点赋予指定的控件 是一种灵活的焦点控制方法 比如希望在程序运行期的某个阶段 使某个控件后得焦点被激活 可使用以下代码 控件名 SeFocus 60 实现控件焦点的两种方法 2 利用Tab控制键VB所有可被设置焦点的控件均具有一个TabIndex属性 默认情况些 在窗体上创建的第一个控件的TabIndex的值为0 第一个控件的TabIndex的值为1 移此类推 可按预先设计好的顺序 改变控件的TabIndex的值 这样就可以在程序运行期间 通过Tab键使焦点按TabIndex的值 从小到大在众多控件中切换 如果不希望使某些控件获得焦点 就可以把该控件的TabStop属性值设置为False 当然 如果控件不可视 Visible False 或不可用 Enabled False 也不可能获得焦点了 61 习题P116二 填空题 3 如果不希望某个控件获得焦点 则可以将它的属性设置为False 答案 TabStop 62 习题P116三 问答题 4 什么是焦点 设置控件焦点有哪些方法 答 窗体或控件 对象 的焦点是对象活动的标志 只有获得焦点的窗体或控件才能接受键盘事件 设置控件焦点的两种方法 SetFocus方法 控件名 SeFocus 按预先设计好的顺序 改变控件的TabIndex的值 63 2 窗体的键盘事件 如果希望无论何时按下某个键 都会同时执行同一操作 而不管此时到底哪个控件具有焦点的话 就可以使用窗体的键盘事件 具体方法是 首先将窗体的KeyPreview属性设置为True 然后再编写相应的键盘事件处理程序 64 1 KeyDown和KeyUp事件分析 计算机键盘上的每一个键均有一个键码 称为键码 KeyCode参数返回了键盘的键码值 通过它判断用户按下哪个键 既可以用数字也可以利用VB提供的键码常数进行判断处理 比如vbKeyF1 F1键 vbKeyHome Home键 vbKeyA A和a键 等 例如 IfKeyCode vbKeyBackThenIfKeyCode vbKeyDeleteThen 65 2 Shift参数 通过该参数判断用户是否按下了Shift Ctrl或Alt键 例如 IfShift vbShiftMaskThenIfShift vbCtrlMaskThenIfShift vbAlttMaskThenIf Shift vbAltMask And KeyCode VbKeyA Then 66 3 KeyPress事件 KeyPress事件发生于KeyDown和KeyUp之间 它只有一个KeyAscii参数 反映了用户通过键盘输入的字符的ASCII码 当需要处理标准ASCII字符时可使用这个事件 但要处理扩展字符键 组合键和定位键时 则只能使用KeyDown和KeyUp事件 例如 PrivateSubText1 KeyPress IndexAsInteger KeyAsciiAsInteger 只允许输入数字 其中用到的数字48和57分别表示字符0和9的ASCII码If KeyAscii57 ThenKeyAscii 0EndIfEndSub 67 常用键盘码与ASCII码的对应关系 键码未必都有对应的ASCII码 A和a的ASCII码不同 但它们在键盘上是一个按键 因此键码是一样的 68 习题P116一 单项选择题 5 键盘事件的执行顺序是 A KeyPress KeyDown KeyUpB KeyDown KeyPress KeyUpC KeyUp KeyDown KeyPressD KeyUp KeyPress KeyDown答案 B 69 习题P116四 程序设计题 2 键盘按键程序 请使用MsgBox过程对窗体的KeyDown和KeyPress事件编程 以显示按下 放开一个键时事件的发生过程 比如 当按下了A键时程序界面如图所示 70 代码设计 PrivateSubText1 KeyDown KeyCodeAsInteger ShiftAsInteger MsgBox KeyDown事件发生了 KeyCode的值是 KeyCode Chr 13 Shift参数的值是 Shift 0 键盘按键程序 EndSubPrivateSubText1 KeyPress KeyAsciiAsInteger MsgBox KeyPress事件发生了 KeyAscii的值是 KeyAscii 0 键盘按键程序 EndSubPrivateSubText1 KeyUp KeyCodeAsInteger ShiftAsInteger MsgBox KeyUp事件发生了 KeyCode的值是 KeyCode Chr 13 Shift参数的值是 Shift 0 键盘按键程序 EndSub 演示 71 4 SendKeys过程 利用SendKeys可以将一个或多按键消息发送到湖动窗口 就如同在键盘上湿润一样 比如 SendKeys Tab SendKeys A10 SendKeys Enter SendKeys Left3 SendKeys F1 SendKeys CapsLock 72 例 在所示界面中 为了加快用户的输入速度 希望每当用户按完回车键后 控制焦点自动移到下一个 就可以在文本框控件数组中加入以下代码 PrivateSubText1 KeyPress KeyAsciiAsInteger IfKeyAscii 13ThenSendKeys tab EndIfEndSub 73 PrivateSubText2 KeyPress KeyAsciiAsInteger IfKeyAscii 13ThenSendKeys tab EndIfEndSubPrivateSubText3 KeyPress KeyAsciiAsInteger IfKeyAscii 13ThenSendKeys tab EndIfEndSub 演示 74 习题P116四 程序设计题 1 焦点切换程序 在一窗体上创建一文本框控件数组 并设置好它们的TabIndex属性 然后使用SendKeys语句编写文本框事件的KeyPress事件 运行时 当按下回车键后 空间的焦点自动切换 第一步 设计界面第二步 设计代码 75 PrivateSubText1 KeyPress IndexAsInteger KeyAsciiAsInteger SelectCaseIndexCase0IfKeyAscii 13ThenSendKeys tab EndIfCase1IfKeyAscii 13ThenSendKeys tab EndIfCase2IfKeyAscii 13ThenSendKeys tab EndIfCase3IfKeyAscii 13ThenSendKeys tab EndIfEndSelectEndSub 76 4 4 2响应鼠标事件 1 改变鼠标的形状每个窗体和控件都具有MousePointer属性 可通过它赋予它0 15间的不同值改变鼠标形状 既可在设计阶段进行 也可以在程序代码中改变设置 2 使用自定义鼠标形状如果将MousePointer属性的值设置为99 则可以使用自定义鼠标形状 方法是 首先找一些光标 cur 或 ico 文件 然后通过MouseIcon属性完成设置 77 4 4 2响应鼠标事件 3 MouseDown和MouseUp事件这两个事件主要有两个参数 1 Button参数可用来区分当前鼠标的左 中 右按键 0表示按下左键 1表示按下右键 2表示按下中间键 2 Shift参数可用来区分鼠标与键盘的组合 它的值等于1 表示Shift键按下 2表示Ctrl键 4表示Alt键 3 x y参数返回鼠标指针当前的位置 计量单位由窗体的ScaleMode决定 它们的值被限定在caleHeight ScaleWidth ScaleLeft和ScaleTop属性所建立的坐标系内 78 习题P116四程序设计题 4 随机序列排序程序 使用第三章学过的Ren函数生成10个1 99之间的随机整数 并按从小到大的顺序排序 最后在列标框控件中输出 本程序主要使用数组 自定义过程 引用传递参数等知识 79 代码设计 PrivateSubMyRnd B AsInteger DimiAsIntegerRandomizeFori 1To10B i Int Rnd 100 MsgBox 产生的第 i 个随机数是 B i 0 当前产生的随机数 NextiEndSub 80 代码设计 PrivateSubCommand1 Click DimA 1To10 AsIntegerDimiAsIntegerMyRndAFori 1To10Forj i 1To10IfA i A j Thent A i A i A j A j tEndIfNextjNextiList1 ClearFori 1To10List1 AddItemA i NextiEndSub 81 实验4鼠标 键盘 API函数调用 一 键盘错位程序1 实验要求通过对文本框控件的鼠标KeyPress事件的编程 使得键盘按键发生错位 比如电脑感按下 A 键时 在文本框中将显示字母 B 依次类推 2 实验步骤第1步 界面设计 82 实验4鼠标 键盘 API函数调用 一 键盘错位程序第1步 代码设计 83 实验4鼠标 键盘 API函数调用 二 实用的键盘使用技巧1 实验要求利用键盘的KeyPress事件进行编程 使控件焦点轮流在三文本框和 确定 按钮之间转换 84 实验4鼠标 键盘 API函数调用 二 实用的键盘使用技巧1 实验步骤第1步 进行界面设计 Text1为文本框数组 自上而下索引号 Index 依次为0 1 2 Texe1 0 Text1 1 Text1 2 Command1的TabIndex属性依次设置为0 1 2 3 85 实验4鼠标 键盘 API函数调用 一 实用的键盘使用技巧1 实验步骤第1步 进行代码设计 编写Form Load事件代码PrivateSubForm Load 当Form启动时 对Text1控件数组赋初值Fori 0ToText1 Count 1Text1 i Text NextEndSub 86 编写Text1控件数组的KeyPress事件代码PrivateSubText1 KeyPress IndexAsInteger KeyAsciiAsInteger 当键入户车键时 ASCII码为13 发送Tab键IfKeyAscii 13ThenSendKeys tab EndIf 如果当前的焦点是Text1 2 则只允许用户输入数字IfIndex 2ThenIf Chr KeyAscii 9 AndKeyAscii8ThenKeyAscii 0EndIfEndIfEndSub 87 编写Command1的Click事件代码PrivateSubCommand1 Click 显示输出结果 其中vbcr等效于Chr 13 DimstrSQLAsStringstrSQL 根据你的输入值 拼写SQL语句如下 vbCrstrSQL strSQL INSERTINTO学生表 学号 姓名 年龄 vbCrstrSQL strSQL VALUES Text1 0 Text Text1 1 Text Text1 2 Text MsgBoxstrSQL vbQuestion vbOKOnly 信息提示 使得Text1 0 重新获得焦点Text1 0 SetFocusEndSub 编写Command2的Click事件代码PrivateSubCommand2 Click EndEndSub 88 实验4鼠标 键盘 API函数调用 三 鼠标事件应用1 实验要求利用鼠标的MouseMove事件进行编程 使Label1控件的Caption 欢迎进入VisualBasic世界 跟随鼠标移动 同时字体的颜色页也会不断变化 89 实验4鼠标 键盘 API函数调用 三 鼠标事件应用2 实验步骤第1步 界面设计 90 实验4鼠标 键盘 API函数调用 三 鼠标事件应用2 实验步骤第2步 代码设计PrivateSubForm MouseMove ButtonAsInteger ShiftAsInteger XAsSingle YAsSingle 随机改变Label1空间的前景色Label1 ForeColor RGB Rnd 255 Rnd 255 Rnd 255 根据鼠标当前的X Y坐标设置Label1控件的Top和Left属性Label1 Top YLabel1 Left XEndSub 91 实验4鼠标 键盘 API函数调用 四 窗体窗体总在最前面实验1 实验要求本实验程序由两个窗体组成 Form1窗体为普通窗体 是启动窗体 Form2是ToolWindow窗体 具有 总在前端 属性 每个窗体包含一个Text1控件 当在Form2的Text1输入文字时 form1的Text1显示相应的内容 2 实验步骤第1步 界面设计 92 实验4鼠标 键盘 API函数调用 四 窗体窗体总在最前面实验第2步 代码设计 1 复制API引用 使用VB提供的API文本浏览器得到以下API函数以及相关变量的声明 并将它们复制到Form1代码编辑器的 通用 部分 PrivateDeclareFunctionSetWindowPosLib user32 ByValhwndAsLong ByValhWndInsertAfterAsLong ByValxAsLong ByValyAsLong ByValcxAsLong ByValcyAsLong ByValwFlagsAsLong AsLongPrivateConstHWND TOPMOST 1PrivateConstSWP NOMOVE H2PrivateConstSWP NOSIZE H1 93 实验4鼠标 键盘 API函数调用 四 窗体窗体总在最前面实验第2步 代码设计PrivateSubCommand1 Click 以非模态方式显示Form2窗体Form2 Show 调用API函数使得Form2具有 总在前端 效果SetWindowPosForm2 hwnd HWND TOPMOST 0 0 0 0 SWP NOMOVEOrSWP NOSIZEEndSubPrivateSubForm Load Text1 Text EndSub 94 实验4鼠标 键盘 API函数调用 四 窗体窗体总在最前面实验第3步 运行效果 95 实验4鼠标 键盘 API函数调用 五 百叶窗图形特效实验1 实验要求在VB中调用Windows的API函数 实现实现百叶窗图形特效显示 2 实验步骤第1步 界面设计 96 实验4鼠标 键盘 API函数调用 五 百叶窗图形特效实验2 实验步骤第1步 界面设计 97 实验4鼠标 键盘 API函数调用 四 窗体窗体总在最前面实验第2步 代码设计 1 复制API函数BiyBlt声明 通过API文本浏览器将BitBlt函数复制到Form1代码段的 通用 部分PrivateDeclareFunctionBitBltLib gdi32 ByValhDestDCAsLong ByValxAsLong ByValyAsLong ByValnWidthAsLong ByValnHeightAsLong ByValhSrcDCAsLong ByValxSrcAsLong ByValySrcAsLong ByValdwRopAsLong AsLong 98 实验4鼠标 键盘 API函数调用 2 编写Command1的Click事件代码PrivateSubCommand1 Click Dimh wAsIntegerDimScanLineAsIntegerDimi jAsIntegerDimcAsLongPicture1 ScaleMode 3 以像素为单位h Picture1 ScaleHeightw Picture1 ScaleWidthScanLine 2 百叶窗的密度可根据需要调整Fori 0To ScanLine 1 Forj 1TohStepScanLinetmps BitBlt Picture2 hDC 0 j w 1 Picture1 hDC 0 j HCC0020 Forc 1To320000 延时 可根据需要调整 NextNextNextEndSub
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!