第10章 处理图形 Visual Basic 程序设计教程.

Slides:



Advertisements
Similar presentations
编程加工 信息的. 趣味导入拓展提升大显身手总结反思学以致用 传说古代印度有个国王叫舍罕,他很迷恋棋类,而 宰相达依尔是个聪明的大臣,发明了国际象棋。国王玩 得爱不释手,决定奖赏宰相。达依尔说:陛下,我别无 他求,请你在这张棋盘的第一个格子里赏我 1 粒麦子; 在第二个格子里赏我 2 粒麦子;在第三个格子里赏我.
Advertisements

題目:徽章之記憶 南台科技大學 機械系 車輛一乙 學號:4A 姓名:黃冠嘉 教師:謝慶存
計算機程式及實習 期末報告 題目:超級猜一猜
第二章 VB的编程机制 【授课时间】第3周,第2次课 【授课题目】 2.1 面向对象程序设计概述 2.2 VB中的对象
計算機概論 第4章 基本視窗程式應用 4-1 程式語言簡介 4-2 演算法與流程圖 4-3 視窗程式語言設計 4-4 資料結構.
第四章 控制结构.
程式語言(I)- Visual Basic 6.0 第 9 章 結構化程式設計
南台科技大學 機械工程系 車輛一甲 學號:4A 學生:黃信成 老師:謝慶存
1.了解VB6.0的功能特点 、集成环境。 2.理解面向对象程序设计的几个概念。 3.掌握VB应用程序设计的步骤。
客户端用Net-Library和SQL SERVER连接
14 繪圖與動畫 [我的小畫家][打磚塊遊戲] 14-1 繪圖的基礎 14-2 滑鼠事件與基本繪圖 14-3 在Bitmap物件繪圖
VB教学中游戏化教学案例设计.
网 络 课 程 马 鞍 学 网 络 山 课 程 大 络 网 Visual Basic程序设计 第 一 讲 最容易接受的编程语言
Visual Basic 6.0之事件 事件(Event)?
第五章 数组.
Visual Basic程序设计.
程式語言Visual Basic 變數的可視範圍
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
第6章 数 组 6.1 一维数组 6.2 控件数组 6.3 二维数组.
第10章 图 形 基 础 10.1 坐标系 10.2 绘图属性 10.3 图形控件 10.4 图形方法 习题十.
第二章 Visual Basic语言基础.
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
数组 第 6 章.
第5章 数组 Visual Basic程序设计.
Visual Basic程序设计 第七章 数组
程式語言 -Visual Basic 變數、常數與資料型態.
新觀念的 VB6 教本 第13章 表單的圖形輸出系統.
Visual Basic程序设计 第八章 过程 -子程序和函数
Visual Basic 程序设计教程 机械工业出版社同名教材 配套电子教案 2003 年 6月.
过程 第 7 章.
第十一讲 VB常用标准控件(2).
初识Visual Basic.
Visual Basic程序设计基础 计算机科学学院.
第4章 程序控制结构与算法基础.
計算機程式 廖文淵 Department of Computer Science and Engineering
新觀念的 VB6 教本 第七章 讓程式轉彎的控制敘述.
Visual Basic 程序设计教程 机械工业出版社同名教材 配套电子教案 2003 年 6月.
第4章 基本的控制结构 4.1 顺序结构 4.2 选择结构程序设计 4.3 循环结构 4.4 综合实例 退出.
用计算机模拟闪电形成的尝试 By 金秀儒 物理三班 PB
Visual Basic 程序设计 教师:王 杨 电话:
第8章 键盘、鼠标事件和图形 Visual Basic为用户提供了键盘、鼠标事件用于响 应键盘操作和鼠标操作。在Visual Basic中,大多 数控件都有键盘事件和鼠标事件。这一章将讲述 与键盘和鼠标相关的内容,除此之外,还有通常 在鼠标事件中出现的关于绘制图形方面的内容。
程式設計 Visual Basic簡介 週次:1 建國技術學院 資管系 饒瑞佶 2003年9月17日.
RWM600 (13.56MHz) Reader Antenna.
新觀念的 VB6 教本 第 6 章 資料型別.
广州市教育局教学研究室编写的 初中《信息技术》第二册第二章 《程序设计初步》
Visual Basic程序设计.
第二章 创建用户界面 本章重点和难点 2.1 基本属性 2.2 创建窗体 2.3 Visual Basic的常用控件 2.4 制作菜单.
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
算法与程序设计 周少品.
VB程序设计语言 主讲教师:王 杨.
VB程序设计语言 主讲教师:王 杨.
程式設計 Visual Basic簡介 週次:2 建國技術學院 資管系 饒瑞佶 2003年9月17日.
程序设计基础 第 2 章 学习程序设计的基本方法: 多练 模仿.
VB程序设计语言 主讲教师:王 杨.
VB语言程序设计教程.
小结 郭清溥.
现代信息技术 微电子技术 计算机技术 传感技术 通信技术 处理、存储信息的技术 传感、采集技术 传递信息的技术
程序基础 2019/4/25.
第二章、第三章错题分析.
程式語言Visual Basic 繪圖方法與顏色控制
Visual Basic 程序设计及应用教程 (6.0版)
选择结构设计 第 4 章 程序流程有三种最基本的控制结构,即顺序结构、选择结构和循环结构。
计算机应用基础 潍坊学院 计算机工程学院 主讲人:丁素英.
程式設計 Visual Basic簡介 週次:4 建國技術學院 資管系 饒瑞佶 2003年10月18日.
1位选手参加了歌唱比赛,评委们的评分如下:
Print方法和函数 2019/5/19.
第5章 数组 5.1 数组概述 5.2 静态数组和动态数组 5.3 数组的基本操作 5.4 控件数组 5.5 数组在自定义数据类型中的应用.
第八章: 輸入裝置-鍵盤與滑鼠.
程式設計 Visual Basic簡介 週次:4 建國技術學院 資管系 饒瑞佶 2003年11月1日.
程序调试与错误处理.
Presentation transcript:

第10章 处理图形 Visual Basic 程序设计教程

本章主要介绍 绘图属性 绘图方法 图片框 影像框 Visual Basic程序设计教程

10.1 概述 图形一般指图绘形象,描画出物体的轮廓、形状等。 容器是绘制图形或控件的场所 Visual Basic程序设计教程 由图元组成,图元可以是点、线、圆、字符、填充区等。 每个图元有它的数据定义和外貌特征。如线段端点、粗细等。 VB提供了一些控件和方法,绘制图元,最终构成图形 容器是绘制图形或控件的场所 容器中的对象只能在容器内变动。 窗体、框架、图片框是容器 移动容器时,内部对象与容器的相对位置保持不变。 Visual Basic程序设计教程

VB容器的图层从前到后为: 图像一般是指绘制、摄制或印制的形象。 Visual Basic程序设计教程 前层——非绘图控件所在层,如命令按钮、复选框等; 中间层——绘图控件和标签所在层; 底层——绘图方法显示结果的地方。 图层显示特性依靠:AutoRedraw和ClipControls属性的设置及绘图方法是否在Paint事件过程内。 图像一般是指绘制、摄制或印制的形象。 可将它们装载到图片框、影像框可窗体上 Visual Basic程序设计教程

10.2 模拟单摆 【例10-1】设计一个模拟单摆 ·控件: 图片框控件Picture1:作单摆容器 直线控件Line1:作绳索 10.2 模拟单摆 【例10-1】设计一个模拟单摆 ·控件: 图片框控件Picture1:作单摆容器 直线控件Line1:作绳索 形状控件Shape1:作球(设计界面中为矩形) 定时器控件Timer1:控制摆动。 Visual Basic程序设计教程

·2个模块级变量A和D,表示摆动角度和方向。 ·2个事件过程: Form_Load,初始化界面和控件属性 Timer1_Timer,控制单摆的运动。 Visual Basic程序设计教程

Option Explicit Dim A As Integer, D As Integer '模块级变量,A表示角度,D表示方向 Const PI = 3.1415926 Private Sub Form_Load() Form1.Width = 1.3 * Form1.Height '设置窗体的宽度和高度比例 Picture1.Width = 1.5 * Picture1.Height '设置图片框的宽度和高度比例 Picture1.Scale (-150, -5)-(150, 195) '更改坐标系统 Shape1.FillStyle = 0 '使形状控件的填充模式为"实心" Shape1.FillColor = vbRed '使形状控件填充红色 Shape1.BorderColor = vbRed '使形状控件的边界颜色为红色 Shape1.Width = 15 '按坐标系,更改形状控件大小 Shape1.Shape = 3 '使形状控件的形状为圆形 Line1.BorderColor = vbRed '使绳索颜色为红色 Line1.X1 = 0: Line1.Y1 = 0 '使绳索上端在原点(0,0)上 Picture1.AutoRedraw = True '使图片框的重绘属性为True Picture1.Line (-10, 0)-(10, 0) '顶端画一条固定绳索的横线 Timer1.Interval = 100 A = -20: D = -1 '设置初始角度和方向 End Sub Visual Basic程序设计教程

Private Sub Timer1_Timer() Dim X As Single, Y As Single If D = -1 Then A = A + 2 Else A = A - 2 X = 170 * Sin(A * PI / 180) '确定圆心和直线下端的位置 Y = 170 * Cos(A * PI / 180) Line1.X2 = X: Line1.Y2 = Y '更改直线下端位置 Shape1.Left = X - Shape1.Width / 2 '使圆心位置在直线的下端 Shape1.Top = Y - Shape1.Height / 2 If D = -1 And A = 20 Or D = 1 And A = -20 Then D = -D '±20°改方向 End Sub ·Scale方法使图片框左上角和右下角坐标分别为(-150,-5)和(150,195)。 ·而170表示着绳索的长度,可以取其它值,但应使整个单摆可见。 Visual Basic程序设计教程

10.3 什么是VB坐标系 ·坐标系是用于确定数与基本几何对象之间对应关系的参考系,是形和数结合的基础。 ·VB中每一个容器采用(x,y)的二维坐标系统 ·每个对象、图形操作,都要使用坐标系。 ·VB坐标系统使用有以下规则: 移动或调整控件大小时,使用容器的坐标系统。 绘图方法和Print方法,使用容器的坐标系统。 10.3 什么是VB坐标系 Visual Basic程序设计教程

10.3.1 VB默认坐标系 x是水平方向沿x轴的位置,默认最左端是0 y是垂直方向沿y轴的位置,默认最上端是0 ·VB坐标系每个点用(x,y)表示 x是水平方向沿x轴的位置,默认最左端是0 y是垂直方向沿y轴的位置,默认最上端是0 ·坐标单位又称为坐标刻度,默认缇(twips)。 还可以使用磅、像素和毫米等。 ·屏幕的左上角的坐标总是(0,0) Visual Basic程序设计教程

·使用对象的刻度属性和Scale方法,可重新设置容器的坐标系统。 ·其它容器在缺省状态下,左上角是(0,0)。 窗体(0,0)点指窗体标题栏下边沿的左上角。 ·使用对象的刻度属性和Scale方法,可重新设置容器的坐标系统。 Visual Basic程序设计教程

10.3.2 Scale方法 Visual Basic程序设计教程 1.容器名指窗体名或图片框控件名。 缺省指当前窗体 ·Scale方法的使用格式为: [容器名.]Scale [(x1,y1)-(x2,y2)] 1.容器名指窗体名或图片框控件名。 缺省指当前窗体 2.(x1, y1)和(x2, y2) 为新坐标系统左上角和右下角坐标 3.省略(x1,y1)-(x2,y2),恢复缺省刻度。 Visual Basic程序设计教程

· 例10-1中Picture1.Scale (-150, -5)-(150, 195)更改图片框坐标系如上图。 这样求运动点(x,y)的位置比较方便 设绳索长为170,则当绳索与y轴的夹角为a时,则x=170sina,y=170cosa。 Visual Basic程序设计教程

·使用坐标属性可以更改容器的坐标刻度,也可以自定义坐标系。 10.3.3 坐标属性 ·使用坐标属性可以更改容器的坐标刻度,也可以自定义坐标系。 ScaleMode:设置坐标刻度,缺省值为1(缇) ScaleLeft:表示或设置对象左边界水平坐标 ScaleTop:表示或设置对象上边界垂直坐标 ScaleWidth:表示或设置对象内水平度量单位数 ScaleHeight:表示或设置对象内垂直度量单位数 CurrentX:当前输出的水平坐标。程序中使用。 CurrentY:当前输出的垂直坐标。程序中使用。 Visual Basic程序设计教程

ScaleWidth、ScaleHeight不同于Width、Height ·属性说明: ScaleWidth、ScaleHeight不同于Width、Height ScaleMode属性可以取值0~7,表示刻度分别为自定义、缇、磅、像素、字符、英寸、毫米和厘米。 更改ScaleWidth、ScaleHeight、ScaleLeft、ScaleTop之 一时,VB自动将ScaleMode的值设为0。 如Scale (-150, -5)-(150, 195),也可以表示成: ScaleWidth=300:ScalHeight=200: ScaleLeft=-150:ScaleTop=-5 若要改坐标轴方向,可将ScaleWidth或ScaleHeight设置成负值 Visual Basic程序设计教程

ScaleMode属性取值为1~7时的刻度,称为标准刻度 在设置了ScaleMode属性的值后,VB会重定义ScaleWidth和ScaleHeight,使它们与新刻度保持一致。 左上角坐标总是:(ScaleLeft,ScaleTop) 右下角坐标总是: (ScaleLeft+ScaleWidth,ScaleTop +ScaleHeight)。 Visual Basic程序设计教程

10.4 使用绘图方法 10.4.1 画点—PSet方法 ·绘图方法可画点、画线、画矩形、画椭圆等。 10.4 使用绘图方法 10.4.1 画点—PSet方法 ·绘图方法可画点、画线、画矩形、画椭圆等。 ·格式:[对象名.]PSet (x,y) [,颜色] 1.(x,y)为所画点的坐标位置 2.颜色指点的颜色。缺省时由容器的ForeColor属性决定。 例如:PSet (1000, 1000), RGB(255, 0, 0) 在(1000,1000)处画红点,大小由容器的DrawWidth属性决定。 3.擦除一个点,可采用以背景色重画点。 4. Cls方法可擦除绘图方法及Print方法的输出内容。 Visual Basic程序设计教程

【例10-2】绘制一条y=x2的抛物线。 Private Sub Form_Click() Dim x As Single Scale (-10, 105)-(10, -2) For x = -9 To 9 Step 0.01 PSet (x, x * x) Next x End Sub Visual Basic程序设计教程

1.画线格式:[对象名.]Line [(x1,y1)]-(x2,y2) [,颜色] 如:Line (100, 150)-(1400, 1300), vbRed ·缺省起点 (x1,y1),表示将当前输出位置作为 起点。 Visual Basic程序设计教程

坐标点的另一种表示形式为:Step(x,y) 对象的当前位置由CurrentX和CurrentY决定 Line (100, 200)-(150, 250)等价:Line (100, 200)-Step(50, 50) VB画直线时,包括了起点,未包括终点。画终点可用: PSet Step(0, 0)[, color] 连续使用缺省起点的Line方法,可以绘制多点折线。 Visual Basic程序设计教程

【例10-3】在窗体上中间画出一个等腰三角形。 可根据窗体ScaleWidth和ScaleHeight属性确定三点位置 由于一条线的终点等价于另一条线的起点,因此除了第一条线以外,其它两条线均可用缺省起点的Line方法。 Visual Basic程序设计教程

Private Sub Command1_Click() Dim x1 As Integer, x2 As Integer, x3 As Integer Dim y1 As Integer, y2 As Integer, y3 As Integer x1 = ScaleWidth / 2: y1 = ScaleHeight / 5 x2 = ScaleWidth / 5: y2 = ScaleHeight / 5 * 4 x3 = ScaleWidth / 5 * 4: y3 = ScaleHeight / 5 * 4 Line (x1, y1)-(x2, y2) Line -(x3, y3) Line -(x1, y1) End Sub Visual Basic程序设计教程

2.画矩形采用格式: [对象名.]Line [(x1,y1)]-(x2,y2) ,[颜色],B[F] 如:Line (500, 200)-Step(200, 200), vbRed, B 如: Line (500, 200)-Step(200, 200), vbRed, BF 若颜色缺省,逗号也不能省 Visual Basic程序设计教程

【例10-4】编制简易黑板。功能是:用鼠标左键在窗体上拖动时,画出线条;用鼠标右键在窗体上拖动时,擦去线条。击“清除” 擦去所有痕迹。 ·事件: 窗体MouseDown:画出按下鼠标的第一点 窗体MouseMove:画出线条或删除线条 用背景色,画小矩形擦 “清除”的Click:擦去所有痕迹 Visual Basic程序设计教程

Visual Basic程序设计教程 Private Sub Command1_Click() '擦“黑板”Cls End Sub Private Sub Form_Load() '初始化 Form1.Caption = "简易黑板" Form1.BackColor = RGB(0, 0, 0) Form1.ForeColor = RGB(255, 255, 255) Command1.Caption = "擦除" Visual Basic程序设计教程

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then ' Button = 1表示按下左键, 画第一点 Form1.PSet (X, Y) End If End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then '左键拖动画线 Form1.Line -(X, Y) ElseIf Button = 2 Then '右键拖动以黑色画实心方块,起擦除作用 Form1.Line (X - 200, Y - 200)-(X + 200, Y + 200), RGB(0, 0, 0), BF Visual Basic程序设计教程

· Circle方法可画出圆、圆弧、扇形或椭圆。 1.画圆格式: [对象名.]Circle [Step](x,y), 半径 [,颜色] 半径的度量单位与容器坐标系的单位相同,不能为负。 画圆时,半径通常由水平单位指定。 Visual Basic程序设计教程

又如以窗体中心为圆心,以窗体ScaleWidth的1/4为半径画圆: 如下列代码绘制如图。 Scale (-50, 20)-(50, -20) Line (-15, 15)-(15, -15), , B Circle (0, 0), 15 又如以窗体中心为圆心,以窗体ScaleWidth的1/4为半径画圆: Circle (ScaleWidth / 2 + ScaleLeft, ScaleHeight / 2 + ScaleTop), _ ScaleWidth / 4 Visual Basic程序设计教程

【例10-5】编程,在窗体中间画1000个同心多彩圆。 ·编写通用过程PaintCircle:绘制彩色圆 Sub PaintCircle() Dim R As Integer, X As Integer, Y As Integer X = ScaleWidth / 2 '将x坐标设置在窗体内横向中间 Y = ScaleHeight / 2 '将y坐标设置在窗体内纵向中间 If X < Y Then R = X * 0.9 Else R = Y * 0.9 Circle (X, Y), R * Rnd, RGB(Rnd * 255, Rnd * 255, Rnd * 255) '画圆 End Sub Visual Basic程序设计教程

Private Sub Command1_Click() Dim i As Integer For i = 1 To 1000 PaintCircle Next End Sub 其中乘0.9是为了最大圆不会紧贴窗体边缘。 Visual Basic程序设计教程

2.画弧格式为: [对象名.]Circle [Step](x,y),半径,[颜色], Start, End[, Aspect] 圆弧以弧度为单位,按逆时针方向画弧。 Start和End表示弧线起始角和终止角的弧度数据 平行于X轴的正向为0弧度 如果Start参数或End参数是负数,则VB将画一条连接圆心到负端点的直线。 使用不为1的 Aspect参数,表示为椭圆弧线的一段。 如: Circle (800, 800), 500, , -3.14 / 2, -3.14 / 3 Circle (1800, 800), 500, , 0, 3 * 3.14 / 4 Visual Basic程序设计教程

3.画椭圆格式: [对象名.]Circle [Step](x,y),半径[,颜色, Start, End, Aspect] VB在Circle方法中的半径参数对应椭圆的长轴。 [,颜色, Start, End, Aspect]四项中任一项都是可选的,当前面的项缺省时,逗号仍不能省去。 省略Start, End中的任一项,表示该项为0,画弧。两项都省去,表示画圆或椭圆。 如以下代码,使用半径均为500,但使用不同的方位比,其效果如图。 Circle (800, 800), 500, , , , 3 Circle (800, 800), 500 Circle (2000, 800), 500, , , , 1 / 3 Visual Basic程序设计教程

10.5 使用绘图属性 10.5.1 更改线条形式 1.DrawWidth属性 DrawWidth属性可以设置线条的粗细、点的大小 10.5 使用绘图属性 10.5.1 更改线条形式 1.DrawWidth属性 DrawWidth属性可以设置线条的粗细、点的大小 DrawWidth属性值以像素为单位,取值范围为1~32767 当数据取得很大时,可能一个点就能占满整个容器。 Visual Basic程序设计教程

下面代码根据DrawWidth取值,效果如图。 Private Sub Form_Click() Dim i As Integer, t As Integer t = ScaleWidth / 20 For i = 1 To 20 Step 2 Form1.DrawWidth = i PSet (t * i, ScaleHeight / 4) Line (t * i, ScaleHeight / 2)-(t * i, ScaleHeight) Next i End Sub Visual Basic程序设计教程

2.DrawStyle属性 DrawStyle属性用于指定绘制的图形线条形式。 DrawStyle属性取值为0~6,形式如表。 6:内收实线,框线较粗时, 才可见效果,如图 Visual Basic程序设计教程

10.5.2 填充图案 1.FillStyle属性 Visual Basic程序设计教程 设置封闭图形的填充图案样式,取值0至7 10.5.2 填充图案 1.FillStyle属性 设置封闭图形的填充图案样式,取值0至7 缺省值为1 ,无论何种色彩,均表现为空心。 如希望窗体上显示各填充效果,可用代码: t = ScaleWidth / 9 For I = 0 To 7 FillStyle = I Line (I * t + 100, 500)-((I + 0.8) * t + 100, 500 + 1000), , B Next I Visual Basic程序设计教程

只要FillStyle属性不为1,就可FillColor填色 VB填充矩形、圆、扇形等封闭图形 FillColor属性的设置方式和ForeColor相同 Visual Basic程序设计教程

注意FillColor和ForeColor的差别: 前者用于填充颜色 后者为默认的边线颜色,或输出文字颜色。 若Line语句中使用了参数F,则所有的填充形式和填充颜色都无效。 Visual Basic程序设计教程

【例10-6】根据绘图属性,画扇形、画椭圆、画环。 ·对于圆环,没有单独语句,可用图形组合。 Private Sub Command1_Click() '画扇形。 FillStyle = 7 FillColor = RGB(255, 0, 0) Circle (800, 1000), 800, , -0.0001, -3.14 * 2 / 3 End Sub Visual Basic程序设计教程

Private Sub Command2_Click() ‘画两个椭圆 FillStyle = 1 ’画一个红色点线的空心椭圆 DrawStyle = 2 : Circle (2300, 500), 400, vbRed, , , 2 DrawStyle = 0 ‘恢复默认的线条样式 FillStyle = 0 ’画线宽3个像素,线条红色的 一个实心黄椭圆 DrawWidth = 3 : FillColor = vbYellow Circle (2300, 1200), 400, vbRed, , , 0.5 DrawWidth = 1 '恢复默认线宽 End Sub Private Sub Command3_Click() '绘制圆环 FillStyle = 4 '画一个有填充的大圆 FillColor = vbBlue : Circle (3500, 1000), 600, vbRed FillStyle = 0 '画一个实心的以背景色填充的同心小圆 FillColor = BackColor : Circle (3500, 1000), 300, vbRed End Sub 为了在0弧度上能画上横线,使用了-0.0001 Visual Basic程序设计教程

10.6 使用绘图控件 10.6.1 直线控件(Line) ·直线控件可以在容器对象中绘制直线 ·该直线不能被Cls方法清除, ·程序中修改端点可以移动直线。 1.创建直线控件:工具箱内选取直线工具 10.6 使用绘图控件 Visual Basic程序设计教程

2.直线控件的主要属性 ·直线控件没有事件 (名称)Name。直线控件名称。缺省值为Line1 BorderColor:设置线条颜色 BorderStyle:线条样式,取值为0~6,分别表示透明、实线、破折线、点线、点划线、双点划线和内收实线。 BorderWidth:设置线条粗细 X1和Y1:分别为起点的x坐标和y坐标 X2和Y2:分别为终点的x坐标和y坐标 ·直线控件没有事件 Visual Basic程序设计教程

10.6.2 形状控件(Shape) ·形状控件可以直接在容器对象中绘制图形 ·这些图形可是圆、椭圆、也可以是矩形等 1.创建形状控件:在工具箱内选取工具 2.形状控件的属性 同直线控件的BorderColor、BorderStyle、BorderWidth 常规属性Height、Width、Left、Top、Visible等 Name(名称),形状控件名称。缺省值为Shape1 Visual Basic程序设计教程

·控件为圆时,半径为Height/2和Width/2的最小值; ·控件为正方形时,边长为Height和Width的最小值。 FillColor:设置填充颜色 FillStyle:填充样式,取值0~7,默认为1,即透明。 Shape:设置图形的形状,取值0~5,分别表示矩形、正方形、椭圆、圆、圆角矩形、圆角正方形。默认为0。 ·控件为圆时,半径为Height/2和Width/2的最小值; ·控件为正方形时,边长为Height和Width的最小值。 ·Shape控件没有事件。 Visual Basic程序设计教程

·用Time、Hour、Minute、Second函数获得时、分、秒 【例10-7】用直线控件和形状控件制作钟。 ·控件: 7条直线控件 Line1~Line4作为3、6、9、12点的位置 Line5~Line7分别作为时、分、秒的指针。 1个形状控件:作为钟的圆盘 ·用Time、Hour、Minute、Second函数获得时、分、秒 ·为了计算方便,原点(0,0)改在窗体中心,并且轴方向与数学上的一致,但没有更改刻度。 ·时和分采用实数型 ·本题所有的属性设置在Form_Load中完成。 Visual Basic程序设计教程

Dim H1 As Integer, M1 As Integer, S1 As Integer '指针长度 Const PI = 3 Dim H1 As Integer, M1 As Integer, S1 As Integer '指针长度 Const PI = 3.1415926 Private Sub Form_Load() '初始化 Dim R As Integer '钟的半径 Scale (-ScaleWidth / 2, ScaleHeight / 2)-(ScaleWidth / 2, -ScaleHeight / 2) Shape1.FillStyle = 0: Shape1.Shape = 3: Shape1.FillColor = vbYellow Shape1.Left = -Shape1.Width / 2: Shape1.Top = Shape1.Height / 2 If Shape1.Width<Shape1.Height Then R=Shape1.Width/2 Else R=Shape1.Height/2 '确定半径 Line5.X1 = 0: Line6.X1 = 0: Line7.X1 = 0 '时分秒针一端置于原点 Line5.Y1 = 0: Line6.Y1 = 0: Line7.Y1 = 0 H1 = R * 0.6: M1 = R * 0.7: S1 = R * 0.8 确定时分秒指针长度 Line1.X1=0: Line1.X2=0: Line1.Y1 = R * 0.85: Line1.Y2 = R * 0.9 '4点位置 Line2.X1 = R * 0.85: Line2.X2 = R * 0.9: Line2.Y1 = 0: Line2.Y2 = 0 Line3.X1 = 0: Line3.X2 = 0: Line3.Y1 = -R * 0.85: Line3.Y2 = -R * 0.9 Line4.X1 = -R * 0.85: Line4.X2 = -R * 0.9: Line4.Y1 = 0: Line4.Y2 = 0 Line7.BorderColor = vbRed '将秒指针设为红色 Timer1.Interval = 1000 Timer1_Timer '调用Timer1_Timer事件过程 End Sub Visual Basic程序设计教程

Private Sub Timer1_Timer() Dim H As Single, M As Single, S As Single '计算出时分秒 S =Second(Time): M=Minute(Time)+S/60: H= Hour(Time) Mod 12 +M/60 '确定时分秒指针的另一端 Line5.X2 = H1*Cos(PI/2-H*2*PI/12): Line5.Y2 = H1*Sin(PI/2-H*2*PI/12) Line6.X2 = M1*Cos(PI/2-M*2*PI/60): Line6.Y2=M1*Sin(PI/2-M*2*PI/60) Line7.X2 = S1*Cos(PI/2-S*2*PI/60): Line7.Y2 = S1*Sin(PI/2-S*2*PI/60) End Sub ·通过S * 2 * PI / 60等计算出指针与x轴的夹角弧度 ·指针是在90度开始逆向运动,所以用:PI / 2 - S * 2 * PI / 60。 ·对于时针,转一圈为12小时,故除以12。 Visual Basic程序设计教程

10.7 VB图像和色彩 10.7.1 图片框(PictureBox) ·图片框控件属于容器控件 1.创建图片框 可以放置其它控件 可以显示图形、显示Print方法输出的文本 可以载入图片或图像。 1.创建图片框 在工具箱内选取图片框工具 Visual Basic程序设计教程

2.图片框的主要属性 坐标系:ScaleHeight、ScaleLeft、ScaleMode、ScaleWidth、ScaleTop 绘图:AutoRedraw、DrawStyle、DrawWidth、FillColor、FillStyle (名称)Name。图片框控件名称。缺省Picture1 AutoSize:控件是否会自动改变大小适合加载的图片。值为True时,自动调整大小与显示的图片相匹配。 Picture:设置控件内显示的图片文件 Visual Basic程序设计教程

3.图片框的事件 Click、DblClick、MouseDown、MouseMove、MouseUp、Paint、Resize等 4.图片框的方法 Move方法:移动或调整图片框大小 Circle、Line和Pset方法:画图 Print方法:输出文本或数据 Cls方法:清除输出的内容,但不能清除控件及图片。 还有PaintPicture和Point等方法(后面介绍) Visual Basic程序设计教程

5.加载图片 · 属性窗口中设置Picture属性 VB支持 .bmp、.ico、.wmf、.jpg和.gif等文件。加载方法: · 程序中利用函数LoadPicture设置Picture属性,格式为: 对象名.Picture = LoadPicture("文件说明") 清除图片,格式为:对象名.Picture = LoadPicture("") Visual Basic程序设计教程

【例10-8】编程:模拟显示某系统正在读取数据。 ·控件: 图片框:内部显示一系列矩形 标签:提示“系统正在读取数 据,请稍等…” 命令按钮:使定时器工作 定时器控件:在图片框内定时 画矩形。 Visual Basic程序设计教程

Private Sub Command1_Click() '“开始”按钮 Timer1. Enabled = True : Command1 Private Sub Command1_Click() '“开始”按钮 Timer1.Enabled = True : Command1.Enabled = False : Picture1.Cls Label1.Caption = "系统正在读取数据,请稍等..." End Sub Private Sub Form_Load() Form1.Caption = "图片框示例": Picture1.AutoRedraw = True Label1.Caption = "": Label1.AutoSize = True Timer1.Enabled = False: Timer1.Interval = 1000 End Sub Visual Basic程序设计教程

Private Sub Timer1_Timer() Static n As Integer Picture1. Line (160 Private Sub Timer1_Timer() Static n As Integer Picture1.Line (160 * n, 0)-(160 * n + 100, Picture1.ScaleHeight), , BF If 160 * n + 100 >= Picture1.ScaleWidth Then Label1.Caption = "数据读取完成!共用了" & (n + 1) & " 秒" MsgBox "数据读取完成!", , "消息" Command1.Enabled = True : Command1.SetFocus n = 0 : Timer1.Enabled = False Else n = n + 1 End If End Sub Visual Basic程序设计教程

·影像框控件只用于显示图片,不能作为容器。 1.创建影像框:在工具箱内选取影像框工具 2.影像框的属性 10.7.2 影像框(Image) ·影像框控件与图片框控件相似 ·影像框控件只用于显示图片,不能作为容器。 1.创建影像框:在工具箱内选取影像框工具 2.影像框的属性 影像框控件使用布局属性和可见、可用属性。 没有字体属性、颜色属性、坐标属性和绘图属性。 Visual Basic程序设计教程

其它主要属性: Visual Basic程序设计教程 (名称)Name。影像框控件名称,缺省值为Image1。 Stretch:设置加载的图片是否能自动扩展或缩小以适应控件的尺寸,还是影像框去适合图片的大小。缺省值为False。 Stretch为True时,影像框大小不会自动改变,可由影像框的大小来调整图片的大小 Stretch为为False 时,影像框的大小根据图片大小来自动调整。 Picture:设置控件内显示的图片文件。 Visual Basic程序设计教程

3.影像框的事件 4.影像框的方法 Click、DblClick、MouseDown、MouseMove、MouseUp 但没有Paint和Resize事件。 可用Image控件创建按钮(因识别Click)。 4.影像框的方法 可用Move方法移动或调整它的大小 没有绘图方法。 Visual Basic程序设计教程

·Image使用较少系统资源,且加载比PictureBox快。 ·当只要求显示图片时,可以选用Image控件。 5.加载图片 使用Picture属性 可以在属性窗口中设置 可以利用函数LoadPicture来设置Picture属性。 ·Image使用较少系统资源,且加载比PictureBox快。 ·当只要求显示图片时,可以选用Image控件。 Visual Basic程序设计教程

【例10-9】利用定时器控件编程,使得4幅图片在影像框Image1中轮流显示,当单击Image1时,将放大的图片显示在Image2中。 ·控件: 2个影像框控件: Stretch属性设置为True 1个定时器控件 ·使用静态变量控制图片显示。 Visual Basic程序设计教程

10.7.2影像框--图片轮流显示 Visual Basic程序设计教程 Private Sub Form_Load() '初始化属性 Timer1.Interval = 1000 Image1.Stretch = True: Image2.Stretch = True Image1.ToolTipText = "请单击" '当鼠标移动到Image1上,显示文字 End Sub Private Sub Image1_Click() '复制 Image2.Picture = Image1.Picture End Sub Private Sub Timer1_Timer() Static N As Integer Image1.Picture = LoadPicture("D:\Wen\" & N & ".jpg") N = (N + 1) Mod 4 End Sub 文件名使用了0.jpg~3.jpg,故可使用字符串表达式: "D:\Wen\" & N & ".jpg" Visual Basic程序设计教程

10.7.3 图形复制 PaintPicture方法,可以实现移动图片、复制图片。 10.7.3 图形复制 PaintPicture方法,可以实现移动图片、复制图片。 格式:Object.PaintPicture picture,x1,y1,width1,height1[,x2, y2, width2,height2] 对picture图片中以(x2,y2)为左上角,width2, height2为宽度和高度的图形区域,复制到Object 以(x1,y1)为左上角,宽度和高度为width1,heigh t1的区域中 picture为必需项,表示图形对象源 由Form或PictureBox的Picture属性所决定。 Visual Basic程序设计教程

·缺省x2,y2, width2,height2则表示将整个picture参数指定的图片,复制到Object中。 ·例如: ( Pic1 和Pic12为两个图片框) Pic1.PaintPicture Pic2.Picture, 0, 0, w1, h1, x2, y2, w2, h2 其中(0,0)和(x2, y2)分别使用Pic1和Pic2的坐标系统。 Visual Basic程序设计教程

【例10-10】图形复制。有两张图片放入影像框中,单击任何一个,复制到图片框中央。 控件: 建立有2个元素的Image控件数组Img1 (0)和Img1(1) 建立1个图片框控件PicShow 设置各对象(名称)属性。设置2个Image控件数组元素的Stretch属性为True。 Visual Basic程序设计教程

Private Sub Form_Load() Img1(0) Private Sub Form_Load() Img1(0).Picture = LoadPicture("e:\feng\temp\APPWIZ.ICO") Img1(1).Picture = LoadPicture("e:\feng\temp\face.ico") PicShow.FontSize = 15 End Sub Private Sub Img1_Click(Index As Integer) Dim t As String t = "左右" PicShow.Cls PicShow.Print "你点中" & Mid(t, Index + 1, 1) & "边的图片:" PicShow.PaintPicture Img1(Index).Picture, _ PicShow.Width/2 - Img1(Index).Width/2, _ PicShow.Height/2 - Img1(Index).Height/2, _ Img1(Index).Width, Img1(Index).Height '复制到中央 End Sub Visual Basic程序设计教程

·使用BackColor、ForeColor、BorderColor、FillColor属性可设置颜色 10.7.4 色彩 ·使用BackColor、ForeColor、BorderColor、FillColor属性可设置颜色 ·颜色的设置可以使用颜色常量,也以使用QBColor函数或RGB函数。 Visual Basic程序设计教程

Point方法可以获得某点颜色值,基本格式为: [对象名.] Point(x, y) 该方法将返回一个长整型的RGB颜色值。 ·与颜色有关的其它方法: Point方法可以获得某点颜色值,基本格式为: [对象名.] Point(x, y) 该方法将返回一个长整型的RGB颜色值。 例如:PointColor = Point (500, 500) ·如果要对某个长整型颜色值A,区分其红、绿和蓝3种颜色成分,可以使用以下表达式: Red = A Mod 256 : Green = A \ 256 Mod 256 Blue = A \ 256 \ 256 Visual Basic程序设计教程

10.8 程序举例 10.8.1 房子和太阳 【例10-11】使用绘线、绘圆、绘点的方法,画出如图所示的图形(不含数字)。 10.8.1 房子和太阳 【例10-11】使用绘线、绘圆、绘点的方法,画出如图所示的图形(不含数字)。 ·因为太阳周围要画出多条直 线作为光,可将坐标系原点 移到太阳的中心点上,循环 完成光芒绘制。 ·其它直线在确定坐标点后,一条一条地画 10.8 程序举例 Visual Basic程序设计教程

Private Sub Command1_Click() Const PI = 3 Private Sub Command1_Click() Const PI = 3.1415926 Dim i As Single Cls : Scale (-110, 30)-(30, -80) '更改坐标系 FillStyle = 0: FillColor = vbRed '画太阳 Circle (0, 0), 10, vbRed For i = 0 To 2 * PI Step PI / 10 '画光芒 Line (15 * Cos(i), 15 * Sin(i))-(25 * Cos(i), 25 * Sin(i)) Next i FillStyle = 1 '开始画房子(连续画8条直线) Line (-80, -20)-(-30, -20) '先画房顶最上面一水平线 Line -(-20, -30): Line -(-70, -30): Line -(-80, -20) '前次终点作本次起点 Line -(-90, -30): Line -(-88, -30) '至此,房顶画完 Line -(-88, -65): Line -(-70, -70) '画侧面的墙 Line (-70, -30)-(-22, -70), , B '用矩形画正面的墙 Line (-60, -45)-(-50, -60), , B: Line (-55, -45)-(-55, -60) '画窗 Line (-40, -45)-(-30, -70), , B '画门 DrawWidth = 3 : PSet (-38, -55) '画门把手 DrawWidth = 1 '恢复缺省值 End Sub Private Sub Form_Load() AutoRedraw = True End Sub Visual Basic程序设计教程

10.8.2 制作拼图 【例10-12】某单位职工,20~29、30~39、40~49、50~59各年龄段人数分别为5人、7人、10人、8人,退休职工15人。制作表示各年龄段人员分布情况的饼图。 ·因各段加起来为100%,即为1 个圆,角度即为2π Visual Basic程序设计教程

·同时把相应的颜色用画矩形的方法显示在图片框中,并在边上标出人数。 ·各段人数所占比例*2π就是扇形的弧度 ·根据弧度即可制作各实心扇形构成饼图。 ·同时把相应的颜色用画矩形的方法显示在图片框中,并在边上标出人数。 Visual Basic程序设计教程

Private Sub Command1_Click() Const PI = 3 Private Sub Command1_Click() Const PI = 3.1415926 Dim Man, Alpha() As Single, Sum As Integer, i As Integer Dim A As Single, B As Single, N As Integer 'a起始角,b扇形终止角 Man = Array(5, 7, 10, 8, 15) '包含各段人数的数组元素初始化 Sum = 0: N = UBound(Man) + 1 'n为元素个数 For i = 0 To N – 1: Sum = Sum + Man(i) : Next i '求总人数 ReDim Alpha(N - 1) '存放各人数段对应扇形的弧度 A = 0.00001 '因负0不能被表示,所以用0的近似值 FillStyle = 0: Picture1.FillStyle = 0 '窗体和图片框都绘制实心图形 For i = 0 To N - 1 '绘制扇形、图片框中图例及输出人数 Alpha(i) = 2 * PI * Man(i) / Sum '计算扇形对应的弧度 FillColor = QBColor(2 * i): Picture1.FillColor = QBColor(2 * i) B = A + Alpha(i) '计算终止角的弧度 If B > 2 * PI Then B = B - 2 * PI '弧度不能大于2π Circle (ScaleWidth / 2, ScaleHeight / 2), ScaleWidth / 4, , -A, -B '绘扇形 Picture1.Line (0, i * Picture1.ScaleHeight / N)- _ (Picture1.ScaleWidth / 2, (i + 1) * Picture1.ScaleHeight / N), , B'绘矩形 Picture1.CurrentY = i * Picture1.ScaleHeight / N '确定Print位置 Picture1.Print Man(i) '输出人数 A = B '将已输出的终止角作下一次的起始角 Next i End Sub Visual Basic程序设计教程

Private Sub Form_Load() ‘属性初始化 Form1. AutoRedraw = True: Picture1 Private Sub Form_Load() ‘属性初始化 Form1.AutoRedraw = True: Picture1.AutoRedraw = True Label1.Caption = “各年龄段人员分布图” Label1.AutoSize = True Label1.Left = (Form1.ScaleWidth - Label1.Width) / 2 End Sub 其中Picture1.ScaleHeight / n,表示 将图片框的高度分成n等分,每一份显示 一个图例。 Visual Basic程序设计教程

【例10-13】编程:在图片框中滚动显示一张大的图片或照片。运行界面如图。 ·分析: 10.8.3 滚动显示大图片 【例10-13】编程:在图片框中滚动显示一张大的图片或照片。运行界面如图。 ·分析: 由于图片框本身没有滚动条,因此 要以图片框为容器,添加滚动条。 为了能看清整个照片的大致图像,可以使用一个Stretch为True的影像框控件。 Visual Basic程序设计教程

不能将查看照片的图片框的AutoSize设为True,但又希望获得照片上的某一区域图案,解决的方法是再增加一个图片框Picture2,让它的AutoSize设为True,同时又让它的Visible属性设为False,只把它作为源图片。 当滚动条滚动时,根据滚动条的值,把Picture2中与Picture1相同大小的一块区域,通过PaintPicture方法复制到Picture1中。 Visual Basic程序设计教程

Private Sub MovePic() '按滚动条的值复制图片 Picture1. PaintPicture Picture2 Private Sub MovePic() '按滚动条的值复制图片 Picture1.PaintPicture Picture2.Picture, 1, 1, Picture1.Width, _ Picture1.Height, HScroll1.Value, VScroll1.Value, _ Picture1.Width, Picture1.Height End Sub Visual Basic程序设计教程

Private Sub Command1_Click() ‘显示按钮 Dim s As String On Error GoTo A1 '为防止输入的文件标识有错,设置出错处理 Picture1.Visible = False '万一文件标识有错,先设它们不可见 s = InputBox("请输入要显示的文件的标识(d:\path\filename.ext)") If Len(Trim(s)) = 0 Then GoTo A1 '不允许出现空格文件名 Picture2.Picture = LoadPicture(s) '加载源图片 HScroll1.Max = Picture2.Width - Picture1.Width '设置滚动条最大值 VScroll1.Max = Picture2.Height - Picture1.Height Call Movepic: Picture1.Visible = True '设置Picture1初始图像,并可见 Image1.Picture = Picture2.Picture '设置Image1的显示图像 Exit Sub A1: MsgBox "文件名或路径错误!", vbCritical, "出错" '出错处理 End Sub Visual Basic程序设计教程

Private Sub Command2_Click() '退出按钮 End End Sub Private Sub Form_Load() '初始化图片框和影像框属性 Picture2.AutoSize = True: Picture2.Visible = False Picture1.AutoRedraw = True: Picture1.Visible = False Image1.Stretch = True End Sub Private Sub VScroll1_Change() '垂直滚动条改值时调用MovePic MovePic End Sub Visual Basic程序设计教程

·程序运行时,只要输入合法文件标识,并确实是图片文件,就会正常显示,否则给出出错信息。 Private Sub HScroll1_Change() '水平滚动条改值时调用MovePic MovePic End Sub ·程序运行时,只要输入合法文件标识,并确实是图片文件,就会正常显示,否则给出出错信息。 Visual Basic程序设计教程