DDE to Visual Basic
This sample illustrates the use of DDE and Visual Basic to control a variety of Emulator functions. It includes: connection, logon and off, and generic command functions.
Contents of DDE_4.BAS
Option Explicit ' LinkMode (forms and controls) Global Const NONE = 0 Global Const LINK_MANUAL = 2 ' Run time errors Global Const NO_APP_RESPONDED = 282 Global Const MB_YESNO = 4 Global Const MB_ICONQUESTION = 32 Global Const IDYES = 6
Contents of DDE_4.FRM
Option Explicit
Option Compare Text
'
Dim appChangeFlag As Integer
Dim Connected As Integer
Dim CheckFlag As Boolean
'
Private Sub cboAppName_Click()
    If Connected Then cmdConnect.Value = True
End Sub
Private Sub cboAppName_LostFocus()
    If appChangeFlag Then
        appChangeFlag = False
        If Connected Then cmdConnect.Value = True
    End If
End Sub
Private Sub cboExecuteString_Change()
    cmdExecute.Enabled = (Len(cboExecuteString.Text) > 0)
End Sub
Private Sub cboExecuteString_Click()
    cmdExecute.Enabled = (Len(cboExecuteString.Text) > 0)
End Sub
Private Sub cboItem_Change()
On Error Resume Next
    txtData.LinkItem = cboItem.Text
End Sub
Private Sub cboItem_Click()
    txtData.LinkItem = cboItem.Text
End Sub
Private Sub Check1_Click()
On Error Resume Next
    If Check1.Value = 0 Then
        CheckFlag = False
    Else
        CheckFlag = True
    End If
End Sub
Private Sub cmdConnect_Click()
    If Not Connected Then
        txtData.Text = ""
        Select Case MakeConnection()
            Case 0
                ConnectState True
            Case NO_APP_RESPONDED
                MsgBox "Sorry, can't connect."
        End Select
    Else
        Disconnect txtData
        ConnectState False
    End If
End Sub
Private Sub CmdExecute_Click()
    Execute_Sub (cboExecuteString.Text)
End Sub
Private Sub cmdExit_Click()
    Unload frmMain
    End
End Sub
Private Sub cmdLogin_Click()
Dim tMousePointer As Integer
    tMousePointer = Screen.MousePointer
    Screen.MousePointer = 11
    Execute_Sub ("SEND ""HELLO " & Text1.Text & """")
    If (Trim(Text2.Text) <> "") Then
        Execute_Sub ("WAIT 00:00:02 FOR ""^Q""")
        Execute_Sub ("SEND """ & Text2.Text & """")
    End If
    If (Trim(Text3.Text) <> "") Then
        Execute_Sub ("WAIT 00:00:02 FOR ""^Q""")
        Execute_Sub ("SEND """ & Text3.Text & """")
    End If
    Screen.MousePointer = tMousePointer
End Sub
Private Sub cmdLogout_Click()
    Execute_Sub ("SEND BYE")
End Sub
Private Sub cmdPoke_Click()
On Error Resume Next
    txtData.LinkPoke
    If Err Then MsgBox Error
End Sub
Private Sub cmdRequest_Click()
On Error Resume Next
    txtData.LinkRequest
End Sub
Private Sub ConnectState(State As Integer)
Dim i As Integer
    If State Then
        cmdConnect.Caption = "Disconnect"
    Else
        cmdConnect.Caption = "Connect"
    End If
        
    Connected = State
    cmdRequest.Enabled = State
    cmdPoke.Enabled = State
End Sub
Private Function CreateLink(Ctl As Control, appname As String, item 
As String) As Integer
On Error Resume Next
    Ctl.LinkMode = NONE
    Ctl.LinkTopic = appname & "|S92"
    Ctl.LinkItem = item
    Ctl.LinkMode = LINK_MANUAL
    CreateLink = Err
    If Err = 0 Then
        Ctl.LinkRequest
    End If
End Function
Private Sub Disconnect(Ctl As Control)
Dim tempTimeOutVal
On Error Resume Next
    tempTimeOutVal = Ctl.LinkTimeout
    Ctl.LinkTimeout = 1
    Ctl.LinkMode = NONE
    Ctl.LinkTimeout = tempTimeOutVal
End Sub
Private Sub Execute_Sub(cmdstr As String)
On Error Resume Next
Dim tLinkItem As String
Dim tText As String
Dim tcmdOK As Integer
Dim tcmdCancel As Integer
Dim tMousePointer As Integer
    If (Len(Trim(cmdstr)) < 1) Then Exit Sub
    
    tLinkItem = frmMain.txtData.LinkItem
    tText = frmMain.txtData.Text
    tcmdOK = cmdExecute.Enabled
    tMousePointer = Screen.MousePointer
    frmMain.txtData.LinkItem = "BUSYFLAG"
    frmMain.txtData.Text = "Done"
    frmMain.txtData.LinkPoke
    frmMain.txtData.Text = " "
    Screen.MousePointer = 11
    cmdExecute.Enabled = False
    
    frmMain.txtData.LinkExecute cmdstr
    
    If CheckFlag Then
        While (frmMain.txtData.Text <> "Done")
            frmMain.txtData.LinkRequest
        Wend
    End If
    frmMain.txtData.LinkItem = tLinkItem
    frmMain.txtData.Text = tText
    cmdExecute.Enabled = tcmdOK
    Screen.MousePointer = tMousePointer
End Sub
Private Sub Form_Load()
    cboAppName.AddItem "MS92"
    cboExecuteString.AddItem "SEND LISTF A@"
    cboExecuteString.AddItem "SEND SHOWME"
    cboExecuteString.AddItem "SEND HELLO MGR.MINISOFT"
    CheckFlag = False
End Sub
Private Sub Form_Unload(Cancel As Integer)
    Disconnect txtData
End Sub
Private Function MakeConnection() As Integer
Dim ConnectTxt As Integer
    ConnectTxt = CreateLink(txtData, (cboAppName.Text), 
 (cboItem.Text))
    
    If ConnectTxt = NO_APP_RESPONDED Then
        MakeConnection = NO_APP_RESPONDED
    ElseIf ConnectTxt = 0 Then
        MakeConnection = 0
    Else
        MakeConnection = ConnectTxt
    End If
End Function
Private Sub txtData_LinkClose()
    ConnectState False
End Sub
Private Sub txtData_LinkError(LinkErr As Integer)
Dim Msg
    Select Case LinkErr
        Case 1
            Msg = "Data in wrong format."
        Case 6
            Msg = "Error # 6."
        Case 7
            Msg = "Error # 7."
        Case 8
            Msg = "Error # 8."
        Case 11
            Msg = "Out of memory for DDE."
    End Select
    MsgBox Msg, 48, "MyTextBox"
End Sub
											