240 likes | 402 Views
eShop-MIS 供应商信息的查询与图形化显示. 长沙民政职业技术学院. 本单元知识点. 1. VB.NET 中绘制图形的常见对象的使用. 2. 掌握颜色、画笔、画刷的使用方法. 3. 掌握 Graphics 的各种绘制图形的方法. 4. 熟悉开发图形程序的流程、方法. 主要内容. 8.1 、任务描述、分析与实现 8.2 、坐标系统 8.3 、颜色系统 8.4 、 Graphics 对象 8.5 、拓展实践 —— 简单绘图软件的实现. 8.1 、任务描述与实现. 问题描述.
E N D
eShop-MIS供应商信息的查询与图形化显示 长沙民政职业技术学院
本单元知识点 1 VB.NET中绘制图形的常见对象的使用 2 掌握颜色、画笔、画刷的使用方法 3 掌握Graphics的各种绘制图形的方法 4 熟悉开发图形程序的流程、方法 长沙民政学院软件学院
主要内容 • 8.1、任务描述、分析与实现 • 8.2、坐标系统 • 8.3、颜色系统 • 8.4、Graphics对象 • 8.5、拓展实践——简单绘图软件的实现 长沙民政学院软件学院
8.1、任务描述与实现 • 问题描述 • 在供应商信息管理系统中,要示提供按省份的查询功能,并以条形图的方式显示每个省份供应商的数量,以扇形图的方式显示各省份供应商所占的比例 长沙民政学院软件学院
实现任务的主要思路 创建VB项目 界面 设计 代码 设计 调试 运行 打开7-1的项目VB_SupplierMgr 1、添加两个按钮“条形统计图”和“扇形统计图” 2、添加一个PictureBox控件用来显示图形 1、添加一个数组,用来保存统计各省份供应商的数量 2、添加一个函数来统计各个省份的供应商数量 3、根据数据绘制图形 • F5调试运行程序 • F9设置/清除断点 • F8逐语句运行程序 • 所涉及到的主要知识点: • 坐标系统、颜色系统 • Graphics对象以及其绘图方法 • PictureBox控件 长沙民政学院软件学院
主要实现环节(数据准备) • 0、系统原来的供应商省份信息保存在AArea()数组中,为了测试方便,先用随机函数Rnd随机生成数据 • '随机生成供应商地区信息数据 • Function GenData() As String() • Dim i, k As Integer • For i = 0 To MAX_NUMS - 1 • k = Rnd() * (MAX_AREAS - 1) • AArea(i) = Area(k) • Next • Return Me.AArea • End Function • 1、添加一个数组,记录各省份供应商的数量 • Private ANumsByArea(MAX_AREAS) As Integer • 2、供应商所分布的省份的数组 • Private Area() As String = {"湖南", "湖北", "河南", "河北"} • 3、定义常量,供应商共分布在4个省份 • Const MAX_AREAS As Integer = 4 长沙民政学院软件学院
主要实现环节(定义过程) • 4、设计一个过程来统计各省供应商的数量 • ' 按地区统计每个省份供应商人数,并记录在AnumsByArea数组中 • Function GetSuppliersByArea() As Integer() • Dim i, j As Integer • For i = 0 To MAX_NUMS-1 • For j = 0 To MAX_AREAS-1 • If Me.AArea(i) = Me.Area(j) Then • Me.ANumsByArea(j) += 1 • End If • Next • Next • Return Me.ANumsByArea • End Function 长沙民政学院软件学院
主要实现环节(条形图的实现) Private Sub btnRect_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnRect.Click '获取绘图对象 Dim g As Graphics g = Me.picDraw.CreateGraphics Dim i As Integer '清除图像 g.Clear(Me.picDraw.BackColor) '定义绘制文字的格式 Dim fr As New StringFormat(StringFormatFlags.DirectionVertical) For i = 0 To MAX_AREAS - 1 '定义绘图的颜色 Dim c As Color = System.Drawing.ColorTranslator.FromOle(QBColor(i)) '定义画笔 Dim pen As New Pen(c, 1) '定义填充的画刷 Dim br As New SolidBrush(c) '绘制条形 g.DrawRectangle(pen, 10 + 40 * i, 0, 10, Me.ANumsByArea(i)) '填充条形 g.FillRectangle(br, 10 + 40 * i, 0, 10, Me.ANumsByArea(i)) '绘制文字 g.DrawString(Area(i) & " " & Me.ANumsByArea(i), Me.Font, Brushes.Red, _ 10 + 40 * i, Me.ANumsByArea(i) + 10, fr) Next End Sub 长沙民政学院软件学院
主要实现环节——扇形图的实现(一) Private Sub btnPie_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPie.Click '获取绘图对象 Dim g As Graphics g = Me.picDraw.CreateGraphics g.Clear(picDraw.BackColor) Dim i, sum As Integer '求供应商的数量 For i = 0 To MAX_AREAS - 1 sum += Me.ANumsByArea(i) Next 长沙民政学院软件学院
主要实现环节——扇形图的实现(二) Dim stangle As Integer = 0 For i = 0 To MAX_AREAS - 1 '定义绘图的颜色 Dim c As Color = _ System.Drawing.ColorTranslator.FromOle(QBColor(i)) '定义画笔 Dim pen As New Pen(c, 1) '定义填充的画刷 Dim br As New SolidBrush(c) '绘制扇形 Dim angle As Single = Me.ANumsByArea(i) / sum * 360 g.DrawPie(pen, 0, 0, picDraw.Width, picDraw.Height, stangle, angle) '填充扇形 g.FillPie(br, 0, 0, picDraw.Width, picDraw.Height, stangle, angle) ‘在此处添加绘制文字的代码 stangle += Me.ANumsByArea(i) / sum * 360 Next 长沙民政学院软件学院
主要实现环节——扇形图的实现(三) 下面的代码在扇形图中绘制文字 Dim x, y As Integer '计算文字的坐标 x = Math.Cos((stangle + angle / 2) / 360 * 2 * 3.14) * picDraw.Width / 3 y = Math.Sin((stangle + angle / 2) / 360 * 2 * 3.14) * picDraw.Width / 3 '绘制文字 x += Me.picDraw.Width / 2 y += Me.picDraw.Height / 2 g.DrawString(Area(i) & Me.ANumsByArea(i) / sum * 100 & "%", _ Me.Font, Brushes.Red, x, y, StringFormat.GenericDefault) 长沙民政学院软件学院
8.2、坐标系统 • Visual Basic 的坐标系统是指在屏幕(screen)、窗体(form)、容器(container)上定义的表示图形对象位置的平面二维格线,一般采用二元组(x, y)的形式定位。其中x 值是沿 x 轴点的位置,最左端是缺省位置 0。y 值是沿 y 轴点的位置,最上端是缺省位置 0。窗体的坐标系统的图示 长沙民政学院软件学院
8.3、颜色系统 • Visual Basic使用固定的颜色系统,每种颜色都由一个Long型整数表示。主要有4种方式可以用于指定颜色值: • RGB函数。 • QBColor函数。 • Visual Basic的Color对象中的内部颜色函数。 • 输入Long型整数颜色值。 长沙民政学院软件学院
QBColor函数 • QBColor函数能够选择Microsoft Quick Basic的16种颜色中的一种. Me.BackColor = System.Drawing.ColorTranslator.FromOle(QBColor(5)) 长沙民政学院软件学院
RGB函数 在计算机中,使用RGB模型来定义颜色,即任何颜色都可以用红色、绿色、蓝色三种基色的不同比例来表示。每种基色用一个0 ~ 255 之间的数字来表示颜色的饱和度,最小值0表示没有颜色,最大值255表示为颜色的最高饱和度。如(0,0,0)表示什么颜色都没有,即黑色。而(255,255,255)表示各种颜色的最高饱和度,即白色。计算机所能表示的颜色为256×256×256 = 16 777 216种。RGB(Red ,Green ,Blue) Me.BackColor = System.Drawing.ColorTranslator.FromOle(RGB(0, 0, 255)) 长沙民政学院软件学院
Color结构 • Color是一个表示颜色的数据结构,位于System.Drawing名称空间下面,提供了很多获取系统颜色的属性与方法 Dim c As System.Drawing.Color c = Color.FromArgb(255, 0, 0) '构造一个颜色为绿色结构 Me.BackColor = c '设置窗体的前景色为绿色 长沙民政学院软件学院
绿色分量 蓝色分量 红色分量 用整数直接设置颜色 因此一个16进制的数&HFF0000所代表的颜色用RGB表示为RGB(0,0,&HFF),即为蓝色。以下的代码将窗体的背景颜色改为绿色, Me.BackColor = System.Drawing.ColorTranslator.FromOle(&H00FF00) 长沙民政学院软件学院
常用的绘图类 长沙民政学院软件学院
PictureBox 控件 与ImageList控件 • PictureBox一个图片框控件,位于System.Windows.Forms的名称空间内,通常使用 PictureBox 来显示位图、元文件、图标、JPEG、GIF 或 PNG 文件中的图形。 • PictureBox的常见属性与方法 • ImageList控件是一个图片集管理器,支持bmp、gif、jpg等图像格式。其属性Images用于保存多幅图片以备其他控件使用,其他控件可以通过ImageList控件的索引号和关键字引用ImageList控件中的每个图片。ImageList控件在运行期间是不可见的,因此添加一个ImageList控件时,它不会出现在窗体上,而是出现在窗体的下方。 • ImageList控件的一些常见属性和方法 长沙民政学院软件学院
【案例8-3】利用PictureBox与ImageList控件建立图片管理程序【案例8-3】利用PictureBox与ImageList控件建立图片管理程序 长沙民政学院软件学院
8.4 Graphics 对象 • 在Visual Basic.NET中,提供了在控件上绘制图形的两种方法: • 1) 使用CreateGraphics方法 • 2) 重写OnPaint方法 长沙民政学院软件学院
使用CreateGraphics方法绘图 • (1)声明一个Graphics对象。 • (2)用CreateGraphics方法建立—个Graphics对象。 • (3)用绘图方法画图。 • Dim g As Graphics • g = Me.CreateGraphics() • Dim myPen As New Pen(Color.Red,3) • g.DrawLine(myPen, 0, 0, 150, 200) 长沙民政学院软件学院
Graphics 类包含许多绘制操作方法和图像操作方法 (查找帮助学习) • (1)绘制直线的方法:DrawArc、DrawBezier、DrawEllipse、DrawImage、DrawLine、DrawPolygon、DrawRectangle 和 DrawString。 • (2)填充形状的方法:FillClosedCurve、FillEllipse、FillPath、FillPolygon 和 FillRectangle。 • (3)清除绘图图面的方法:Clear。 • (4)从图像创建新的 Graphics 对象的方法:FromImage。 长沙民政学院软件学院
8.5、拓展实践——简单绘图软件的实现 【案例8-4】利用Graphics对象创建简单画笔程序 长沙民政学院软件学院