VB.Net Tutorial/Windows/Microsoft Agent — различия между версиями

Материал из VB Эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Текущая версия на 15:56, 26 мая 2010

Demonstrates microsoft agent

<source lang="vbnet">"Visual Basic.NET How to Program, Second Edition "by Harvey M. Deitel (Author), Paul J. Deitel (Author), Tem R. Nieto (Author) " Publisher: Prentice Hall; 2 edition (December 11, 2001) " Language: English " ISBN-10: 0130293636 " ISBN-13: 978-0130293633 Imports System.IO Imports System.Collections Imports System.Windows.Forms Public Class FrmAgent

  Inherits System.Windows.Forms.Form
  " options
  Friend WithEvents GroupBox1 As GroupBox
  Friend WithEvents cmdSpeak As Button
  Friend WithEvents mainAgent As AxAgentObjects.AxAgent
  " input boxes
  Friend WithEvents txtLocation As TextBox
  Friend WithEvents txtSpeech As TextBox
  Friend WithEvents characterCombo As System.Windows.Forms.ruboBox
  Friend WithEvents actionsCombo As System.Windows.Forms.ruboBox
  " current agent object
  Private mSpeaker As AgentObjects.IAgentCtlCharacter
  1. Region " Windows Form Designer generated code "
  Public Sub New()
     MyBase.New()
     "This call is required by the Windows Form Designer.
     InitializeComponent()
     "Add any initialization after the InitializeComponent() call
  End Sub
  "Form overrides dispose to clean up the component list.
  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
     If disposing Then
        If Not (components Is Nothing) Then
           components.Dispose()
        End If
     End If
     MyBase.Dispose(disposing)
  End Sub
  "Required by the Windows Form Designer
  Private components As System.ruponentModel.IContainer
  "NOTE: The following procedure is required by the Windows Form Designer
  "It can be modified using the Windows Form Designer.  
  "Do not modify it using the code editor.
  <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
     Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(FrmAgent))
     Me.txtLocation = New System.Windows.Forms.TextBox()
     Me.GroupBox1 = New System.Windows.Forms.GroupBox()
     Me.characterCombo = New System.Windows.Forms.ruboBox()
     Me.cmdSpeak = New System.Windows.Forms.Button()
     Me.txtSpeech = New System.Windows.Forms.TextBox()
     Me.actionsCombo = New System.Windows.Forms.ruboBox()
     Me.mainAgent = New AxAgentObjects.AxAgent()
     Me.GroupBox1.SuspendLayout()
     CType(Me.mainAgent, System.ruponentModel.ISupportInitialize).BeginInit()
     Me.SuspendLayout()
     "
     "txtLocation
     "
     Me.txtLocation.Location = New System.Drawing.Point(16, 24)
     Me.txtLocation.Name = "txtLocation"
     Me.txtLocation.Size = New System.Drawing.Size(272, 20)
     Me.txtLocation.TabIndex = 0
     Me.txtLocation.Text = "C:\WINNT\msagent\chars\"
     "
     "GroupBox1
     "
     Me.GroupBox1.Controls.AddRange(New System.Windows.Forms.Control() {Me.characterCombo, Me.txtLocation})
     Me.GroupBox1.Location = New System.Drawing.Point(8, 104)
     Me.GroupBox1.Name = "GroupBox1"
     Me.GroupBox1.Size = New System.Drawing.Size(440, 56)
     Me.GroupBox1.TabIndex = 1
     Me.GroupBox1.TabStop = False
     Me.GroupBox1.Text = "Charcter Name/Location"
     "
     "characterCombo
     "
     Me.characterCombo.Enabled = False
     Me.characterCombo.Items.AddRange(New Object() {"Genie", "Merlin", "Peedy", "Robby"})
     Me.characterCombo.Location = New System.Drawing.Point(304, 24)
     Me.characterCombo.Name = "characterCombo"
     Me.characterCombo.Size = New System.Drawing.Size(128, 21)
     Me.characterCombo.TabIndex = 1
     Me.characterCombo.Text = "Select A Character"
     "
     "cmdSpeak
     "
     Me.cmdSpeak.Enabled = False
     Me.cmdSpeak.Location = New System.Drawing.Point(328, 24)
     Me.cmdSpeak.Name = "cmdSpeak"
     Me.cmdSpeak.Size = New System.Drawing.Size(104, 32)
     Me.cmdSpeak.TabIndex = 3
     Me.cmdSpeak.Text = "Speak"
     "
     "txtSpeech
     "
     Me.txtSpeech.Enabled = False
     Me.txtSpeech.Location = New System.Drawing.Point(8, 16)
     Me.txtSpeech.Multiline = True
     Me.txtSpeech.Name = "txtSpeech"
     Me.txtSpeech.Size = New System.Drawing.Size(280, 80)
     Me.txtSpeech.TabIndex = 5
     Me.txtSpeech.Text = ""
     "
     "actionsCombo
     "
     Me.actionsCombo.Enabled = False
     Me.actionsCombo.Location = New System.Drawing.Point(312, 72)
     Me.actionsCombo.Name = "actionsCombo"
     Me.actionsCombo.Size = New System.Drawing.Size(128, 21)
     Me.actionsCombo.TabIndex = 7
     Me.actionsCombo.Text = "Select an Action"
     "
     "mainAgent
     "
     Me.mainAgent.Enabled = True
     Me.mainAgent.Location = New System.Drawing.Point(304, 24)
     Me.mainAgent.Name = "mainAgent"
     Me.mainAgent.OcxState = CType(resources.GetObject("mainAgent.OcxState"), System.Windows.Forms.AxHost.State)
     Me.mainAgent.Size = New System.Drawing.Size(32, 32)
     Me.mainAgent.TabIndex = 8
     "
     "FrmAgent
     "
     Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
     Me.ClientSize = New System.Drawing.Size(448, 165)
     Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.mainAgent, Me.actionsCombo, Me.txtSpeech, Me.cmdSpeak, Me.GroupBox1})
     Me.Name = "FrmAgent"
     Me.Text = "Microsoft Agent"
     Me.GroupBox1.ResumeLayout(False)
     CType(Me.mainAgent, System.ruponentModel.ISupportInitialize).EndInit()
     Me.ResumeLayout(False)
  End Sub
  1. End Region
  " keyDown event handler for locationTextBox
  Private Sub txtLocation_KeyDown(ByVal sender As _
     Object, ByVal e As System.Windows.Forms.KeyEventArgs) _
     Handles txtLocation.KeyDown
     If e.KeyCode = Keys.Enter Then
        " set character location to text box value
        Dim location As String = txtLocation.Text
        " initialize characters
        Try
           " load characters into agent object
           mainAgent.Characters.Load( _
              "Genie", location + "Genie.acs")
           mainAgent.Characters.Load( _
              "Merlin", location + "Merlin.acs")
           mainAgent.Characters.Load( _
              "Peedy", location + "Peedy.acs")
           mainAgent.Characters.Load( _
              "Robby", location + "Robby.acs")
           " disable TextBox location and enable other controls
           txtLocation.Enabled = False
           txtSpeech.Enabled = True
           cmdSpeak.Enabled = True
           characterCombo.Enabled = True
           actionsCombo.Enabled = True
           " set current character to Genie and show
           mSpeaker = mainAgent.Characters("Genie")
           GetAnimationNames() " obtain animation name list
           mSpeaker.Show(0)
        Catch fileNotFound As FileNotFoundException
           MessageBox.Show("Invalid character location", _
              "Error", MessageBoxButtons.OK, _
              MessageBoxIcon.Error)
        End Try
     End If
  End Sub " txtLocation_KeyDown
  " speak button event handler
  Private Sub cmdSpeak_Click(ByVal sender As Object, _
     ByVal e As System.EventArgs) Handles cmdSpeak.Click
     " if TextBox is empty, have character ask
     " user to type words into TextBox, otherwise
     " have character say words in TextBox
     If txtSpeech.Text = "" Then
        mSpeaker.Speak( _
           "Please type the words you want me to speak", "")
     Else
        mSpeaker.Speak(txtSpeech.Text, "")
     End If
  End Sub " cmdSpeak_Click
  " click event for agent
  Private Sub mainAgent_ClickEvent(ByVal sender As Object, _
     ByVal e As AxAgentObjects._AgentEvents_ClickEvent) _
     Handles mainAgent.ClickEvent
     mSpeaker.Play("Confused")
     mSpeaker.Speak("Why are you poking me?", "")
     mSpeaker.Play("RestPose")
  End Sub " mainAgent_ClickEvent
  " comboBox changed event, switch active agent
  Private Sub characterCombo_SelectedIndexChanged(ByVal _
     sender As Object, ByVal e As System.EventArgs) Handles _
     characterCombo.SelectedIndexChanged
     ChangeCharacter(characterCombo.Text)
  End Sub " characterCombo_SelectedIndexChanged
  " hide current character and show new
  Private Sub ChangeCharacter(ByVal name As String)
     mSpeaker.Hide(0)
     mSpeaker = mainAgent.Characters(name)
     GetAnimationNames() " regenerate animation name list
     mSpeaker.Show(0)
  End Sub " ChangeCharacter
  " get animation names and store in arraylist
  Private Sub GetAnimationNames()
     " ensure thread safety
     SyncLock (Me)
        " get animation names
        Dim enumerator As IEnumerator = _
           mainAgent.Characters.Character( _
           mSpeaker.Name).AnimationNames.GetEnumerator()
        Dim voiceString As String
        " clear cboActions combo box
        actionsCombo.Items.Clear()
        mSpeaker.rumands.RemoveAll()
        " copy enumeration to ArrayList
        While enumerator.MoveNext()
           " remove underscores in speech string
           voiceString = Convert.ToString(enumerator.Current)
           voiceString = voiceString.Replace("_", "underscore")
           actionsCombo.Items.Add(enumerator.Current)
           " add all animations as voice enabled commands
           mSpeaker.rumands.Add(Convert.ToString( _
              enumerator.Current), , voiceString, True, False)
        End While
        " add custom command
        mSpeaker.rumands.Add("MoveToMouse", "MoveToMouse", _
           "MoveToMouse", True, True)
     End SyncLock
  End Sub " GetAnimationNames
  " user selects new action
  Private Sub actionsCombo_SelectedIndexChanged(ByVal sender _
     As System.Object, ByVal e As System.EventArgs) _
     Handles actionsCombo.SelectedIndexChanged
     mSpeaker.Stop()
     mSpeaker.Play(actionsCombo.Text)
     mSpeaker.Play("RestPose")
  End Sub " actionsCombo_SelectedIndexChanged
  " handles agent commands
  Private Sub mainAgent_Command(ByVal sender As Object, _
     ByVal e As AxAgentObjects._AgentEvents_CommandEvent) _
     Handles mainAgent.rumand
     " get UserInput object
     Dim command As AgentObjects.IAgentCtlUserInput = _
        CType(e.userInput, AgentObjects.IAgentCtlUserInput)
     " change character if user speaks character name
     If (command.Voice = "Peedy" OrElse _
        command.Voice = "Robby" OrElse _
        command.Voice = "Merlin" OrElse _
        command.Voice = "Genie") Then
        ChangeCharacter(command.Voice)
        Return
     End If
     " send agent to mouse
     If command.Name = "MoveToMouse" Then
        mSpeaker.MoveTo(Convert.ToInt16( _
           Cursor.Position.X - 60), Convert.ToInt16( _
           Cursor.Position.Y - 60))
        Return
     End If
     " play new animation
     mSpeaker.Stop()
     mSpeaker.Play(command.Name)
  End Sub " mainAgent_Command

End Class " FrmAgent

" ************************************************************* " * (C) Copyright 2002 by Deitel & Associates, Inc. * " * and Prentice Hall. * " * All Rights Reserved. * " * * " * DISCLAIMER: The authors and publisher of this book have * " * used their best efforts in preparing the book. These * " * efforts include the development, research, and testing of * " * the theories and programs to determine their * " * effectiveness. The authors and publisher make no warranty * " * of any kind, expressed or implied, with regard to these * " * programs or to the documentation contained in these books.* " * The authors and publisher shall not be liable in any event* " * for incidental or consequential damages in connection * " * with, or arising out of, the furnishing, performance, or * " * use of these programs. * " *************************************************************</source>