VB.NET -Usando os agentes Microsoft


Usar os agentes Microsoft no VB.NET não tem segredo . Basta você referenciar no seu projeto o componente Microsoft Agent .Vou mostrar um projeto simples que usa o ator Merlin para falar o  número dos telefones de uma agenda.

Nota: Para saber mais veja artigo sobre agentes no link : Usando os Agents da Microsoft no Visual Basic

Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)

  1. Project Types : Visual Basic Projects
  2. Templates : Windows Application
  3. Name : Agentes
  4. Location : c:\vbnet\Agentes

A primeira coisa a fazer é incluir o componente Agent Control 2.0 na ToolBox , aba Components.

Para isto torne visível a toolbox e clique na aba - Components ; você verá a relação de componentes já incluídas.

Para instalar o componente , clique com o botão direito do mouse sobre a aba e no menu suspenso selecione a opção - Customize ToolBox.

Na janela - Customize Toolbox - selecione o componente , conforme figura abaixo , e clique em OK

Agora é só arrastar o componente para o formulário e incluir uma combobox e uma label conforme figura abaixo ( o logotipo e o link são perfumaria):

A idéia é a seguinte:

Quando o projeto for iniciado o ator Merlin deverá aparecer , dar as saudações e indicar a ação que o usuário deverá fazer. Esta ação será selecionar um nome na caixa de combinação.

Ao selecionar o nome  o ator irá falar o nome e o telefone que esta associado na caixa de combinação.(Você pode incrementar usando os dados de uma tabela)

O código é bem simples. No evento Load do formulário temos :

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 

agentController = New AgentObjects.Agent()

 

With agentController

   .Connected = True

   .Characters.Load("merlin", "merlin.acs")

   agentCharacter = .Characters("merlin")

End With

 

With agentCharacter

   .Show()

   .MoveTo(Convert.ToInt16(Cursor.Position.X - 12), Convert.ToInt16(Cursor.Position.Y + 13))

   .Play("Wave")

   .Speak("OLá, Eu sou Merlin. Selecione o nome da pessoa cujo telefone deseja encontrar.")

   .Play("RestPose")

End With


Me
.ComboBox1.Items.AddRange(New Object() {"José Carlos Macoratti", "Janice Rachel Siqueira", "Jessica Lang", "Jefferson James Bond"})


End
Sub

 

O código associado a  rotina pessoa()  é o seguinte :

Sub pessoa()

With agentCharacter

  If ComboBox1.SelectedIndex = 0 Then

    .Play("Think")

    .Speak("O número do telefone de " & ComboBox1.Text & " é (021) 123456789")

    .Play("Pleased")

  ElseIf ComboBox1.SelectedIndex = 1 Then

    .Play("Think")

    .Speak("O número do telefone de " & ComboBox1.Text & " é (021) 123456789")

    .Play("Pleased")

  ElseIf ComboBox1.SelectedIndex = 2 Then

    .Play("Think")

    .Speak("O número do telefone de " & ComboBox1.Text & " é (021) 123456789")

    .Play("Pleased")

  ElseIf ComboBox1.SelectedIndex = 3 Then

    .Play("Think")

    .Speak("O número do telefone de " & ComboBox1.Text & " é (021) 123456789")

    .Play("Pleased")

 End If

End With

End Sub

 

  Temos também o código associado ao evento SelectedIndexChange que é acionado quando uma nome na caixa de combinação for selecionado.

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

pessoa()

End Sub

Executando o projeto e selecionando um nome da combo teremos:

Tudo certo ? Bem , quase ... Como fazer para encerrar a aplicação de forma que agente se despeça gentilmente ?

Se você vascular não vai achar um método ou propriedade que faça a tarefa desejada.

Vamos então ter que criar uma nova propriedade que irá ser incorporada pelo atot no menu de propriedades .

Cada agente possui uma propriedade Commands , que é na verdade uma coleção de objetos Command , o que iremos fazer é definir um novo comando que será incorporado via objeto Commando a coleção Commands. Para o nosso caso o comando será definido como abaixo e colocado no evento Load do formulário do projeto.

magicoMerlin.Commands.add "Sair","Encerrar aplicação","",True,True

Onde :

Definido o comando temos que definir a ação que será tomada quando este comando for executado. No evento Command do agente devemos então colocar o seguinte código:

Private Sub AxAgent1_Command(ByVal acao As Object)

If acao.Name = "Sair" Then

   magicoMerlin.Stop()

   magicoMerlin.Play("Great")

   sair = True

   magicoMerlin.Speak(" Obrigado e até logo !")

End If

End Sub

Perceba que eu estou usando uma variável chamada sair definida como true (ela deve ser declarada no início do projeto) . Eu não posso encerrar de imediato a aplicação pois a fala do ator não seria vista. Para isto verifico se a variável sair esta True e no evento BallonHide  encerro a aplicação. O código é :

Private Sub AxAgent1_BalloonHide(ByVal sender As Object, ByVal e As AxAgentObjects._AgentEvents_BalloonHideEvent) Handles AxAgent1.BalloonHide

If sair Then

   Me.Close()

End If

End Sub

Até mais...


José Carlos Macoratti