Изучаем MS Agent Control

Источник: webdelphi

Продолжим разговоры по поводу MS Agent. Загружать персонаж мы научились, а что делать с ним дальше? Он, конечно, может висеть без дела как дополнительное украшательство рабочего стола, но лучше используем технологию на полную катушку. Рассмотрим простой пример работы с MS Agent Control с использованием установленного нами ActiveX компонента.

Запускаем Delphi, создаем новый проект, и укладываем на главную форму компонент agent_pictogrammTAgent с закладки палитры компонентов ActiveX .

Теперь на событие onCreate у главной формы пишем следующий код:

1
2
3
4
5
6
procedure TForm1.FormCreate(Sender: TObject);
begin
  Agent1.Characters.Load('MyAgent','merlin.acs') ;
  Agent1.Characters.Character('MyAgent').Show(0);
  Agent1.Characters.Character('MyAgent').Speak(Agent1.Characters.Character('MyAgent').Description, '')
end;

Написали? Теперь запускаем приложение и видим примерно следующее:

agent_speak

Думаю, что подробно описывать процедуру не стоит, в кратце скажу, что мы сейчас загрузили персонаж, показали его пользователю и при этом Мерлин прочитал то, что записано в его описании.

Теперь посмотрим, на что в принципе способен помощник при его использовании в программах. Рассмотрим более подробно события у комонента TAgent:

  1. onActivateInput - происходит, когда персонаж становится активным для ввода, например, когда персонаж получает щелчок мышью, пользователь называет имя персонажа, при скрытии персонажа другой программы и т.д.
  2. onDeactivateInput - соответственно, происходит, когда персонаж деактивируется для ввода, например, если методом Show вызывается другой персонаж
  3. onClick - проиходит при щелчке мышью по персонажу. При этом, если персонаж был деактивирован, то вначале срабатывает событие onActivateInput, а затем onClick.
  4. onDragStart - вызывается, когда пользователь начинает перетаскивать персонаж мышью
  5. onDragComplete - запускается, когда пользователь отпускает кнопку мыши после перетаскивания персонажа
  6. onRequestStart - посылается сервером, когда он начинает обрабатывать запрос, поставленный в очередь.

Есть ещё масса других событий, обрабатываемых в процессе работы с персонажами, но мы, для ознакомления остановимся пока на рассмотренных выше. А теперь рассмотрим небольшой пример:

пусть при запуске программы персонаж скажет кто он и отреагирует на перетаскивание его мышью

Код, реализующий поставленную задачу представлен ниже:

1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Agent1DragStart(ASender: TObject;
const CharacterID: WideString; Button, Shift, x, y: SmallInt);
begin
Agent1.Characters.Character('MyAgent').Speak('ээээ...поставь на место!!!', '')
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Agent1.Characters.Load('MyAgent','merlin.acs') ;
  Agent1.Characters.Character('MyAgent').Show(0);
  Agent1.Characters.Character('MyAgent').Speak(Agent1.Characters.Character('MyAgent').Description, '')
end;

Теперь откомпилируйте, запустите приложение и попробуйте перетащить персонаж в момент, когда он "представляется" Вам. Видите? Вроде как событие onDragStart должно работать и персонаж должен выкрикнуть другую фразу, но он продолжает начатую фразу. Очевидно, что первый запрос необходимо как-то прервать. Хотите узнать как? В следующей статье я рассмотрю вопросы по работе с запросами Request .


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=23627