⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmterminal.frm

📁 rs232通信调试
💻 FRM
📖 第 1 页 / 共 2 页
字号:
Private Sub mnuOpenLog_Click()
Dim replace
On Error Resume Next
OpenLog.Flags = cdlOFNHideReadOnly Or cdlOFNExplorer
OpenLog.CancelError = True
'从用户处获得登录文件名称。
OpenLog.DialogTitle = "Open Communications Log File"
OpenLog.Filter = "登录文件(*.LOG)|*.log|所有文件(*.*)|*.*"
Do
  OpenLog.FileName = ""
  OpenLog.ShowOpen
  If Err = cdlCancel Then Exit Sub
   Temp = OpenLog.FileName
' 如果文件已经存在, 询问用户是否希望覆盖此文件或在此文件基础上添加内容。
  Ret = Len(Dir$(Temp))
  If Err Then
       MsgBox Error$, 48
  End If
  If Ret Then
      replace = MsgBox("文件已经存在,是否覆盖" + Temp + "?", 35)
  Else
      replace = 0
  End If
  Loop While replace = 2
    ' 用户单击“确定”按钮, 则删除此文件。

  If replace = 6 Then
        Kill Temp
        If Err Then
           MsgBox Error$, 48
          Exit Sub
        End If
  End If
     ' 打开登录文件。
  hLogFile = FreeFile
  Open Temp For Binary Access Write As hLogFile
  If Err Then
        MsgBox Error$, 48
        Close hLogFile
        hLogFile = 0
        Exit Sub
  Else
        ' 到文件结尾处来添加新数据。
      Seek hLogFile, LOF(hLogFile) + 1
  End If
  frmTerminal.Caption = "VISIUAL BASIC 终端" + OpenLog.FileTitle
  mnuOpenLog.Enabled = False
  tbrToolBar.Buttons("OpenLogFile").Enabled = False
  mnuCloseLog.Enabled = True
  tbrToolBar.Buttons("CloseLogFile").Enabled = True
  
End Sub


Private Sub mnuProperties_Click()
'弹出通讯属性设置对话框
frmProperties.Show vbModal
End Sub

Private Sub mnuSendText_Click()
Dim hSend, BSize, LF&
On Error Resume Next
mnuSendText.Enabled = False
tbrToolBar.Buttons("TransmitTextFile").Enabled = False
'从用户处获得文本文件名称。
OpenLog.DialogTitle = "Send Text File"
OpenLog.Filter = "Text Files(*.TXT)|*.txt|All Files(*.*)|*.*"
Do
      OpenLog.CancelError = True
      OpenLog.FileName = ""
      OpenLog.ShowOpen
      If Err = cdlCancel Then
           mnuSendText.Enabled = True
           tbrToolBar.Buttons("TransmitTextFile").Enabled = True
           Exit Sub
      End If
      Temp = OpenLog.FileName
      ' 如果文件不存在,则返回。
      Ret = Len(Dir$(Temp))
      If Err Then
           MsgBox Error$, 48
           mnuSendText.Enabled = True
          Exit Sub
      End If
      If Ret Then
           Exit Do
      Else
           MsgBox Temp + "没有找到!", 48
      End If
Loop
'打开登录文件。
hSend = FreeFile
Open Temp For Binary Access Read As hSend
If Err Then
     MsgBox Error$, 48
Else
      ' 显示“取消”对话框。
     CancelSend = False
     frmCancelSend.label1.Caption = "正在发送文本文件:" + Temp
     frmCancelSend.Show
    '把文件读到传输缓冲区尺寸的块中。
     BSize = MSComm1.OutBufferSize
     LF& = LOF(hSend)
     Do Until EOF(hSend) Or CancelSend
     '在结尾处不要读太多数据。
         If LF& - Loc(hSend) <= BSize Then
             BSize = LF& - Loc(hSend) + 1
         End If
         '读数据块。
         Temp = Space$(BSize)
          Get hSend, , Temp
         '传输此块。
          MSComm1.Output = Temp
         If Err Then
              MsgBox Error$, 48
              Exit Do
          End If
          '等待所有数据被发送。
          Do
             Ret = DoEvents()
          Loop Until MSComm1.OutBufferCount = 0 Or CancelSend
     Loop
End If
Close hSend
mnuSendText.Enabled = True
tbrToolBar.Buttons("TransmitTextFile").Enabled = True
CancelSend = True
frmCancelSend.Hide
End Sub

Private Sub mnuSettings_Click()
'弹出通讯端口参数设置对话框
frmSettings.Show vbModal
End Sub

Private Sub MSComm1_OnComm()
' OnComm 事件被用于捕获 communications 事件及错误。
Dim EVMsg$   '存放事件消息的字符串
Dim ERMsg$   '存放错误消息的字符串
'根据事件消息进行分支
Select Case MSComm1.CommEvent
     '以下为事件消息
     Case comEvReceive
          Dim Buffer As Variant
          Buffer = MSComm1.Input
          Debug.Print "Receive-" & StrConv(Buffer, vbUnicode)
          ShowData txtTerm, (StrConv(Buffer, vbUnicode))
     Case comEvSend
     Case comEvCTS
          EVMsg$ = "CTS信号发生改变!"
     Case comEvDSR
          EVMsg$ = "DSR信号发生改变!"
     Case comEvCD
          EVMsg$ = "CD信号发生改变!"
     Case comEvRing
          EVMsg$ = "检测到电话振铃!"
     Case comEvEOF
          EVMsg$ = "收到文件结束符!"
     '以下为错误消息
     Case comBreak
          ERMsg$ = "收到中断信号!"
     Case comCDTO
          ERMsg$ = "CD超时!"
    Case comCTSTO
          ERMsg$ = "CTS超时!"
    Case comDCB
          ERMsg$ = "Error retrieving DCB"
    Case comDSRTO
          ERMsg$ = "DSR超时!"
    Case comFrame
         ERMsg$ = "帧出错!"
    Case comOverrun
         ERMsg$ = "端口超限!"
    Case comRxOver
         ERMsg$ = "接收缓冲区溢出!"
    Case comRxParity
         ERMsg$ = "校验错!"
    Case comTxFull
         ERMsg$ = "发送缓冲区溢出!"
    Case Else
         ERMsg$ = "未知事件或错误!"
End Select
If Len(EVMsg$) Then
     ' 在状态栏中显示事件信息。
        sbrStatus.Panels("Status").Text = "Status: " & EVMsg$
        ' 使计时器可用,这样在2秒钟之后状态栏中的信息将被清除。
        Timer2.Enabled = True
ElseIf Len(ERMsg$) Then
        ' 在状态栏中显示事件信息。
        sbrStatus.Panels("Status").Text = "状态: " & ERMsg$
        
        ' 在告警信息对话框中显示错误信息。
    Beep
    Ret = MsgBox(ERMsg$, 1, "按下取消退出,确定忽略错误。")
    ' 如果用户单击“取消” (2)...
     If Ret = 2 Then
         MSComm1.PortOpen = False ' 关闭端口且退出。
    End If
    ' 使计时器可用,这样在2秒钟之后状态栏中的信息将被清除。
    Timer2.Enabled = True
End If
End Sub
Private Static Sub ShowData(Term As Control, Data As String)
' 这个过程添加数据到 Term 控件的 Text 属性。
' 它也过滤控制字符,如空格,
' 回车, 换行, 并且写数据到
' 一个打开的登录文件。
' 空格符从它的左侧删除,
' 在 Text 属性, 或者从传递字符串中。
' 换行符将被修改为回车。
' Term 控件的 Text 属性的尺寸也被监视
' 使它不能超过 MAXTERMSIZE 的要求。
On Error GoTo Handler
    Const MAXTERMSIZE = 16000
    Dim TermSize As Long, i
    
    ' 确定现存的文本不会太大。
    TermSize = Len(Term.Text)
    If TermSize > MAXTERMSIZE Then
       Term.Text = Mid$(Term.Text, 4097)
       TermSize = Len(Term.Text)
    End If

    ' 指到 Term 的数据的结尾处。
    Term.SelStart = TermSize

    ' 过滤/处理空格符。
    Do
       i = InStr(Data, Chr$(8))
       If i Then
          If i = 1 Then
             Term.SelStart = TermSize - 1
             Term.SelLength = 1
             Data = Mid$(Data, i + 1)
          Else
             Data = Left$(Data, i - 2) & Mid$(Data, i + 1)
          End If
       End If
    Loop While i

    ' 除去换行符。
    Do
       i = InStr(Data, Chr$(10))
       If i Then
          Data = Left$(Data, i - 1) & Mid$(Data, i + 1)
       End If
    Loop While i

    ' 确定所有的回车都包含换行符。
    i = 1
    Do
       i = InStr(i, Data, Chr$(13))
       If i Then
          Data = Left$(Data, i) & Chr$(10) & Mid$(Data, i + 1)
          i = i + 1
       End If
    Loop While i

    ' 添加过滤的数据到 SelText 属性。
    Term.SelText = Data
  
    ' 如果需要记录数据到文件
    If hLogFile Then
       i = 2
       Do
          Err = 0
          Put hLogFile, , Data
          If Err Then
             i = MsgBox(Error$, 21)
             If i = 2 Then
                mnuCloseLog_Click
             End If
          End If
       Loop While i <> 2
    End If
    Term.SelStart = Len(Term.Text)
Exit Sub

Handler:
    MsgBox Error$
    Resume Next
End Sub

Private Sub tbrToolBar_ButtonClick(ByVal Button As MSComctlLib.Button)
'处理工具栏上的按扭被点击的事件
Select Case Button.Key
Case "OpenLogFile"
    Call mnuOpenLog_Click
Case "CloseLogFile"
    Call mnuCloseLog_Click
Case "DialPhoneNumber"
    Call mnuDial_Click
Case "HangUpPhone"
    Call mnuHangup_Click
Case "Properties"
    Call mnuProperties_Click
Case "TransmitTextFile"
    Call mnuSendText_Click
End Select
End Sub

Private Sub Timer1_Timer()
'计时器Timer1的作用是在状态栏上显示连接时间
sbrStatus.Panels("ConnectTime").Text = Format(Now - StartTime, "hh:mm:ss") & " "
End Sub

Private Sub Timer2_Timer()
'定时器Timer2显示当前的通讯状态
sbrStatus.Panels("Status").Text = "通讯状态:"
Timer2.Enabled = False
End Sub

Private Sub txtTerm_KeyPress(KeyAscii As Integer)
' 击键在这里被捕获,他们被送到 MSComm 控件
' 然后经由OnComm (comEvReceive) 事件返回, 并且
' 和 ShowData 过程被显示。
If MSComm1.PortOpen Then
    MSComm1.Output = Chr$(KeyAscii)
    If Not Echo Then
        txtTerm.SelStart = Len(txtTerm)
        KeyAscii = 0
    End If
End If
End Sub
Private Sub StartTiming()
'调用此函数启动连接时间计时器
    StartTime = Now
    Timer1.Enabled = True
End Sub
Private Sub Stoptiming()
'调用此函数停止计时
    sbrStatus.Panels("ConnectTime").Text = ""
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -