VB中如何用line画线的方法给圆里面填充颜色

VB中如何用line画线的方法给圆里面填充颜色,第1张

VB中直接有“填充方式”,   FillStyle 属性就决定了用什么样的填充方式填充圆内空间。

其中:

VbFSSolid     0     实心

VbFSTransparent     1     (缺省值)透明。  

VbHorizontalLine     2     水平直线。  

VbVerticalLine     3     垂直直线。  

VbUpwardDiagonal     4     上斜对角线。  

VbDownwardDiagonal     5     下斜对角线  

VbCross     6     十字线  

VbDiagonalCross     7     交叉对角线  

示例代码如下:

Private Sub Command1_Click()
   Dim CX, CY, Radius, Limit   ' Declare variable
   FillColor = vbRed    '填充颜色
   FillStyle = 0        '实心
   FillStyle = 1        '无填充
   FillStyle = 2        '水平直线

FillStyle = 3        '垂直直线

FillStyle = 4        '上斜对角线

FillStyle = 5        '下斜对角线

FillStyle = 6        '十字线

FillStyle = 7        '交叉对角线

ScaleMode = 3   ' 以像素为单位。
   CX = ScaleWidth / 2   ' X 位置。
   CY = ScaleHeight / 2   ' Y 位置。
   If CX > CY Then Limit = CY Else Limit = CX
   Radius = Limit    ' 半径。
   Circle (CX, CY), Radius, RGB(Rnd 255, Rnd 255, Rnd 255)
  
End Sub

1、绘制线表后肯定要先找到这两个控件

2、然后在这里先画上X和Y两轴线。

4、接下来,用标签输入这两个标志。

4、在使用这个形状按钮绘制。

5、一个个画过去线条就可以了。

注意事项:

VB可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建Active X控件,用于高效生成类型安全和面向对象的应用程序。

我先给你写一段如果不明白加我QQ:905906
在工控制软件中,实时曲线的绘制用途非常的广泛,它可以很直观的显示出监控数据的变化值和变化趋势。在VB中实现曲线的绘制有很多种方法,本文介绍一种非常简单的方法来实现实时曲线的绘制。
在VB中实现实时曲线的绘制,要利用VB的PictureBox(图像)控件,和画线函数line(x1,y1)-(x2,y2)。PictureBox控件,可以作为一个“容器”,在它的里面可以包含很多的对象。也可以执行很多VB的内部函数。
要实现实时曲线的绘制,肯定要有外部实时数据的输入,这里假设是有一个数据从计算机的串口输入 定义该数据变量为DataFromCom。实时曲线反映的就是该数据。
打开VB60中文版,新建一个项目和窗体,修改窗体的属性,将“Heigh”修改为:8000,“Width”修改为在窗体中放如一个PictureBox控件。然后重新定义PictureBox控件的一些基本属性,在VB中选中PictureBox控件,直接在它的属性框中,修改一些属性参数。“名称”改为Pic。 “AutoRedraw”改为:True。“BackColor”改为:&H00004000&(墨绿色背景颜色)。”Heigh”改为:5000。“Width”改为:8000。如图1所示:
然后要重新定义PictureBox控件的坐标系。图像框的默认坐标系,是从左上角开始的,不符合我们的画线要求。修改坐标系的目的是让曲线从图像框的左边正中间,开始画线。修改图像框的坐标系,这里定义一个过程PicScale(),代码如下:
Private Sub PicScale(picX As PictureBox)
picXScale (0, PicXScaleHeight)-(picXScaleWidth, -PicXScaleHeight)
End Sub
一般的实时曲线显示的时候在屏幕的正中间有一条基准线,这里也要画出这条基准线,用一个过程PicMidleLine()来实现,代码如下:
Private Sub PicMidleLine( picX As PictureBox)
picXLine (0, 0)-(picXScaleWidth, 0), vbGreen '画出中线
End Sub
要画一条实时曲线,坐标轴的设定很重要,在这里把X轴设定为时间轴,Y轴设定为数据轴。对应X轴我们定义一个时间变量TimeCount,TimeCount会随着时间逐渐递增,每次递增,对应着一个从串口读过来的数据DataFromCom,这样图像框中的(x,y)坐标点实际上就对应着(TimeCount,DataFromCom)如果只是当TimeCount发生变化时就在图像框上画一个点,就只需调用VB中的画像素的函数point(x,y),这里x,y为所画的点的坐标。单这样画出来的是一个个不连续的点。我们想要的是实时的连续的曲线,所以要调用VB中的画线的函数line(x1,y1)-(x2,y2),这里(x1,y1)(x2,y2)为所要画的线的起点和终点的坐标。只要把上次串口读过来的数据(这里把它定义为变量DataFromComLast)和现在串口读过来的数据(DataFromCom)和TimeCount相对应,调用line(x1,y1)-(x2,y2)函数就可以在图像框中画出实时的曲线了。把它写成一个过程如下面的代码:
Private Sub DrawRealLine(picX As PictureBox, TimeCountX As Integer, DataFromComX As Integer, DataFromComLastX As Integer)
If TimeCountX - 1 > 0 Then
picXLine (TimeCountX - 1, DataFromComLastX)-(TimeCountX, DataFromComX), vbWhite
End If
End Sub
有了三个过程就可以在图像框中画出一条实时的曲线了。
DrawRealLine()过程中的picXLine (TimeCountX - 1, DataFromComLastX)-(TimeCountX, DataFromComX), vbWhite所画线的起始点和结束点都是以像素为单位的,这样以来如果不改变的话,画出来的线将是一个屏幕上像素相连的很密的曲线,通过调整line(x1,y1)-(x2,y2)
中的x的值,就可以画出分布密度不一样的曲线,这里为了在屏幕上能够看到不是很密的曲线我们把x乘以一个系数10,修改为:
picXLine ((TimeCountX - 1) 10, DataFromComLastX)-(TimeCountX 10, DataFromComX), vbWhite
这比较容易在屏幕上看到稀疏的曲线。
由于是仅仅讲解如何画出实时的曲线,读者的计算机上未必有和串口相连的设备,这里用一个定时器控件来模拟从串口读过来的数据。在窗体上放入一个Timer控件,修改Timer控件的属性为:“Enable”该为True,“Interval”改为300。双击Timer控件在它的过程中,添加代码后如下:
Private Sub Timer1_Timer()
DataFromComLast = DataFromCom
Randomize
DataFromCom = 3000 Rnd
TimeCount = TimeCount + 1
DrawRealLine Pic, TimeCount, DataFromCom, DataFromComLast
End Sub
这样在运行后就可以看到我们想要的实时曲线了,如下图:
图 2
下面是完整的代码:
Option Explicit
Dim DataFromCom As Integer '从串口读过来的实时值
Dim DataFromComLast As Integer '上次的串口值
Dim TimeCount As Integer
Private Sub Form_Load()
PicScale Pic '调整图像框的坐标系
PicMidleLine Pic '在图像框中画一条中线
End Sub
Private Sub PicScale(picX As PictureBox) '调整图像框的坐标系
picXScale (0, picXScaleHeight)-(picXScaleWidth, -picXScaleHeight)
End Sub
Private Sub PicMidleLine(picX As PictureBox) '在图像框中画一条中线
picXLine (0, 0)-(picXScaleWidth, 0), vbGreen '画出中线
End Sub
Private Sub DrawRealLine(picX As PictureBox, TimeCountX As Integer, DataFromComX As Integer, DataFromComLastX As Integer)
If TimeCountX - 1 > 0 Then
picXLine ((TimeCountX - 1) 10, DataFromComLastX)-(TimeCountX 10, DataFromComX), vbWhite
End If
End Sub
Private Sub Timer1_Timer()
DataFromComLast = DataFromCom
Randomize
DataFromCom = 3000 Rnd
TimeCount = TimeCount + 1
DrawRealLine Pic, TimeCount, DataFromCom, DataFromComLast '画出实时的曲线
End Sub

'放一个按钮(Command1),再放一个框(picture1)和一个图像框(image1)
'主要思路就是在框上绘图,然后将框上绘好的图像同步加载到image上
Private Sub Command1_Click()
Picture1AutoRedraw = True
Picture1Line (0, 0)-(Picture1Width, Picture1Height)
'Picture1上进行绘图
Set Image1Picture = Picture1Image
'加载picture1上的绘图到iamge即可
End Sub

你漏掉一个属性AutoRedraw=True
并且保存的时候应该用Picture1Image,而不是Picture1Picture
代码如下
Picture1AutoRedraw = True
VBSavePicture Picture1Image, "文件名"

画直线
为了在两个坐标点之间画一条直线,可使用 Line 方法的简单形式,其语法如下:
[object]Line [(x1, y1)]–(x2, y2)[, color]
其中 Object 是可选择的;若省略,此方法将在代码所连接的窗体(当前窗体)上画线。第一对坐标也是可选的。就所有的坐标值来说,x 和 y 参数都既可以是整数,也可以是分数。例如,下列语句可在窗体上画一条斜线。
Line (500, 500)–(2000, 2000)
Visual Basic 所画出的一条直线,要包括第一个端点,而不是最后一个端点。这种行为在从点到点画封闭曲线时是有用的。为了画最后一个端点,应使用这种语法:
PSet [Step] (0, 0)[, color]
第一对坐标 (x1, y1) 是可选的。如果省略这些坐标,将把该对象的 x,y 当前位置(画图坐标)作为端点。当前位置是由 CurrentX 和 CurrentY 属性指定的,然而在其它情况它会等于以前的图形方法或 Print 方法所画最后点的位置。如果以前没有使用过图形方法或 Print 方法,或没有设置 CurrentX 和 CurrentY 属性,则缺省位置为对象的左上角。
例如,以下语句通过三点连接画出一个三角形。
'设置起点的 x 坐标。
CurrentX = 1500
'设置起点的 y 坐标。
CurrentY = 500
'向起点的右下方画一直线。
Line -(3000, 2000)
'向当前点的左方画一直线。
Line -(1500, 2000)
'向右上方画一直线到起点。
Line -(1500, 500)
Blanker 应用程序使用 Line 方法创建出了一些有趣的图案样式。为了看到这些图案,可从“选项”菜单中,选定“Crossfire”,然后选定“Start Demo”按钮,即可看到。
Step 关键字
PSet、Line、和 Circle 方法使用以下语法可指定一个或多个点:
(x, y)
可在每个点之前加上 Step 关键字,用来指定要画出的点,是相对最后画出点的位置。Visual Basic 要将 x 和 y 的值加到最后所画的点上。例如,下边这条语句:
Line (100, 200)–(150, 250)
等价于:
Line (100, 200)–Step(50, 50)
在许多情况下,Step 关键字可免除持续不断地记录最后所画点位置的负担。经常最为关心的可能是两点的相对位置,而不是它们的绝对位置。
使用颜色参数
为了改变直线的颜色,应将可选的 color 参数与图形方法一起使用。例如,下述语句将画一条深蓝色的直线:
Line (500, 500)–(2000, 2000), RGB(0, 0, 255)
如果省略了 color 参数,将使用在其上画线的对象的 ForeColor 属性,来决定直线的颜色。
RND来设置随机值

在窗体上加入控件line1,然后复制下面代码,运行后在窗体上拖放鼠标即可。
Option Explicit
Private Sub Form_Load()
MeAutoRedraw = True
Line1Visible = False
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
With Line1
X1 = X
Y1 = Y
X2 = X
Y2 = Y
Visible = True
End With
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
With Line1
If Button = 1 Then
X2 = X
Y2 = Y
End If
End With
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
With Line1
If Button = 1 Then
Visible = False
Line (X1, Y1)-(X2, Y2)
End If
End With
End Sub

设数据放在D(10)这个数组中,最小值1最大值1000,加一picture,属性:width=1000,height=1000
for
i=1
to
10
picture1line
((i-1)100,d(i-1))-(i100,d(i))
next
这只是简单的,至于其它数据,其它情况,或其它效果,只要改line后面的算法就可以了!
line
画线命令,格式:
line
(起点X坐标,起点Y坐标)-(终点X坐标,终点Y坐标),颜色


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12968202.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存