|
|
|
|
|
|
|
|
|
|
|
教学目标:
设计一个屏幕保护程序要求:程序运行时,在窗体的不同位置上随机产生不同大小、不同颜色的圆圈;同时,一行文字从窗体左边开始向右移动,当文字到达窗体右边界时又让它回到左边界,重复刚才的运动;最后,单击窗体,结束程序运行。 窗体的WindowState属性是用于设置一个窗体运行时的大小状态。有3个属性值供选择:默认值是“0-Normai”,此时的窗体大小由Width,Height等属性决定;“1-Minminzed"属性值使窗体最小化成图标;“2-Maximized"属性值使窗体以全屏方式出现。 在程序中使用WindowState属性的格式如下: Obiect.WindowsState[=Value] 若是Obiect对象,Value的值可以是0、1或2(0、1、2的含义同上)。如果不选Value的值,则为取默认值。 一、设计“屏幕保护“程序界面 根据题目要求,程序在窗体上放置1个Label控2个Timer控件。 二、设置对象属性 说明: Timer1和Timer2的Interval的属性值设置为100,表示1/10秒执行一次。 Label1的BackStyle的属性值为0-Transparernt,Laberl1背景色透明(可以看到窗体颜色),BackColor(字体颜色)属性值为&H008080FF Fo\rm1的WindowsState属性值设置为Maximial,即全屏幕方式显示,BackColor设置为黑色。 如果一个窗体中的不同过程要使用同一个变量,就需要在该窗体内的过程外面定义一个变量,它在整个窗体中有效,即其作用域为整个窗体,本窗体内的所有过程都能访问;这就是窗体的变量。 声明这一级变量要先进入程序代码窗口,单击左侧下拉列表框右端的下三角按钮并选择“通用”按钮,再单击右侧下拉列表框右端的下三角按钮选择“声明”。 数组:用一个名字来代表的按一定顺序排列的一组具有相同属性、类型的数据或变量称为数组。数组中的每个数据或变量称为数组元素。每个数组元素都处于数组中的某一确定位置,这个位置就称为该元素的下标。下标可以是常数、已赋值的变量和表达式等。 数组变量的格式:数组名(下标)) 其中,数组名的规定与简单变量名相同。例如;a(1)、a(2)、a$(1)、h(4)、h(5)。 数组说明语句(在使用数组前,一般需要对数组进行定义(说明),即说明数组的大小和名称等)的格式: Dim数组名(最大下标)[,数组名(最大下标),…] [ As数据类型] 其中,方括号中内容为选项。 例如:dima(10) 该语句定义了一个名为A的数组一维数组。它的最小下标是0,最大下标是10,共有11个元素:a(0),a(1),…,a(10)。 一个数组说明语句中,可以同时定义几个数组。 例如:Dima(10),b(10),c(10) 该语句定义了数组名为a、b、c的3个数组一维数组。 三、编写程序代码 程序先定义了3个窗体级的数组变量:Dim x(10),y(10),r(10) 由Timer1控制程序运行时,在窗体的不同位置上随机产生不同大小、不同颜色的圆。 Dim x(10), y(10), r(10) Private Sub Form_Click() End End Sub Private Sub Timer1_Timer() Static p As Integer ‘定义变量I为整数型静态变量 Randomize Timer ‘随机函数播种语句 If p = 10 Then p = 0 p = p + 1 Circle (x(p), y(p)), r(p), QBColor(0) ‘用黑色画圆 x(p) = Fix(Rnd * Form1.Width) ‘随机产生圆心的X坐标 y(p) = Fix(Rnd * Form1.Height) ‘随机产生圆心的Y坐标 r(p) = Fix(Rnd * 500) + 200 ‘随机产生圆心的半径 Circle (x(p), y(p)), r(p), RGB(Rnd * 256, Rnd * 256, Rnd * 256) End Sub 其中,Circle(x(p),y(p)),r(p),QBColor(0)语句是为了使用背景色涂掉一些圆。 Private Sub Timer2_Timer() Label1.Left = Label1.Left + 100 If Label1.Left > Form1.Width Then Label1.Left = 0 End Sub 由Timer2控制程序运行时,文字在窗体上的运动。 程序是让Labell从左往右移动,就是改变:Label1的Left属性:使其逐步增加。每1/10秒执行一次此段程序时,让Labell的Left属性加100(VB定义的屏幕单位);当它走出Form时,再把Labell的Left属性设置为0,也就是让它再从左边出来。 单击窗体,程序结束。 四、调试运行程序 在调试运行程序之前,建议先以“屏幕保护“为文件名存盘. 程序可能存在的问题是: (1) Labe和Timer2的interval是否为非0值,如果是0,则Timer1先效。 (2)Timer2的程序代码里是否有Labell..Left+100的语句。 五、练一练 设计如图程序。要求:有计算机随机产生8个1000以内的正整数,并由计算机从大到小排序。
以“排序”为文件名存盘。 程序代码如下: Private Sub Command1_Click() Randomize ‘随机播种语句 For i = 1 To 8 ‘随机产生8个1000之内的正整数,赋予数组a的各个变量 a(i) = Fix(Rnd * 1000) + 1 Next i Label2.Caption = a(1) ‘将变量a(I)的值显示在Label2的Caption上 Label3.Caption = a(2) Label4.Caption = a(3) Label5.Caption = a(4) Label6.Caption = a(5) Label7.Caption = a(6) Label8.Caption = a(7) Label9.Caption = a(8) Command1.Enabled = False Command2.Enabled = True End Sub
Private Sub Command2_Click() For i = 1 To 7 m = i For j = i + 1 To 8 If a(m) < a(j) Then m = j Next j x = a(i): a(i) = a(m): a(m) = x Next i Label11.Caption = a(1) ‘将变量a(I)的值(最大数)显示在Label2的Caption Label12.Caption = a(2) Label13.Caption = a(3) Label14.Caption = a(4) Label15.Caption = a(5) Label16.Caption = a(6) Label17.Caption = a(7) Label18.Caption = a(8) Command1.Enabled = False Command2.Enabled = False End Sub 程序中使用a数组采存放8个随机数,先设定a(1)中存放最大数,a(2)中存放次大;…,a(8)存放最小数。程序中使用双重循环对8个随机数进行排序,设定变量a(m)存放内层循环执行一遍后得到最大数。基本思路如下: 当外层循环变量i的值取1时,假设,a(1)中放a数组中的最大的数,也就是将循环变量i的值赋给变量m(即程序中的m=i语句)。进入内层循环,内层循环变量i的值由i+1变化到8。内层循环体是将a(m)的值与a(》(即与a(i+1)到a(8))中的值逐一进行比较,若遇到a(m)中的值小于某个a((j)中的值,则将这个数组变量的下标赋给变量m(即程序中的If a(m)<a(j) Then m=j语句),这时a(m)中的值已经换成这个大的数,然后用a(m)中的值继续与余下的a(j)进行比较,若再遇到小于a(j)中的值情况则重复上面的过程,直至比较完毕,退出内循环。此时a(m)中存放着第I次循环得到的A数组中第I个最大的数。 Private Sub Command3_Click() Label2.Caption = "" ‘清空Label2 Label3.Caption = "" Label4.Caption = "" Label5.Caption = "" Label6.Caption = "" Label7.Caption = "" Label8.Caption = "" Label9.Caption = "" Label11.Caption = "" Label12.Caption = "" Label13.Caption = "" Label14.Caption = "" Label15.Caption = "" Label16.Caption = "" Label17.Caption = "" Label18.Caption = "" Command1.Enabled = True Command2.Enabled = False End Sub |
|
|
|
|
|
|