Продолжим разговоры по поводу MS Agent. Загружать персонаж мы научились, а что делать с ним дальше? Он, конечно, может висеть без дела как дополнительное украшательство рабочего стола, но лучше используем технологию на полную катушку. Рассмотрим простой пример работы с MS Agent Control с использованием установленного нами ActiveX компонента.
Запускаем Delphi, создаем новый проект, и укладываем на главную форму компонент
TAgent с закладки палитры компонентов 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; |
Написали? Теперь запускаем приложение и видим примерно следующее:

Думаю, что подробно описывать процедуру не стоит, в кратце скажу, что мы сейчас загрузили персонаж, показали его пользователю и при этом Мерлин прочитал то, что записано в его описании.
Теперь посмотрим, на что в принципе способен помощник при его использовании в программах. Рассмотрим более подробно события у комонента TAgent:
- onActivateInput - происходит, когда персонаж становится активным для ввода, например, когда персонаж получает щелчок мышью, пользователь называет имя персонажа, при скрытии персонажа другой программы и т.д.
- onDeactivateInput - соответственно, происходит, когда персонаж деактивируется для ввода, например, если методом Show вызывается другой персонаж
- onClick - проиходит при щелчке мышью по персонажу. При этом, если персонаж был деактивирован, то вначале срабатывает событие onActivateInput, а затем onClick.
- onDragStart - вызывается, когда пользователь начинает перетаскивать персонаж мышью
- onDragComplete - запускается, когда пользователь отпускает кнопку мыши после перетаскивания персонажа
- 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 .
Ссылки по теме