真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

vb點(diǎn)虐 實(shí)時(shí)繪制曲線的簡(jiǎn)單介紹

在VB中怎么用鼠標(biāo)畫(huà)曲線

分類(lèi): 電腦/網(wǎng)絡(luò) 程序設(shè)計(jì) 其他編程語(yǔ)言

創(chuàng)新互聯(lián)建站主營(yíng)沁陽(yáng)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,APP應(yīng)用開(kāi)發(fā),沁陽(yáng)h5成都微信小程序搭建,沁陽(yáng)網(wǎng)站營(yíng)銷(xiāo)推廣歡迎沁陽(yáng)等地區(qū)企業(yè)咨詢(xún)

問(wèn)題描述:

如何用VB做一個(gè)程序可以用鼠標(biāo)畫(huà)曲線,

解析:

在工控制軟件中,實(shí)時(shí)曲線的繪制用途非常的廣泛,它可以很直觀的顯示臘腔者出監(jiān)控?cái)?shù)據(jù)的變化值和變化趨勢(shì)。在VB中實(shí)現(xiàn)曲線的繪制有很多種方法,本文介紹一種非常簡(jiǎn)單的方法來(lái)實(shí)現(xiàn)實(shí)時(shí)曲輪薯線的繪制。

在VB中實(shí)現(xiàn)實(shí)時(shí)曲線的繪制,要利用VB的PictureBox(圖像)控件,和畫(huà)線函數(shù)line(x1,y1)-(x2,y2)。PictureBox控件,可以作為一個(gè)“容器”,在它的里面可以包含很多的對(duì)象。也可以執(zhí)行很多VB的內(nèi)部函數(shù)。

要實(shí)現(xiàn)實(shí)時(shí)曲線的繪制,肯定要有外部實(shí)時(shí)數(shù)據(jù)的輸入,這里假設(shè)是有一個(gè)數(shù)據(jù)從計(jì)算機(jī)的串口輸入 定義該數(shù)據(jù)變量為DataFromCom。實(shí)時(shí)曲線反映的就是該數(shù)據(jù)。

打開(kāi)VB6.0中文版,新建一個(gè)項(xiàng)目和窗體,修改窗體的屬性,將“Heigh”修改為:8000,“Width”修改為在窗體中放如一個(gè)PictureBox控件。然后重新定義PictureBox控件的一些基本屬性,在VB中選中PictureBox控件,直接在它的屬性框中,修改一些屬性參數(shù)?!懊Q(chēng)”改為Pic。 “AutoRedraw”改為:True?!癇ackColor”改為:H***********(墨綠色背景顏色)?!盚eigh”改為:5000?!癢idth”改為:8000。如圖1所示:

然后要重新定義PictureBox控件的坐標(biāo)系。圖像框的默認(rèn)坐標(biāo)系,是從左上角開(kāi)始的,不符合我們的畫(huà)線要求。修改坐標(biāo)系的目的是讓曲線從圖像框的左邊正中間,開(kāi)始畫(huà)線。修改圖像框的坐標(biāo)系,這里定義一個(gè)過(guò)程PicScale(),代碼如下:

Private Sub PicScale(picX As PictureBox)

picX.Scale (0, PicX.ScaleHeight)-(picX.ScaleWidth, -PicX.ScaleHeight)

End Sub

一般的實(shí)時(shí)曲線顯示的時(shí)候在屏幕的正中間有一條基準(zhǔn)線,這圓毀里也要畫(huà)出這條基準(zhǔn)線,用一個(gè)過(guò)程PicMidleLine()來(lái)實(shí)現(xiàn),代碼如下:

Private Sub PicMidleLine( picX As PictureBox)

picX.Line (0, 0)-(picX.ScaleWidth, 0), vbGreen '畫(huà)出中線

End Sub

要畫(huà)一條實(shí)時(shí)曲線,坐標(biāo)軸的設(shè)定很重要,在這里把X軸設(shè)定為時(shí)間軸,Y軸設(shè)定為數(shù)據(jù)軸。對(duì)應(yīng)X軸我們定義一個(gè)時(shí)間變量TimeCount,TimeCount會(huì)隨著時(shí)間逐漸遞增,每次遞增,對(duì)應(yīng)著一個(gè)從串口讀過(guò)來(lái)的數(shù)據(jù)DataFromCom,這樣圖像框中的(x,y)坐標(biāo)點(diǎn)實(shí)際上就對(duì)應(yīng)著(TimeCount,DataFromCom)如果只是當(dāng)TimeCount發(fā)生變化時(shí)就在圖像框上畫(huà)一個(gè)點(diǎn),就只需調(diào)用VB中的畫(huà)像素的函數(shù)point(x,y),這里x,y為所畫(huà)的點(diǎn)的坐標(biāo)。單這樣畫(huà)出來(lái)的是一個(gè)個(gè)不連續(xù)的點(diǎn)。我們想要的是實(shí)時(shí)的連續(xù)的曲線,所以要調(diào)用VB中的畫(huà)線的函數(shù)line(x1,y1)-(x2,y2),這里(x1,y1)(x2,y2)為所要畫(huà)的線的起點(diǎn)和終點(diǎn)的坐標(biāo)。只要把上次串口讀過(guò)來(lái)的數(shù)據(jù)(這里把它定義為變量DataFromComLast)和現(xiàn)在串口讀過(guò)來(lái)的數(shù)據(jù)(DataFromCom)和TimeCount相對(duì)應(yīng),調(diào)用line(x1,y1)-(x2,y2)函數(shù)就可以在圖像框中畫(huà)出實(shí)時(shí)的曲線了。把它寫(xiě)成一個(gè)過(guò)程如下面的代碼:

Private Sub DrawRealLine(picX As PictureBox, TimeCountX As Integer, DataFromComX As Integer, DataFromComLastX As Integer)

If TimeCountX - 1 0 Then

picX.Line (TimeCountX - 1, DataFromComLastX)-(TimeCountX, DataFromComX), vbWhite

End If

End Sub

有了三個(gè)過(guò)程就可以在圖像框中畫(huà)出一條實(shí)時(shí)的曲線了。

DrawRealLine()過(guò)程中的picX.Line (TimeCountX - 1, DataFromComLastX)-(TimeCountX, DataFromComX), vbWhite所畫(huà)線的起始點(diǎn)和結(jié)束點(diǎn)都是以像素為單位的,這樣以來(lái)如果不改變的話(huà),畫(huà)出來(lái)的線將是一個(gè)屏幕上像素相連的很密的曲線,通過(guò)調(diào)整line(x1,y1)-(x2,y2)

中的x的值,就可以畫(huà)出分布密度不一樣的曲線,這里為了在屏幕上能夠看到不是很密的曲線我們把x乘以一個(gè)系數(shù)10,修改為:

picX.Line ((TimeCountX - 1) * 10, DataFromComLastX)-(TimeCountX * 10, DataFromComX), vbWhite

這比較容易在屏幕上看到稀疏的曲線。

由于是僅僅講解如何畫(huà)出實(shí)時(shí)的曲線,讀者的計(jì)算機(jī)上未必有和串口相連的設(shè)備,這里用一個(gè)定時(shí)器控件來(lái)模擬從串口讀過(guò)來(lái)的數(shù)據(jù)。在窗體上放入一個(gè)Timer控件,修改Timer控件的屬性為:“Enable”該為T(mén)rue,“Interval”改為300。雙擊Timer控件在它的過(guò)程中,添加代碼后如下:

Private Sub Timer1_Timer()

DataFromComLast = DataFromCom

Randomize

DataFromCom = 3000 * Rnd

TimeCount = TimeCount + 1

DrawRealLine Pic, TimeCount, DataFromCom, DataFromComLast

End Sub

這樣在運(yùn)行后就可以看到我們想要的實(shí)時(shí)曲線了,如下圖:

圖 2

下面是完整的代碼:

Option Explicit

Dim DataFromCom As Integer '從串口讀過(guò)來(lái)的實(shí)時(shí)值

Dim DataFromComLast As Integer '上次的串口值

Dim TimeCount As Integer

Private Sub Form_Load()

PicScale Pic '調(diào)整圖像框的坐標(biāo)系

PicMidleLine Pic '在圖像框中畫(huà)一條中線

End Sub

Private Sub PicScale(picX As PictureBox) '調(diào)整圖像框的坐標(biāo)系

picX.Scale (0, picX.ScaleHeight)-(picX.ScaleWidth, -picX.ScaleHeight)

End Sub

Private Sub PicMidleLine(picX As PictureBox) '在圖像框中畫(huà)一條中線

picX.Line (0, 0)-(picX.ScaleWidth, 0), vbGreen '畫(huà)出中線

End Sub

Private Sub DrawRealLine(picX As PictureBox, TimeCountX As Integer, DataFromComX As Integer, DataFromComLastX As Integer)

If TimeCountX - 1 0 Then

picX.Line ((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 '畫(huà)出實(shí)時(shí)的曲線

End Sub

在VB中繪制實(shí)時(shí)曲線是比較難的,一般要應(yīng)用第三方控件或是Windows API函數(shù)來(lái)完成,但是如果你對(duì)實(shí)時(shí)曲線的要求不是很高,只要能表示出當(dāng)前的一般情況的話(huà),我們可以直接應(yīng)用VB提供給我們的空間來(lái)完成.

原則上講,直接在Form里繪制曲線都是可以的,MSDN上面很多例程就是直接在Form里面繪制圖形的,Form作為繪制圖形的容器,不過(guò)一般應(yīng)用中Form中不可避免的會(huì)有很多其他控件,所以我們選擇PictureBox作為繪制曲線的容器.

實(shí)時(shí)曲線的繪制一般借助于Timer控件來(lái)完成,使用Timer控件,定期將串口或是其他儀器中監(jiān)測(cè)到的數(shù)據(jù)送往PictureBox1,而曲線的繪制一般畫(huà)成折線圖,采用PictureBox1的Line方法繪制.具體實(shí)現(xiàn)如下:

1.選擇需要顯示的窗體Picture1,加入圖片框Picture1,根據(jù)實(shí)際需要設(shè)置圖片的大小并移到合適的位置,并在圖片的外面畫(huà)好量程----時(shí)間坐標(biāo)系;然后加上Timer控件以及兩個(gè)CommandButton,界面就基本設(shè)置好了.

2.建立坐標(biāo)系,根據(jù)Picture1的大小和高度設(shè)置畫(huà)出坐標(biāo)系的X軸和Y軸:

Picture1 .ScaleMode = 1 ‘以VB的基本單位作為建立坐標(biāo)軸以及繪制圖形的單位;

Picture1.Refresh

Picture1.CurrentX = Picture1.ScaleLeft +100

Picture1.CurrentY = Picture1.ScaleTop

Picture1.Print Picture1.ScaleHeight - 100

Picture1.Line(Picture1.ScaleLeft+100,Picture1.ScaleTop+100)-(Picture1.ScaleLeft+100, Picture1.ScaleHeight - 100)

Picture1.CurrentX = Picture1.ScaleLeft +100

Picture1.CurrentY = Picture1.ScaleHeight

Picture1.Print “(0,0)”

Picture1.Line (Picture1.ScaleLeft + 100, Picture1.ScaleHeight - 100)-(Picture1.ScaleWidth - 100, Picture1.ScaleHeight - 100)

Picture1.CurrentX = Picture1.ScaleWidth

Picture1.CurrentY = Picture1.ScaleHeight

Picture1.Print Picture1.ScaleWidth-100

Picture1.AutoRedraw = True ‘必要時(shí),用存儲(chǔ)在內(nèi)存中的圖象進(jìn)行重繪

3.繪制曲線并保存,我們這里以正弦曲線作為繪制曲線的數(shù)據(jù)來(lái)源,具體應(yīng)用是可以采用由串口或其他儀器采集得到的數(shù)據(jù).首先我們繪制一條中線,然后在Timer控件的Time事件中繪制曲線:

Picture1.Line (Picture1.ScaleLeft, CInt(Picture1.ScaleHeight / 2))-(Picture1.ScaleWidth, CInt(Picture1.ScaleHeight / 2)) ‘繪制中線

Private Sub Timer1_Timer()

Dim y1 As Integer

y1 = CInt(Sin((x - Picture1.Left) / 20 / 180 * pi) * Picture1.ScaleHeight / 2)

y1 = CInt((Picture1.ScaleHeight + 1000) / 2) - y1

Picture1.Line (x, y)-(x + 20, y1)

x = x + 20

y = y1

If x = Picture1.ScaleWidth Then

SavePicture Picture1.Image, "c:\sin.bmp" ‘保存圖畫(huà),

vb點(diǎn)虐 連續(xù)繪制曲線圖不消失

您好,您是想問(wèn)vb點(diǎn)虐 連續(xù)繪制曲線圖不消物畝失怎么辦?b點(diǎn)虐 連續(xù)繪制曲線圖不消失的解決辦法如下:

1、首先必須罩爛森創(chuàng)建bitmap,關(guān)聯(lián)到picturebox1.image上。

2、再在歷腔picturebox1.image上創(chuàng)建Graphics,再進(jìn)行作圖。即可顯示線圖。

VB.NET 實(shí)時(shí)曲線

拖一個(gè)PictureBox1控件 創(chuàng)建一個(gè)Paint事件。在事件中加入 Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint ' Create pens. Dim redPen As New Pen(Color.Red, 3) Dim greenPen As New Pen(Color.Green, 3) ' Create points that define curve. Dim point1 As New Point(50, 50) Dim point2 As New Point(100, 25) Dim point3 As New Point(200, 5) Dim point4 As New Point(250, 50) Dim point5 As New Point(300, 100) Dim point6 As New Point(350, 200) Dim point7 As New Point(250, 250) Dim curvePoints As Point() = {point1, point2, point3, point4, _ point5, point6, point7} ' Draw lines between original points to screen. e.Graphics.DrawLines(redPen, curvePoints) ' Draw curve to screen. e.Graphics.DrawCurve(greenPen, curvePoints) End Sub 得余冊(cè)到數(shù)據(jù)后,改point的數(shù)據(jù)。漏頌然后返毀鄭PictureBox1.Refresh()就行了


網(wǎng)站名稱(chēng):vb點(diǎn)虐 實(shí)時(shí)繪制曲線的簡(jiǎn)單介紹
URL網(wǎng)址:http://weahome.cn/article/ddpcgjg.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部