苹果8puls7puls设置什么只要喊一声还siri它就会出来?我不是按Home

扫二维码下载作业帮
1.75亿学生的选择
下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
在vb程序中,如果绘制了一条直线,怎样让这条直线通过控制上下左右键来移动,
扫二维码下载作业帮
1.75亿学生的选择
你用Line控件在窗体上绘制一条直线,然后复制下面的代码到代码窗口: Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)With Line1
Select Case KeyCode
Case vbKeyUp
.Y1 = .Y1 - 60
.Y2 = .Y2 - 60
Case vbKeyDown
.Y1 = .Y1 + 60
.Y2 = .Y2 + 60
Case vbKeyLeft
.X1 = .X1 - 60
.X2 = .X2 - 60
Case vbKeyRight
.X1 = .X1 + 60
.X2 = .X2 + 60
End SelectEnd WithEnd Sub
Private Sub Form_Load()Me.KeyPreview = TrueEnd Sub
如果是用Line命令实时画出来的直线,也可以实现移动的,原理差不多,就是先清屏,然后根据方向键移动几个像素的位置后重新画,或者不清屏,用底色擦除原直线后挪个位置重新画.但是这种方法移动过程中会出现闪烁现象,所以不推荐.
为您推荐:
扫描下载二维码第9章 图形操作
我的图书馆
第9章 图形操作
掌握常用图形控件的使用;
了解坐标系统;
理解绘图属性;
理解图形方法;
掌握图形操作的应用。
重点、难点
直线控件与形状控件的使用;
坐标系统;
绘图属性、图形方法的应用。
为用户提供了简洁有效的图形图像处理能力。除了窗体和控件的图形图像特征以外,它还提供了一系列基本的图形函数、语句和方法,支持直接在窗体上产生图形、图像和颜色,控制对象的位置和外观。
9.1 图形控件
中与图形有关的标准控件有种,即图片框()、图像框()、直线()和形状()等控件。图片框和图像框在第章已做介绍,在这一节中介绍直线控件()和形状控件的用法。
直线控件()和形状控件
,也是图形控件。直线控件可以显示水平线、垂直线或者对角线,通过属性的设置可以改变直线的粗细、颜色和样式。形状控件预定义了种形状,可以显示矩形、正方形、椭圆、圆形、圆角矩形或者圆角正方形,同时可以设置形状的颜色和填充图案。
⒈ 直线控件属性
直线除了具有、、、等标准属性外,还具有以下属性:
、、、属性。返回或设置直线控件的起始点
的坐标。水平坐标是
和;垂直坐标是
(2)属性。返回或设置直线的颜色。
(3)属性。返回或设置直线的样式,取值如表所示。
表9.1 BorderStyle属性取值表
(缺省值)实线。边框处于形状边缘的中心
返回或设置直线的宽度,默认单位为像素。
⒉ 形状控件属性
、、、、、等标准属性适用于形状控件,上述的属性、属性、属性也可用于形状控件,分别设置形状边界的颜色、形状边界线的样式和形状边界线的宽度。除此以外形状控件还有下列属性:
返回或设置形状控件背景是透明的还是非透明的,同控件。如果该属性设置为非透明,则由属性所指定的颜色来填充。
返回或设置用于填充形状的颜色。
返回或设置用来填充形状的图案,取值如表所示。
表9.2 FillStyle属性取值表
(缺省值)透明
上斜对角线
下斜对角线
交叉对角线
返回或设置一个值,该值指示一个控件的外观,取值如表所示。
表9.3 Shape属性取值表
(缺省值)矩形
圆角正方形
用控件的属性显示控件的种形状,并填充不同的图案,如图所示。
图9.1 Shape属性确定的形状
分析:在窗体上放置一个控件,设置其属性为。在循环中使用方法按行的顺序产生个控件数组对象,通过改变属性和属性,形成各种形状,并填充不同的图案。
程序代码如下:
Private Sub Form_Activate()
Dim i As Integer
Print " 0 1 2 3 4 5"
Shape1(0).Shape = 0
Shape1(i).FillStyle = 2
For i = 1 To 5
Load Shape1(i) '
装入数组控件
Shape1(i).Left = Shape1(i -1).Left +1000 '确定控件Left属性
Shape1(i).Visible = True '
显示该控件
Shape1(i).Shape = i '
确定所需要的几何形状
Shape1(i).FillStyle = i + 2 '
填充不同的图案
9.2 图形操作基础
对于对象的摆放及图形的处理工作,其位置与大小是最先需要获得的信息。对象的坐标系统是绘制各种图形的基础。设置坐标系统的目的在于确定容器中点的位置。坐标包括横坐标轴和纵坐标轴,值是指点与原点的水平距离,值是指点与原点的垂直距离。坐标系统选择的恰当与否将直接影响着图形的质量和效果。
9.2.1 坐标系统
前面已经介绍过,窗体、框架()、图片框()等都可以作为其他控件的容器。因此如果在窗体中放置控件或绘图,坐标的值就是以窗体为容器;如果在窗体的图片框中绘制控件,坐标就以图片框为容器。任何容器的默认坐标系统,都是从容器的左上角坐标开始,如图所示。
图9.2 窗体的坐标系统
中有种坐标系统,如表所示。默认的坐标系统以缇()为
表9.4 Visual Basic的度量单位
用户自定义类型。当用设置坐标系统后,自动设置为。
缇(),英寸。
点()点英寸。
坐标系统的度量单位可通过属性来设置,设置对象的属性可以改变坐标系统的单位,例如可以采用像素或毫米为单位。其语法格式为:
属性值如表所示。对象省略时,指当前窗体。
表9.5 ScaleMode属性设置值
vbCharacters
vbMillimeters
vbCentimeters
自定义坐标系统
缇(默认,567twips/cm,1440twips/inch)
点(72points/inch)
像素(显示器分辨率的最小单位)
字符(水平每个单位等于120twips,垂直每个单位等于240twips)
例如,设置图片框的刻度单位为像素:
Picture1.ScaleMode=3
方法用于为窗体、图片框或对象设置新的坐标系统,其语法格式为:
其中,设置对象的左上角坐标,设置对象右下角坐标。使用方法将把对象在方向上分为-等分,在方向上分为-等分。使用方法将自动把属性设置为。
例如,将窗体的左上角和右下角设置为和,则窗体为单位宽和单位度:
Form1.Scale(100, 100) - (200, 200)
左上角的水平和垂直坐标可以分别用和来指定,右下角水平和垂直坐标则可以用和指定。例如下述代码:
Form1.ScaleLeft = 100
Form1.ScaleTop = 100
Form1.ScaleWidth = 200
Form1.ScaleHeight = 200
与上面的方法指定效果是一样的。
和属性用于表示当前点的水平和垂直坐标,即下一次打印或绘图的起点坐标,在设计时不可以用。
9.2.2 自定义坐标系
对象的坐标系允许用户自行定义。方法是建立用户坐标系最方便的方法,其语法如下:
[对象.],,]
其中:对象可以是窗体、图片框或打印机。如果省略对象名,则为带有焦点的窗体对象。,表示对象的左上角的坐标值,,为对象的右下角的坐标值。均为单精度数值。根据给定的坐标参数计算出,,,的值:
ScaleLeft = xLeft
ScaleTop = yTop
ScaleWidth = xRight - xLeft
ScaleHeight = yBotton - yTop
在事件中通过方法定义窗体的坐标系。
Private Sub Form_Paint()
Form1.Scale (-200,250) - (300, -150)
Line (-200, 0) -(300, 0) '
Line (0, 250) - (0,-150) '
CurrentX = 0 : CurrentY = 0: Print 0 '
标记坐标原点
CurrentX = 280 : CurrentY = 20 : Print "X" '
CurrentX = 10 : CurrentY = 240 : Print "Y" '
窗体的坐标系如图所示。
图9.3 控件数组对话框
任何时候在程序代码中使用方法都能有效地和自然地改变坐标系统。当方法不带参数时,则取消用户自定义的坐标系,而采用默认坐标系。
此外,也可通过设置对象的,,和四项属性来定义坐标系。对象左上角坐标为,,右下角坐标为,。根据左上角和右下角坐标值的大小自动设置坐标轴的正向。轴与轴的度量单位分别为和。例如,设置窗体的四项属性为:
Form1.ScaleLeft = -200
Form1.ScaleTop = 250
Form1.ScaleWidth = 500
Form1.ScaleHeight = -400
窗体的左上角坐标为,,右下角坐标为和,即,。轴的正向向右,轴的正向向上。其效果与上图相同。
9.3 绘图属性
一个图形要想在容器中以恰当的位置,合适的线条和颜色显示出来,就要利用提供的属性和方法设置图形的当前坐标、线宽、线型和色彩,以便满足用户的需要。
9.3.1 当前坐标
窗体或图片框或打印机的、属性给出这些对象在绘图时的当前坐标。这两个属性在设计阶段不能使用。当坐标系确定后,坐标值,表示对象上的绝对坐标位置。如果坐标值前加上关键字,则坐标值,表示对象上的相对坐标位置,即从当前坐标分别平移,个单位,其绝对坐标值为,。
当使用方法后,、属性值为。
用方法在窗体上随机显示个★和个☆,如下图所示。
分析:利用、属性可指定方法在窗体上的输出位置。用函数与窗体的和属性相乘,产生、的值。由于函数产生的值在到之间,故、必定在窗口有效区域内。可以用循环控制变量的奇偶性决定★或☆的
程序代码如下:
Private Sub Form_Click()
Dim i As Integer
For i = 1 To 100
CurrentX = Form1.Width * Rnd
CurrentY = Form1.Height * Rnd
If (i Mod 2) = 0 Then
Print "★ "
Print "☆ "
图9.4 使用当前坐标
9.3.2 线宽与线型
窗体、图片框或打印机的属性给出这些对象上所画线的宽度或点的大小。属性以像素为单位来度量,最小值为。
窗体或图片框或打印机的属性给出这些对象上所画线的形状。属性设置意义及效果如图所示。
图9.5 DrawStyle属性
以上线型仅当属性值为时才能产生。当的值大于且属性值为时,都只能产生实线效果。当的值大于,而属性值为时,所画的内实线仅当是封闭线时起作用。
为内侧实线方式,在画封闭图形时,线宽的计算从边界向内,而实线方式()画封闭图形时,线宽的计算以边界为中心,一半在边界内,一半在边界外。如图所示,为线宽,画同样大小方框所产生的不同效果
图9.6 内实线与实线方式的区别
如果使用控件,则通过属性定义线的宽度或点的大小,通过属性给出所画线的形状。
通过改变属性值在窗体上画出不同的线形,产生如图所示效果。程序代码如下:
Private Sub Form_Click()
Dim j As Integer
Print "DrawStyle 0 1 2 3 4 5 6"
CurrentX =600 '
设置直线的开始位置
CurrentY = ScaleHeight / 3
DrawWidth = 1 '
宽度为1时DrawStyle属性才能产生线型
For j = 0 To 6
DrawStyle = j '
定义线的形状
CurrentX = CurrentX + 150
Line -Step(600, 0) '
画线长600的线段
9.3.3 填充与色彩
封闭图形的填充方式由、这两个属性决定。属性指定填充图案的颜色,默认的颜色与相同。属性指定填充的图案,共有种内部图案,属性设置填充图案如图所示。
图9.7 FillStyle属性指定填充的图案
其中:为实填充,它与指定填充图案的颜色有关;为透明方式。
默认采用对象的前景色(属性)绘图,也可以通过以下颜色函数指定色彩。
1. RGB函数
函数通过红、绿、蓝三基色混合产生某种颜色,常见的标准颜色值如表。其语法为:
(红,绿,蓝)
其中:括号中红、绿、蓝三基色的成份使用之间的整数。例如:,,返回黑色;而,,返回白色。
常见的标准颜色值
从理论上来说,用三基色混合可产生××种颜色,但是实际使用时受到显示硬件的限制。
2. QBColor函数
函数采用所使用的种颜色,如表。其语法格式为:
其中:函数的颜色码实际上返回一个指定红、绿、蓝三原色的值,用于设置中系统的对应颜色。例如:对应,对应。
表9.7 颜色码与颜色对应表
3. 直接输入数值
颜色值的格式是进制的,为。代表蓝色,代表绿色,代表红色。例如:
Form1.BackColor = &HFF0000
与 Form1.BackColor = RGB(0, 0, 255)
的含义是一样的。
4. 使用颜色常数
将经常使用的颜色值定义为内部常数,颜色常数包括:、、、、、、、等,这些常数可以使用对象浏览器列出。当使用这些内部常数时,无需了解这些常数是如何产生的,也无需声明。例如,无论什么时候想指定红色作为颜色参数或颜色属性的设置值,都可以使用常数:
Form1.BackColor = vbRed
利用滚动条设计一个调色板。
在窗体上添加个水平滚动条数组形式用于调整红色、绿色及蓝色的值,并将其属性设为、属性设为。添加个标签用于表示滚动条的当前数值。添加个图片框,用于响应调出的颜色,并将另外个属性设为红色、绿色及蓝色,如图所示。
图9.8 调色板范例
滚动条的事件代码如下:
Private Sub HScroll1_Change(Index As Integer)
Picture1.BackColor = RGB(HScroll1(0), HScroll1(1), HScroll1(2))
For i = 0 To 2
label1(i).Caption = HScroll1(i).Value
演示颜色的渐变过程。
分析:要定义渐变,可多次调用函数,每次对函数的参数稍作变化。下面的程序用线段填充矩形区,通过改变直线的起终点坐标和函数中三基色的成份产生渐变效果,如图所示。
图9.9 渐变效果
程序代码如下:
Private Sub Form_Click()
Dim j As Integer , x As Single , y As Single
y = Form1.ScaleHeight
x = Form1. ScaleWidth '
设置直线X方向终点坐标
sp = 255 / y '
每次改变基色的增量
For j = 0 To y
Line (0, j)-(x, j), RGB(j * sp, j * sp, j * sp) '
9.4 图形方法
在中除了用绘图控件绘图外,还可以用绘图方法绘图。这些方法不仅能制作多种图案,通过参数的选用还可变化出不同的花样。
给用户提供了以下常用绘图方法。
9.4.1 Cls方法(清除)
方法用于清除所有图形方法和方法显示的文本或图形,并将光标移动到原点位置。其语法格式为:
例如,清除图像框中的文本或图画:
Picture1.Cls
值得注意的是,方法的使用与属性的设置有很大关系。如果调用之前,属性设置为,则不能清除在属性设置为时产生的图形和文本。如果调用之前,属性设置为,则可以清除所有运行时产生的图形和文本。
9.4.2. PSet方法(画点)
方法可以在对象的指定位置按确定的像素颜色画点,格式为:
()为必需的,可以是整数也可以包含小数。
()为可选关键字,指定相对于由和属性提供的当前图形的位置坐标。例如,在窗体的事件过程中分别输入左右两段程序代码:
PSet () PSet Step()
PSet () PSet Step()
运行结果如图所示,第一点位置都相同,因为,的起始值都为。但经过第一次方法设置后,与位置移到了,
图9.10 是否加入关键字Step的比较
画出第二个点时对左边的例子没有影响还是以原点为起点,但是由于右边加了关键字,则是以与为参考点画出的坐标这个点,此点相对于窗体原点来说坐标值为。
()用于为该点指定颜色,缺省时,使用当前的属性值。可用函数或函数指定颜色。例如,在指定位置画一个红点:
PSet (), RGB(255, 0, 0)
例如,在窗体上添加一个计时器,并设置其属性值。将的属性修改为黑色。编写计时的事件过程:
Private Sub Timer1_Timer()
DrawWidth = 5
x_pos = Int(Rnd * Form1.ScaleWidth)
y_pos = Int(Rnd * Form1.ScaleHeight)
red_c = Int(Rnd * 256)
green_c = Int(Rnd * 256)
blue_c = Int(Rnd * 256)
PSet (x_pos, y_pos), RGB(red_c, green_c, blue_c)
程序运行结果如图所示。
图9.11 满天星范例
9.4.3 Line方法(画线)
方法可以在对象上的两点之间画直线或矩形,格式为:
()为起点坐标,为终点坐标,如果省略,则起点位于由和指示的位置。带关键字表示与当前坐标的相对位置。
()为可选项。省略此项是画直线,如果选择则以为左上角坐标、为右下角坐标画出矩形。选项规定矩形以矩形边框的颜色填充。
执行方法后,和属性被设置为终点,利用此特性可用方法画连接线。例如,可以利用方法在窗体上画三个矩形方框,如图所示。
图9.12 三个矩形
程序代码如下:
Private Sub Form_Click()
Line (500, 500)-Step(500, 0)
Line -Step(0, 500)
Line -Step(-500, 0)
Line -Step(0, -500)
Line ()-Step(500, 500), , B
Line ()-(), , BF
9.4.4 Circle方法(画圆)
方法可以在对象上画圆、椭圆或圆弧,格式为:
[对象.] [](),半径[,颜色,起点,终点,纵横比]
()是圆、椭圆或圆弧的中心坐标,带关键字时表示与当前坐标的相对位置,半径是圆、椭圆或圆弧的半径。
()起点、终点指定(以弧度为单位)弧或扇形的起点以及终点位置。其范围从-到。起点的缺省值是,终点的缺省值是。正数画弧,负数画扇形。
()纵横比为垂直半径与水平半径之比,不能为负数。当纵横比大于时,椭圆沿垂直方向拉长,当纵横比小于时,椭圆沿水平方向拉长。纵横比的缺省值为,在屏幕上产生一个标准的圆。在椭圆中,半径总是对应长轴。
图9.13 用Circle方法在窗体上画图
可以省略中间的某个参数,但不能省略分隔参数的逗号。例如,通过以下代码可以在窗体上画出一个扇形、圆、椭圆,如图所示。
Private Sub Form_Click()
Const PI = 3.14159
Circle (), 1000, vbBlue, -PI, -PI / 2
Circle Step(-500, -500), 500
Circle Step(0, 0), 500, , , , 5 / 25
9.4.5 PaintPicture方法
方法用于在,或上绘制出图形文件的内容,图形文件类型包括,,,,,和等。的一般格式为:
[对象.] 图形,[,宽度[,高度,[,[,宽度[,高度[,位操作常数]]]]]]
图形:指图形文件,可以是或的属性指定的图形文件。
,:指在对象上绘制图形的坐标,由对象的属性决定度量单位。
宽度,高度:对象的宽度或高度。如果省略,则使用图形的宽度或高度。
,:指图形剪贴区的左上角坐标,默认为。
宽度,高度:指图形内剪贴区的宽度或高度,默认为整个图形的宽度或高度。如果宽度、高度比宽度、高度大或小,将适当地拉伸或压缩图形。
位操作常数:用来定义在将图形绘制到对象上时执行的位操作。位操作常数如表所示。
表9.8 位操作常数
vbDstInvert
vbMergeCopy
vbMergePaint
vbSrcInvert
VbSrcPaint
vbNotSrcCopy
vbNotSrcErase
vbPatInvert
VbPatPaint
vbSrcErase
反转源位置
合并模式和源位置
用Or运算合并反转的源位图和目标位图
用Xor运算合并目标像素与源位图
用Or运算合并目标像素与源位图
将反转的源位图复制到目标中
用Or运算合并源位图和目标位图,然后反转
将模式复制到目标位图
用Xor运算合并目标位图与模式
用Or运算合并反转的源位图与模式,然后用Or运算合并上述结果与目标位图
用And运算合并目标像素与源位图
将源位图复制到目标位图
反转目标位图并用And运算合并所得结果与源位图
例如,在窗体上添加一个图片框,设置其相应的属性后,将属性设为。然后编写如下代码:
Private Sub Form_Click()
ScaleHeight = 800
Num = Form1.ScaleWidth / Picture1.Width
For i = 1 To Num
Form1.PaintPicture Picture1.Picture,(i-1)*Picture1.Width,200, Picture1. Width,Picture1.Height
运行程序,则会在窗体中画出的多个拷贝,如图所示。
图9.14 图片拷贝
当窗体被其他窗体覆盖,或当重新移出窗体以及内容需要重新显示时,窗体和控件的重新显示由管理和控制,而窗体、图片框中的图形和用方法显示的文本的重新显示,则需要用到事件、属性、方法。通过使用事件过程,可以保证必要的图形都能得以重现。例如,窗体最小化后,恢复到正常大小时,窗体内所有图形都得重画。当属性为时,将自动重画,事件不起作用。而在事件过程中使用方法,可在每次调整窗体大小时强制对所有对象通过事件进行重画。
图片框与文本框或标签相比,一个优越之处在于它能在任何位置显示文本,并且可以选择各种字体、各种颜色及与图形混合使用,可以使用图片框的标准属性改变字体字符,并且可以使用和属性以及图片框的和方法将文本在图片框中显示出来。
9.4.6 Point方法
方法用于返回窗体或图形框上指定点的颜色,其语法格式为:
[对象.] ()
如果由()指定的点在对象外面,方法返回一个()。
例如,用方法获取一个区域的信息并使用方法进行仿真。
分析:在窗体上放置一个控件,在程序中设置窗体和控件各自的坐标系。在控件上输出字符串或图形,然后用方法扫描控件上的信息,根据返回值在窗体对应坐标位置上用方法输出信息,达到仿真的目的。
程序代码如下:
Private Sub Form_Click()
Dim i, j As Integer, mcolor As Long
Form1.Scale (0, 0) - (100, 100)
Picture1.Scale (0, 0) - (100, 100)
Picture1.Print " Point方法应用实例"
For i = 1 To 100 '
For j = 1 To 100 '
mcolor = Picture1.Point(i, j) '
返回指定点的信息
If mcolor = False Then PSet (i, j), mcolor
如果在对象区域内则进行仿真
结果分析:本例中窗体与图形框的坐标系设置值相同,但窗体的实际宽度和高度比图形框大,故仿真输出时放大了原来的字符,结合属性,可改变输出点的大小。运行结果如图所示()。如果改变目标位置坐标的算法,可旋转输出结果。
图9.15 用Point方法获取区域的信息进行仿真
9.5 综合应用
9.5.1 几何图形绘制
画金刚石图案。
本例中利用多条直线来画图案,先计算出直线端点所需坐标并存入数组之中。结果如图9.16所示。
图9.16 金刚石图案
窗体中的一个按钮为,其属性置为“”。程序代码如下:
Option Explicit
Const Pi As Double = 3.1415926
Private Sub Command1_Click()
′画金刚石图案
Me.BackColor = vbWhite
Me.ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
Dim n, x0, y0, r As Integer
n = 20 ′ n
为角点个数
x0 = Width / 2
y0 = Height / 2
r = y0 * 0.8
Dim px(), py() As Double
ReDim px(n), py(n)
Dim i, j As Integer
′计算坐标
For i = 1 To n
px(i) = x0 + r * Cos(i * 2 * Pi / n)
py(i) = y0 + r * Sin(i * 2 * Pi / n)
′画对角线
For i = 1 To n
For j = 1 To i - 1
Line (px(i), py(i))-(px(j), py(j))
Private Sub Form_Load()
本例用多个点来画多个椭圆,并构成圆环,如图9.17所示,其中有一个控件,名为p。注意其中使用了方法来自定义坐标系。
图9.17 画圆环
程序代码如下:
Private Sub Form_Paint()
p.Scale (-300, -300)-(300, 300)
p.ForeColor = QBColor(4)
pi = 3.1416
For k = -pi To pi Step 0.25
For i = 0 To 2 * pi Step 0.001
ix = 120 * Cos(i)
iy = 80 * Sin(i)
ix1 = ix * Cos(k) - iy * Sin(k)
iy1 = ix * Sin(k) + iy * Cos(k)
p.PSet (ix1, iy1)
本例用多个点来组成一条螺线,如图9.18所示。
这是一个参数方程的绘图例子。程序代码如下:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
图9.18 画圆环
Dim i As Single
Scale (-15, 15)-(15, -15)
Line (0, 14)-(0, -14)
Line (14, 0)-(-14, 0)
For i = 0 To 12 Step 0.01
X = i * Cos(i)
Y = i * Sin(i)
PSet (X, Y)
9.5.2 菜单和图形操作的综合应用
【例】利用菜单在窗体图片框中选择画出正弦曲线和余弦曲线。
首先在窗体上设计一个三角函数菜单(菜单控件数组),并添加一个图片框,如图
图9.19 坐标图
编写三角函数的子菜单的事件代码:
Private Sub mnu_San1_Click(Index As Integer)
oldx = Picture1.ScaleWidth / 2
oldy = Picture1.ScaleHeight / 2
Select Case Index
For t = -oldx To oldx Step 0.01
xt = 10 * t
yt = 10 * Sin(t)
Picture1.PSet
(xt + oldx, oldy - yt), RGB(0, 127, 127)
For t = -oldx To oldx Step 0.01
xt = 10 * t
yt = 10 * Cos(t)
Picture1.PSet
(xt + oldx, oldy - yt), RGB(0, 127, 127)
Picture1.Cls
Form_Paint
End Select
利用事件绘制坐标轴及刻度,其代码为:
Private Sub Form_Paint()
Const PI = 3.14159
With Picture1
.Width = Me.ScaleWidth
.Height = Me.ScaleHeight
.ScaleMode = 6
oldx = .ScaleWidth / 2
oldy = .ScaleHeight / 2
Picture1.Line
(oldx, 0)-(oldx, .ScaleHeight), RGB(255, 0, 0)
Picture1.Line
(0, oldy)-(.ScaleWidth, oldy), RGB(255, 0, 0)
Picture1.CurrentX = oldx - 4
Picture1.CurrentY = oldy + 0.5
Picture1.Print 0
'画x轴的刻度
For xt = -Int(oldx) To Int(oldx) Step 0.5
If xt && 0 Then
st = xt * 10 * PI
Picture1.CurrentX = oldx + st - 3
Picture1.CurrentY = oldy + 0.5
Picture1.Print xt & "π"
Picture1.Line
(oldx + st, oldy - 1)-(oldx + st, oldy), RGB(255, 0, 0)
'画y轴的刻度
For yt = -5 To 7
If yt && 0 Then
st = yt * 10
Picture1.CurrentX = oldx - 4
Picture1.CurrentY = oldy + st - 1
Picture1.Print yt
Picture1.Line
(oldx, oldy + st)-(oldx + 1, oldy + st), RGB(255, 0, 0)
Private Sub Form_Resize()
9.5.3 简单动画设计
曲柄滑块机构的演示。
利用控件来控制图形控件的转动,如图所示。
首先,在窗体上添加一个命令按钮,个形态控件大圆、滑块、圆周上的动点、圆心,若干直线半径、连杆,一个计时器。并将的属性值设为,属性值设为。
在通用模块中声明符号常数及窗体级变量:
Const PI = 3.14159
Dim X0 As Single, Y0 As Single, t As Integer
窗体的事件、命令按钮的事件、计时器的事件代码如下:
Private Sub Command1_Click()
If Command1.Caption = "暂停" Then
Command1.Caption = "继续"
Timer1.Enabled = False
Command1.Caption = "暂停"
Timer1.Enabled = True
Private Sub Form_Load()
With Shape1
.Tag = .Width / 2 '圆的半径
X0 = .Left + .Tag '圆心的X坐标
Y0 = .Top + .Tag '圆心的Y坐标
With Line2 '连杆的长
Line2.Tag = Sqr((.X1 - .X2) ^ 2 + (.Y1 - .Y2) ^ 2)
图9.20 曲柄滑块机构
图9.22 原图(处理前)
Private Sub Timer1_Timer()
Shape3.Left = X0 - Shape1.Tag * Cos(PI * t / 30) - Shape3.Width /2
Shape3.Top = Y0 + Shape1.Tag * Sin(PI * t / 30) - Shape3.Width /2
Line2.X1 = Shape3.Left + Shape3.Width /2
Line2.Y1 = Shape3.Top + Shape3.Width /2
Line2.X2 = Shape3.Left + Sqr(Line2.Tag ^ 2 - (Shape3.Top - Y0) ^ 2)
Line1.X2 = Line2.X1
Line1.Y2 = Line2.Y1
Shape2.Left = Line2.X2
一个走动的时钟。
时钟作为一种生活用品,有时针、分针和秒针,并且可以走动。本例分别以,和函数把系统时间分离成“秒”、“分”和“时”,再利用定时器控件把时间处理成图形,其中时针、分针、秒针和刻度的定位需要用三角函数来处理。
首先在窗体中添加个控件和个直线控件。把个控件的属性分别改为,和,再把他们的属性分别改为,和,属性分别改为红色、蓝色和紫色。然后把的属性改为,属性改为淡红色。然后,再在窗体上创建个个数为的直线数组,把点、点、点、点处的直线的属性改为。最后,在窗体上添加一个定时器,并把它的属性设置为,运行界面如图所示。
编写代码时,先在通用段说明几个常数:
Const DX = 2800
Const DY = 2300
图9.21 走动的时钟
Const PI = 3.
程序代码如下:
Private Sub Form_Load()
Linem.X1 = DX: Lines.X1 = DX: Lineh.X1 = DX
Linem.Y1 = DY: Lines.Y1 = DY: Lineh.Y1 = DY
Shape1.Left = DX - 2000
Shape1.Top = DY - 2000
Shape1.Width = 4000
Shape1.Height = 4000
For i = 0 To 11 '定位刻度
Line1(i).X1 = DX + 1400 * Cos((i - 12) * 2 * PI / 12 - PI / 2)
Line1(i).Y1 = DY + 1400 * Sin((i - 12) * 2 * PI / 12 - PI / 2)
If i & 10 Or i & 2 Then
Line1(i).X2 = DX + 2000 * Cos((i - 12) * 2 * PI / 12 - PI / 2)
Line1(i).Y2 = Shape1.Top + 10
ElseIf i & 5 Then
Line1(i).X2 = Shape1.Left + Shape1.Width - 10
Line1(i).Y2 = DY + 2000 * Sin((i - 12) * 2 * PI / 12 - PI / 2)
ElseIf i & 8 Then
Line1(i).X2 = DX + 2000 * Cos((i - 12) * 2 * PI / 12 - PI / 2)
Line1(i).Y2 = Shape1.Top + Shape1.Height - 10
ElseIf i & 11 Then
Line1(i).X2 = Shape1.Left + 10
Line1(i).Y2 = DY + 2000 * Sin((i - 12) * 2 * PI / 12 - PI / 2)
Private Sub Timer1_Timer(Index As Integer)
Dim h As Integer, s As Integer, mm As Integer
s = Second(Time) '秒
mm = Minute(Time) '分
h = Hour(Time) '时
If h &= 12 Then h = h - 12
Lineh.X2 = 500 * Cos((h - 12) * 2 * PI / 12 - PI / 2) + DX
Lineh.Y2 = 500 * Sin((h - 12) * 2 * PI / 12 - PI / 2) + DY
Lines.X2 = 1000 * Cos((s - 60) * 2 * PI / 60 - PI / 2) + DX
Lines.Y2 = 1000 * Sin((s - 60) * 2 * PI / 60 - PI / 2) + DY
Linem.X2 = 800 * Cos((mm - 60) * 2 * PI / 60 - PI / 2) + DX
Linem.Y2 = 800 * Sin((mm - 60) * 2 * PI / 60 - PI / 2) + DY
在上面的程序中,时钟的大小是不能调整的,通过使用与窗体宽度、高度相关变量,也可以让时钟的大小随着窗体调整而变化。
9.5.4 图像的颜色处理
图像的颜色处理
本例中,单击按钮对于一个图片(该图片置于的属性中),如图所示,进行变灰的处理,处理效果如图();单击按钮,则进行锐化处理
处理效果如图()。
进行变灰的处理的方法是,用方法得到某点的颜色值,然后利用公式:
y = 0.299 * r + 0.587 * g + 0.144 * b
得到该点的亮度值,并用(,,)作为该点的颜色,从而得到一个变灰的点;若用下式:
RGB( y * 1.4 + y * 0.9 + y * 0.7 )
则会得到一幅有淡红色的图。
图9.23 图像颜色处理后的效果
进行锐化处理的原理是,对于图像中的任一点,将该点的颜色加上一个分量,这个分量是附近几个点的颜色的差值(再乘以一个比例系数)。由于这个差值分量的加入,使原图的相邻部分的差别更加明显,从而对原图起到了一个锐化的作用。在程序中使用语句:
ScaleMode = vbPixels
将窗体的坐标单位设置为像素点,这样可方便函数中坐标值的使用。
程序代码如下:
Option Explicit
Dim PColor() As Long
Private Sub Command1_Click()
Dim i, j As Integer
Dim r, g, b, y As Long
Dim m As Long
For i = 0 To ScaleWidth
For j = 0 To ScaleHeight
PColor(i, j) = Point(i, j)
r = GetRValue(PColor(i, j))
g = GetGValue(PColor(i, j))
b = GetBValue(PColor(i, j))
y = 0.299 * r + 0.587 * g + 0.144 * b
PSet (i, j), RGB(y, y, y)
′PSet (i, j), RGB(y * 1.4, y * 0.9, y * 0.7)
′若用该语句,则变成淡淡的红色
Private Sub Command2_Click()
Dim i, j As Integer
Dim r, g, b, y As Long
Dim m As Long
For i = 0 To ScaleWidth
For j = 0 To ScaleHeight
PColor(i, j) = Point(i, j)
Dim ratio As Long
ratio = 3′锐化的程度
For i = 1 To ScaleWidth - 1
For j = 1 To ScaleHeight - 1
r = GetRValue(PColor(i, j)) + ratio * (GetRValue(PColor(i, j)) - GetRValue(PColor(i + 1, j + 1)))
g = GetGValue(PColor(i, j)) + ratio * (GetGValue(PColor(i, j)) - GetGValue(PColor(i + 1, j + 1)))
b = GetBValue(PColor(i, j)) + ratio * (GetBValue(PColor(i, j)) - GetBValue(PColor(i + 1, j + 1)))
If r & 0 Then r = 0
If g & 0 Then g = 0
If b & 0 Then b = 0
If r & 255 Then r = 255
If g & 255 Then g = 255
If b & 255 Then b = 255
PSet (i, j), RGB(r, g, b)
Private Sub Form_Load()
Picture = LoadPicture(App.Path & "D:\Zhumlm.jpg")
Me.ScaleMode = vbPixels
ReDim PColor(ScaleWidth, ScaleHeight)
Function GetRValue(PntColor As Long) As Long
′颜色在内存中的表示是&H00bbggrr
GetRValue = PntColor And &HFF
End Function
Function GetGValue(PntColor As Long) As Long
GetGValue = (PntColor / &H100) And &HFF
End Function
Function GetBValue(PntColor As Long) As Long
GetBValue = (PntColor And &HFF0000) / &H10000
End Function
TA的最新馆藏[转]&[转]&

我要回帖

更多关于 苹果6spuls 的文章

 

随机推荐