欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

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

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

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

問題描述:

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

解析:

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

在VB中實(shí)現(xiàn)實(shí)時(shí)曲線的繪制,要利用VB的PictureBox(圖像)控件,和畫線函數(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ù)。

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

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

Private Sub PicScale(picX As PictureBox)

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

End Sub

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

Private Sub PicMidleLine( picX As PictureBox)

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

End Sub

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

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è)過程就可以在圖像框中畫出一條實(shí)時(shí)的曲線了。

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

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

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

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

由于是僅僅講解如何畫出實(shí)時(shí)的曲線,讀者的計(jì)算機(jī)上未必有和串口相連的設(shè)備,這里用一個(gè)定時(shí)器控件來模擬從串口讀過來的數(shù)據(jù)。在窗體上放入一個(gè)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

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

圖 2

下面是完整的代碼:

Option Explicit

Dim DataFromCom As Integer '從串口讀過來的實(shí)時(shí)值

Dim DataFromComLast As Integer '上次的串口值

Dim TimeCount As Integer

Private Sub Form_Load()

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

PicMidleLine Pic '在圖像框中畫一條中線

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) '在圖像框中畫一條中線

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

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

End Sub

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

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

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

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

2.建立坐標(biāo)系,根據(jù)Picture1的大小和高度設(shè)置畫出坐標(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ù)來源,具體應(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" ‘保存圖畫,

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

您好,您是想問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()就行了

新聞標(biāo)題:vb點(diǎn)虐 實(shí)時(shí)繪制曲線的簡單介紹
當(dāng)前網(wǎng)址:http://www.chinadenli.net/article26/ddpcgjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司Google關(guān)鍵詞優(yōu)化自適應(yīng)網(wǎng)站企業(yè)建站網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管