Categorias
Usando o microsoft agent
Este artigo demonstra como implementar o Microsoft Agent em seus próprios aplicativos.
|
Este artigo apareceu originalmente em Delphi Developer
|
Utilizando o Microsoft Agent em DELPHI
por Clay Shannon
Quando eu digo às pessoas como é divertido e eficiente de utilizar o Microsoft Agent nos meus programas, ou eles já sabem do que estou falando e concordam com veemencia, ou eles olham para mim como se eu simplesmente tivesse caído da parte traseira de um caminhão de couve-nabo dizem algo como: "Você quer dizer aquele clipe de papel falante que faz Twiggy se parecer com um lutador sumô?! Eu odeio aquele cara!" Bem, eu não sou muito apreciador desses agentes, também. Se quando você ouve "Microsoft Agent" você pensa no "Agentes do Office", tais como "esse clipe de papel falante" na horrorosa caixa de diálogo que está sempre te enchendo o saco com perguntas como "parece que você está fazendo isso, você quer que eu ajude? ", e" parece que você está fazendo aquilo, você quer ajuda? hein? ", você está pensando de uma raça diferente do Microsoft Agent do que aqueles que serão abordados neste artigo. Você não está feliz?
Estes agentes não estão encurralados no interior de uma caixa de diálogo, e eles aparecem quando e onde você lhes disser, e dizem exatamente o que você programá-los a dizer. Portanto, vamos apresentá-los. São eles: Peedy (o Pásaro), Robby (o robô), Merlin (o Mago) e Gênio (bem, o Gênio):
E esses "lindos" caracteres têm qualquer valor prático? Em alguns programas, indubitavelmente não. Em outros, porém, eles podem não só adicionar um atrativo (dependendo das preferências do usuário, é claro), mas também ser úteis para auxiliar o usuário a aprender a utilizar o programa e passar pelos "pontos difíceis". Tenho a tendência de pensar nos agentes como uma espécie de "Mestre de Cerimônias". Eles podem ser usados para introduzir o usuário ao programa - o que é que ele faz? Como usá-lo? Eles podem ser utilizados como um suplemento para, ou até mesmo uma renovação, de um arquivo-ajuda. Além disso, os agentes têm um grande potencial, ou futuro, como "guias" em CBT (Computer-Based Training) e nos programas demo.
Nem todas as máquinas têm o Microsoft Agents instalado. Se não tiver certeza se os seus usuários terão os agentes instalados ou não, você tem duas opções: distribuir os agentes para os seus usuários em caso de eles não os terem, ou escrever o seu código de tal forma que seja transparente para os usuários sem agente que o seu programa é capaz de utilizar agentes ( "eles não sabem o que estão perdendo"). Para implantar os agentes, você deve ir ao site da Microsoft Agent, fazer o download de um formulário, preenchê-lo, enviá-lo para eles, etc, a fim de obter permissão para distribuir os agentes. Não sei para você, mas para mim isso é, nas palavras de Chuck Berry "muita palhaçada". Eu opto pelo código de duas situações: no caso de terem instalado os agentes, eles vão vê-los, caso contrário eles não vão.
A primeira coisa que você como um desenvolvedor precisa saber é baixar e instalar a tecnologia do Agente você mesmo, se você ainda não o fez. Os componentes do Agente estão disponíveis em http://msdn.microsoft.com/workshop/imedia/agent/default.asp
Os downloads mais pertinentes são os seguintes:
• O agente servidor
• Os caracteres / agentes
• Uma peça Text-to-Speech
• Peça comando de voz (input)
Este artigo não irá lidar com o download e funcionalidade Voice Command (repita depois de mim: "esse é um exercício para deixar para o leitor"). O site também contém informações sobre um novo livro intitulado "Microsoft Agent Software Development Kit", e você também pode fazer download do Microsoft Agent Character Editor (software) para criar os seus próprios agentes. Este vai "além do escopo deste artigo" e é também "deixado como um exercício..." - Bem, você sabe o resto. Vamos começar o seu "negócio", ou diversão, ou seja lá o que é que temos aqui.
Os únicos downloads que você irá necessitar com certeza é o Agent Server e um personagem. Apesar disso, eu recomendo o download de todos os personagens e da funcionalidade Text-to-Speech.
O download da Microsoft instala e registra o agente servidor em sua máquina. O que é deixado para você fazer é instalar o agente de controle no Delphi. Para isso, siga estas etapas:
• Selecione componente | Importar controle ActiveX
• Localize o Microsoft Agent Control na caixa de listagem e selecione o botão Adicionar
O agente deve agora ser instalado na sua página ActiveX:
Se você soltar esse controle em um formulário, você verá que um componente do tipo TAgent é adicionado à definição do seu formulário. No entanto, se não você tem certeza se o usuário terá o agente servidor instalado em sua máquina, vamos querer criar o agente dinamicamente. Não o fizer pode causar o mesmo problema que ter um carregamento estático .DLL que não é encontrado pelo aplicativo na máquina do usuário. Iremos primeiro verificar a existência do agente tecnologia, e só então criar o agente, se tal existe.
Adicionar um campo Boolean ao formulário, que reflete o estado da presença do Agente tecnologia. Por exemplo, este poderia ser um campo chamado AgentInstalled. Isso é mostrado abaixo, juntamente com outros agentes específicos de cada campo Boolean público e as respectivas propriedades que você pode querer declarar:
TYourObject
private
AgentInstalled: Boolean;
function AgentIsInstalled: Boolean;
procedure CreateAndLoadAgentIfInstalled;
function GetColorDepth: Word;
function GetWinDir: String;
procedure SetFormColor;
function AgentWasClicked
Você pode preencher este campo com o seu valor apropriado com um procedimento que verifica a existência dos arquivos do agente no computador do usuário. Por exemplo, se você estiver usando Robby (o robô) como seu agente, seu código pode ter esta aparência:
{----------------------------------------------------------------}
function TYourObject.AgentIsInstalled: Boolean;
begin
Result := (FileSearch('Robby.acs', Format('%s\MSAGENT\CHARS',
[GetWinDir]))<>'');
end;
{----------------------------------------------------------------}
function TYourObject.GetWinDir : string;
var
WinDirZ : array[0..256] of Char;
begin
GetWindowsDirectory(WinDirZ, SizeOf(WinDirZ));
Result := StrPas(WinDirZ);
end;
NOTA: Não assuma que as agências foram baixadas no seu "lugar normal" na máquina do usuário C:\Windows\Msagent\chars).
Todos nós sabemos o que pode acontecer (e normalmente eventualmente acontece), quando nós assumimos muito. Então, você pode usar a função GetWinDir acima, juntamente com o convite para FileSearch para encontrar o diretório do Windows na máquina do usuário.
À medida que nós vamos criar o componente Agent de forma dinâmica, não colocamos um agente de controle ActiveX no formulário. Em vez disso, adicionar as unidades OLECtrls e AgentObjects_TLB para a implementação usa cláusula do formulário [s] sobre o qual você quer usar o agente:
implementation
uses
AgentDemoConsts,
Registry,
OLECtrls, AgentObjects_TLB;
Você pode então criar dinamicamente o componente Agente desta forma:
{-----------------------------------------------------------------}
procedure TYourObject.CreateAndLoadAgentIfInstalled;
const
RightBias = 80;
TopBias = 70;
var
tp: TPoint;
begin
if (AgentInstalled) and not (Assigned(RobotAgent)) then begin
RobotAgent := TAgent.Create(Application);
RobotAgent.Characters.Load('Robby','Robby.acs');
{ Move the Agent to the center of the screen }
tp.x := (Screen.Width div 2)-(Width div 2);
tp.y := (Screen.Height div 2)-(Height div 2);
with RobotAgent.Characters.Item['Robby'] do begin
MoveTo(tp.x+RightBias, tp.y+TopBias, 0);
Show(0);
Play('Greet');
Play('Explain');
Speak(SDemoIntro, '');
Play('Pleased');
Play('RestPose');
Speak(SWhisper, '');
Speak(SMonotone, '');
Speak(SMap, '');
(Você pode ficar com ele e piratear gesto como um louco se
você quiser ... )
end;
end;
end;
Adicionando expressão
Existem várias opções de discursos/textos especiais que você pode usar para obter mais controle exato como o agente fala. Por exemplo, você pode fazê-lo sussurrar, falar em uma monotonia, pausar, enfatizar uma certa parte de sua oratória, ou mesmo fazer-lhe dizer uma coisa, enquanto o balão acima da sua cabeça lê de forma diferente. Você pode usar esta última funcionalidade para que ele fale em Inglês, e mostrar a tradução para outro idioma no balão. Ou, você poderia ir fazer ele dizer uma coisa, enquanto tem outro pensamento. Estes capacidades estão disponíveis através das seguintes adições:
\Chr = "Whisper"\ O agente irá sussurrar o seguinte texto
\Pau = N\ O agente irá pausar pelo número designado de milissegundos
\Emp\ O agente irá dar especial destaque para as seguintes frases
\Chr = "Montone"\ O agente não irá enfatizar nada
\Mapa = = O agente vai dizer uma coisa, e "pensar" outra.
Aqui estão alguns exemplos de uso dessas "qualidades" de discurso:
SFuzzyWuzzy = 'Teddy era um usro;\Pau=500\ teddy não tinha ' +
'cabelo;\Pau=500\teddy não era muito fofo \Emp\fuzzy, ' +
'\Emp\era?';
SWhisper = '\Chr="Whisper"\Agora eu vou sussurrar: Whisper whisper ' +
'whisper.';
SMonotone = '\Chr="Monotone"\Agora vou falar em monotonia. Pat ' +
'Paulsen for President.';
SMap = '\Map="Eu vou continuar a falar em português, mas você vai'+
'ver as minhas palavras traduzidas para o alemão no balão acima da minha' +
'cabeça. ' +
'Como vai você hoje? Eu estou \Emp\ótimo!"="Jetzt werde ich ' +
'zwar immer noch in Englisch reden, sie werden aber meine ' +
'Woerte im Ballon obenauf ins Deutsch uebersetzt sehen. ' +
'Wie geht es Ihnen heute? Mir geht es ganz gut!"\';
Nota: Nem todas as ações (argumentos passados para o método Play) estão disponíveis para todos os agentes. Consulte a documentação correspondente contida nos arquivos baixados com o Microsoft Agent para ver quais personagens (agentes) que apóiam quais ações.
Interação
Se quiser responder aos eventos do agente, você pode ligar estes, seguindo estes passos:
• Largar um componente de agente em um formulário.
• Ir à página do evento Object Inspector
• Clique no evento que pretende tratar
• Copie o seu método de assinatura (para a área de transferência, a Bloco de Notas, ou seja o que for)
• Adicione um método que assine o seu formulário de declaração
• Após a criação do agente, atribua o seu método para o evento que pretende gerir.
Por exemplo, se você pretende lidar com o agente do evento OnClick, escreva um método com esta assinatura:
procedure AgentWasClicked(Sender: TObject;
const CharacterID: WideString; Button, Shift, x, y: Smallint);
Faça a cessão do evento para o seu método, imediatamente após a criação do agente:
RobotAgent := TAgent.Create(Application);
RobotAgent.OnClick := AgentWasClicked;
e, em seguida, escreva a definição do evento na unidade de implementação da seção:
procedure TYourObject.AgentWasClicked(
Sender: TObject;
const CharacterID: WideString;
Button, Shift, x, y: Smallint);
begin
ShowMessage('Don''t touch me there!');
end;
{----------------------------------------------------------------}
function TfrmAgent.UsersName: String;
var
Buff: DWord;
CharArray: array[0..255] of Char;
begin
Buff := SizeOf(CharArray);
GetUserName(CharArray, Buff);
Result := CharArray;
end;
Clay Shannon é um consultor independente de Delphi baseado no norte de Idaho. Ele está disponível para:
1) consultoria de trabalho em Delphi na grande área de Spokane / Coeur d'Alene
2) desenvolvimento remoto (nenhum trabalho é pequeno demais!)
3) Tarefas de curto prazo ou de tempo parcial em outros locais.
Clay é um programador Delphi 5 certificado, e é o autor do Developer's Guideto Delphi Troubleshooting [Wordware, 1999]. Você pode entrar em contato com ele, em BClayShannon@aol.com