要求是:可以通過滑塊控制元件顯示歷史曲線;由于采樣時間比較長,采樣點有很多,當超出picturebox的邊界時怎么辦呢?
大家有現成的例子也希望可以發一下,謝謝了
uj5u.com熱心網友回復:
Scroll Bar 控制元件方案:創建可滾動的圖形視口除了 PictureBox 控制元件之外,也可用水平、垂直滾動條創建可滾動的圖形視口應用程式。當所包含的圖形超過控制元件范圍時,單獨一個 PictureBox 控制元件無法實作滾動功能─ 因為 PictureBox 控制元件不能自動添加滾動條。
應用程式使用兩個圖片框。稱第一個為平穩的父 PictureBox 控制元件。稱第二個為子 PictureBox 控制元件,它包含在父圖片框中。子圖片框中包含圖形圖象,可用滾動條控制元件在父圖片框中移動子圖片框。
圖 7.25 在設計時添加滾動條控制元件
如圖 7.28 所示,先創建一個新工程,然后在表單上繪制兩個圖片框、一個水平滾動條和一個垂直滾動條。
這里,用表單的 Form_Load 事件設定比例模型,在父圖片框中調整子圖片框的大小,水平、垂直滾動條將定位并調整它們的大小,然后加載位圖圖形。將下列代碼添加到表單的 Form_Load 事件程序中:
Private Sub Form_Load()
'設定 ScaleMode 為像素。
Form1.ScaleMode = vbPixels
Picture1.ScaleMode = vbPixels
'將 Autosize 設定為 True,以使 Picture2 的邊界
'擴展到實際的位圖大小。
Picture2.AutoSize = True
'將每個圖片框的 BorderStyle 屬性設定為 None。
Picture1.BorderStyle = 0
Picture2.BorderStyle = 0
'加載位圖。
Picture2.Picture = _
LoadPicture("c:\Windows\Winlogo.bmp")
'初始化兩個圖片框的位置。
Picture1.Move 0, 0, ScaleWidth - VScroll1.Width, _
ScaleHeight - HScroll1.Height
Picture2.Move 0, 0
'將水平滾動條定位。
HScroll1.Top = Picture1.Height
HScroll1.Left = 0
HScroll1.Width = Picture1.Width
'將垂直滾動條定位。
VScroll1.Top = 0
VScroll1.Left = Picture1.Width
VScroll1.Height = Picture1.Height
'設定滾動條的 Max 屬性。
HScroll1.Max = Picture2.Width - Picture1.Width
VScroll1.Max = Picture2.Height - Picture1.Height
'判斷子圖片框是否將充滿螢屏。
'若如此,則無需使用滾動條。
VScroll1.Visible = (Picture1.Height < _
Picture2.Height)
HScroll1.Visible = (Picture1.Width < _
Picture2.Width)
End Sub
水平和垂直滾動條的 Change 事件用來在父圖片框中上、下、左、右移動子圖片框。請將下列代碼添加到兩個滾動條控制元件的 Change 事件中:
Private Sub HScroll1_Change()
Picture2.Left = -HScroll1.Value
End Sub
Private Sub VScroll1_Change()
Picture2.Top = -VScroll1.Value
End Sub
將子圖片框的 Left 和 Top 屬性分別設定成水平和垂直滾動條數值的負值,這樣,當上、下、左、右滾動時,圖形可正確地移動。
運行時,顯示的圖形如圖 7.26 所示。
圖 7.26 運行時滾動位圖
運行時調整表單大小
在上例中,表單的初始大小限制圖形的可視大小。在運行時當用戶調整表單大小時,為了調整圖形視口應用程式的大小,可將下列代碼添加到表單的 Form_Resize 事件程序中:
Private Sub Form_Resize()
'調整表單大小時,改變 Picture1
'的尺寸。
Picture1.Height = Form1.Height
Picture1.Width = Form1.Width
'重新初始化圖片和滾動條的
'位置。
Picture1.Move 0, 0, ScaleWidth - VScroll1.Width, _
ScaleHeight - HScroll1.Height
Picture2.Move 0, 0
HScroll1.Top = Picture1.Height
HScroll1.Left = 0
HScroll1.Width = Picture1.Width
VScroll1.Top = 0
VScroll1.Left = Picture1.Width
VScroll1.Height = Picture1.Height
HScroll1.Max = Picture2.Width - Picture1.Width
VScroll1.Max = Picture2.Height - Picture1.Width
'檢查是否需要滾動條。
VScroll1.Visible = (Picture1.Height < _
Picture2.Height)
HScroll1.Visible = (Picture1.Width < _
Picture2.Width)
End Sub
uj5u.com熱心網友回復:
一種是滾動。比如界面上最多顯示20個資料,左右滾動時,不停地變資料,但一直取20個。uj5u.com熱心網友回復:
百度一下echart,用它來實作效果更好!uj5u.com熱心網友回復:
scrollbar+mschart,滾動以后從資料庫中加載對應的歷史資料。表面上看是整個圖有全部的資料,實際上沒有必要,滾動條滾動到哪里,加載那一段資料就可以了。uj5u.com熱心網友回復:
資料多的話用不著保留所有資料,只要顯示區域要顯示的資料保留就可以了uj5u.com熱心網友回復:
Option Explicit
Const DataDisplayCount = 100 '看你想要顯示多少個資料
Dim data As New Collection
Private Sub Form_Load()
Dim i As Integer
'資料初始化
For i = 1 To DataDisplayCount
data.Add 0
Next
'開啟timer模擬資料輸入
Timer1.Interval = 100
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
'模擬資料獲取到的時候的處理
Dim i As Integer
Dim X As Long, Y As Long
Dim lastX As Long, lastY As Long
data.Add Rnd '模擬隨機獲取到一個數值,這里產生一個0~1的數,用來標書資料點Y坐標占picture高度的百分比
data.Remove 1 '把超過顯示數量的資料洗掉
'準備重繪的坐標起始點,原點在Picture的左下角。橫坐標為時間,顯示DataDisplayCount個資料,縱坐標為第一個點資料的Y坐標。Y坐標的演算法自己去定義,我這怎么簡單怎么來
lastX = 0
lastY = Picture1.ScaleHeight - Picture1.ScaleHeight * data(1)
Picture1.Cls '繪圖區域清空
For i = 2 To data.Count
X = X + Picture1.ScaleWidth / (DataDisplayCount - 1)
Y = Picture1.ScaleHeight - Picture1.ScaleHeight * data(i)
Picture1.Line (lastX, lastY)-(X, Y)
lastX = X
lastY = Y
Next
End Sub
簡單自繪一段。給你一個樣例:一個表單,扔一個picturebox(初始化為扁長一點)一個timer。然后黏貼上面的代碼試試
uj5u.com熱心網友回復:
墳頭的草都比人高了。。。
uj5u.com熱心網友回復:
靠,這是誰挖出來的
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/48540.html
標籤:VB基礎類
