Declare Function BitBlt Lib "GDI32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal DrawStyle As Long) As Long
Global S As Long '量程
Global L As Long '上一次的纵坐标值
Global T As Integer '上一次时间值(分)
Option Explicit
Private Sub Command1_Click()
Timer1.Enabled = True
Timer1.Interval = 1000
End Sub
这个是别人的.毛病是Private Sub Form_Load()With Form1
.Top = 0
.Left = 0
.Width = Screen.Width
.Height = Screen.Height
End With
Call picsettingPicture1.AutoRedraw = False '曲线不重画
Picture1.ScaleMode = 3 '以象素方式(Pixel)
L = -1 '设置初值
S = 400
T = -1End Sub
Sub picsetting()
Dim i As Integer
Picture1.BackColor = RGB(255, 255, 255)
Picture1.Scale (-50, 1000)-(1000, -200)
Picture1.DrawWidth = 2
Picture1.Line (0, 900)-(900, 900)
Picture1.Line (0, 900)-(0, 0)
Picture1.Line -(900, 0)
Picture1.Line (900, 0)-(900, 900)
Picture1.CurrentX = 900
Picture1.CurrentY = 0
Picture1.FontSize = 14
Picture1.ForeColor = RGB(255, 0, 0)
Picture1.Print " t"
Picture1.CurrentX = -30
Picture1.CurrentY = 920
Picture1.Print " P"
Picture1.DrawWidth = 1
For i = 1 To 17
Picture1.Line (50 * i, 900)-(50 * i, 0), RGB(153, 153, 153)
Next i
For i = 1 To 17
Picture1.Line (0, 50 * i)-(900, 50 * i), RGB(153, 153, 153)
Next i
End Sub '
Private Sub Timer1_Timer()
Dim w As Long, h As Long, y1 As Long, Data As Long
Dim hBmp As Long, ShowMode As Long, ii As Long, t1 As Integer
static i As Integer, Y As Double
w = Picture1.Width
h = Picture1.Height
hBmp = Picture1.hDC
ShowMode = &HCC0020 'ROP模式(复制)
'Data = Get_RealDatabase() '从实时数据库取当前监控值 Data = 200+i
y1 = (S - Data) / S * h '根据量程转变成具体坐标
ii = BitBlt(hBmp, 0, 0, w - 1, h, hBmp, 1, 0, ShowMode) '整个曲线右移一个像素点
Picture1.Line (10, Y)-(w, y1), RGB(0, 255, 0)
'Picture1.Line (w - 1, Y)-(w, y1), RGB(0, 255, 0)
Y = y1
t1 = Val(Mid$(Time$, 3, 2))
If T <> t1 Then '在曲线下方显示时间(用分表示)
Picture1.CurrentX = w - 16
Picture1.CurrentY = h - 8
Picture1.Print Mid$(Time$, 1, 5)
T = t1
End If
End Sub
毛病是
Picture1.AutoRedraw = False '曲线不重画
导致在窗口切换时,曲线被隐藏.
不知道有没有什么好的方法
Global S As Long '量程
Global L As Long '上一次的纵坐标值
Global T As Integer '上一次时间值(分)
Option Explicit
Private Sub Command1_Click()
Timer1.Enabled = True
Timer1.Interval = 1000
End Sub
这个是别人的.毛病是Private Sub Form_Load()With Form1
.Top = 0
.Left = 0
.Width = Screen.Width
.Height = Screen.Height
End With
Call picsettingPicture1.AutoRedraw = False '曲线不重画
Picture1.ScaleMode = 3 '以象素方式(Pixel)
L = -1 '设置初值
S = 400
T = -1End Sub
Sub picsetting()
Dim i As Integer
Picture1.BackColor = RGB(255, 255, 255)
Picture1.Scale (-50, 1000)-(1000, -200)
Picture1.DrawWidth = 2
Picture1.Line (0, 900)-(900, 900)
Picture1.Line (0, 900)-(0, 0)
Picture1.Line -(900, 0)
Picture1.Line (900, 0)-(900, 900)
Picture1.CurrentX = 900
Picture1.CurrentY = 0
Picture1.FontSize = 14
Picture1.ForeColor = RGB(255, 0, 0)
Picture1.Print " t"
Picture1.CurrentX = -30
Picture1.CurrentY = 920
Picture1.Print " P"
Picture1.DrawWidth = 1
For i = 1 To 17
Picture1.Line (50 * i, 900)-(50 * i, 0), RGB(153, 153, 153)
Next i
For i = 1 To 17
Picture1.Line (0, 50 * i)-(900, 50 * i), RGB(153, 153, 153)
Next i
End Sub '
Private Sub Timer1_Timer()
Dim w As Long, h As Long, y1 As Long, Data As Long
Dim hBmp As Long, ShowMode As Long, ii As Long, t1 As Integer
static i As Integer, Y As Double
w = Picture1.Width
h = Picture1.Height
hBmp = Picture1.hDC
ShowMode = &HCC0020 'ROP模式(复制)
'Data = Get_RealDatabase() '从实时数据库取当前监控值 Data = 200+i
y1 = (S - Data) / S * h '根据量程转变成具体坐标
ii = BitBlt(hBmp, 0, 0, w - 1, h, hBmp, 1, 0, ShowMode) '整个曲线右移一个像素点
Picture1.Line (10, Y)-(w, y1), RGB(0, 255, 0)
'Picture1.Line (w - 1, Y)-(w, y1), RGB(0, 255, 0)
Y = y1
t1 = Val(Mid$(Time$, 3, 2))
If T <> t1 Then '在曲线下方显示时间(用分表示)
Picture1.CurrentX = w - 16
Picture1.CurrentY = h - 8
Picture1.Print Mid$(Time$, 1, 5)
T = t1
End If
End Sub
毛病是
Picture1.AutoRedraw = False '曲线不重画
导致在窗口切换时,曲线被隐藏.
不知道有没有什么好的方法
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货