注册 登录
编程论坛 VB6论坛

pic.line 画出来的为什么是一个个点呢

wxe0510 发布于 2015-04-26 14:23, 1018 次点击
Private Sub DrawRealLine(picX As PictureBox, TimeCountX As Integer, DataFromComX As Integer, DataFromComLastX As Integer)

If TimeCountX - 1 > 0 And (TimeCountX - 1) * 15 < pic.Width Then
picX.Line ((TimeCountX - 1) * 15, DataFromComLastX * 70)-(TimeCountX * 15, DataFromComX * 70), vbBlue
End If
If (TimeCountX - 1) * 15 > pic.Width Then
TimeCount = 0
pic.Cls
End If

End Sub
这是画实时曲线的函数,理论上画出来的应该是线而不是点,但我画出来的却是一个个点,怎么回事呢?


Option Explicit

Dim DataFromCom As Integer
Dim DataFromComLast As Integer
Dim TimeCount As Integer


Private Sub Check1_Click()
If Check1.Value = 1 Then
MSComm1.InBufferSize = 1024
MSComm1.InBufferCount = 0
MSComm1.InputMode = 1
= 3
MSComm1.Settings = "9600,N,8,1"

Check2.Enabled = False

End If
If Check1.Value = 0 Then
Timer1.Enabled = False
Check2.Enabled = True

End If
End Sub

Private Sub Check2_Click()

If Check2.Value = 1 Then
MSComm1.InBufferSize = 1
MSComm1.InBufferCount = 0
MSComm1.InputMode = comInputModeText
= 2
MSComm1.Settings = "9600,N,8,1"

Check1.Enabled = False

End If
If Check2.Value = 0 Then
Timer1.Enabled = False
Check1.Enabled = True

End If
End Sub

Private Sub Command1_Click(Index As Integer)
'Timer1.Enabled = True
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
End Sub

Private Sub Command2_Click(Index As Integer)
Timer1.Enabled = False
MSComm1.PortOpen = False

End Sub

Private Sub Command3_Click()
Unload Form1
End Sub
Private Sub Form_Unload(Cancel As Integer)
    If MSComm1.PortOpen = True Then
    MSComm1.PortOpen = False
    End If
End Sub

Private Sub Form_Load()
Timer1.Interval = 1
Timer1.Enabled = False
PicScale pic

End Sub
Private Sub PicScale(picX As PictureBox)
picX.Scale (0, 8750)-(picX.ScaleWidth, -1400)
End Sub

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

If TimeCountX - 1 > 0 And (TimeCountX - 1) * 15 < pic.Width Then
picX.Line ((TimeCountX - 1) * 15, DataFromComLastX * 70)-(TimeCountX * 15, DataFromComX * 70), vbBlue
End If
If (TimeCountX - 1) * 15 > pic.Width Then
TimeCount = 0
pic.Cls
End If

End Sub

Private Sub MSComm1_OnComm()
Dim byte1() As Byte

Dim a As Byte
Dim b As Byte
Dim s As Integer
If MSComm1.InBufferCount > 0 Then
byte1 = MSComm1.Input

  a = byte1(0)
  b = byte1(1)
  s = a * 256 + b
  Text1.Text = s
  DataFromCom = Text1
  DataFromComLast = DataFromCom
  TimeCount = TimeCount + 1
  DrawRealLine pic, TimeCount, DataFromCom, DataFromComLast



End If
End Sub  这是整段编程
只有本站会员才能查看附件,请 登录
4 回复
#2
xzlxzlxzl2015-04-26 15:33
没有数据验证,是一个点的原因可能在判断语句,即“If TimeCountX - 1 > 0 And (TimeCountX - 1) * 15 < pic.Width Then”这一句,可以单步调试下就知道了。只有某一次没画点才会造成线不连续。如果把语句稍微改下,应该画的就是线,改动如下:
picX.Line -(TimeCountX * 15, DataFromComX * 70), vbBlue  '未验证,好像这样会从上一次的坐标到本次坐标划线,如果没哟上一次坐标,则默认上一次坐标为0,0



[ 本帖最后由 xzlxzlxzl 于 2015-4-26 16:30 编辑 ]
#3
lianyicq2015-04-27 09:24
回复 楼主 wxe0510
  a = byte1(0)
  b = byte1(1)
  s = a * 256 + b
你确定下位机是先传高八位?一般是低字节中前,高字节在后.建议调试的时候,开一文本框,实时显示串口来的数据.便于查错.
用你的坐标系设定、画线代码,画了六个点。没发现问题。只有根据来的数据逐步分析。建议定义一个横轴缩放变量。
只有本站会员才能查看附件,请 登录


#4
wxe05102015-04-27 16:24
以下是引用xzlxzlxzl在2015-4-26 15:33:20的发言:

没有数据验证,是一个点的原因可能在判断语句,即“If TimeCountX - 1 > 0 And (TimeCountX - 1) * 15 < pic.Width Then”这一句,可以单步调试下就知道了。只有某一次没画点才会造成线不连续。如果把语句稍微改下,应该画的就是线,改动如下:
picX.Line -(TimeCountX * 15, DataFromComX * 70), vbBlue  '未验证,好像这样会从上一次的坐标到本次坐标划线,如果没哟上一次坐标,则默认上一次坐标为0,0

确实这么做画出来的是线,但我并不希望第一次坐标是(0,0) 怎么办?
#5
wxe05102015-04-28 12:17
谢谢楼上各位,问题已经解决了
1