Продолжим разговоры по поводу MS Agent. Загружать персонаж мы научились, а что делать с ним дальше? Он, конечно, может висеть без дела как дополнительное украшательство рабочего стола, но лучше используем технологию на полную катушку. Рассмотрим простой пример работы с MS Agent Control с использованием установленного нами ActiveX компонента (процесс установки рассмотрен в этой статье).
Запускаем Delphi, создаем новый проект, и укладываем на главную форму компонент TAgent с закладки палитры компонентов ActiveX.
Теперь на событие onCreate у главной формы пишем следующий код:
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 — посылается сервером, когда он начинает обрабатывать запрос, поставленный в очередь.
Есть ещё масса других событий, обрабатываемых в процессе работы с персонажами, но мы, для ознакомления остановимся пока на рассмотренных выше. А теперь рассмотрим небольшой пример:
пусть при запуске программы персонаж скажет кто он и отреагирует на перетаскивание его мышью.
Код, реализующий поставленную задачу представлен ниже:
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.
Всем Здравствуйте! Увидела интересный сайт о Office Assisten(ами) для Delphi: http://www.delphiarea.com/products/delphi-packages/assistant/ Эти персонажи в формате aal. Скажите пожалуйста, ведь MS Agent Merlin имеет ‘acs’ формат и может читать текст в balloon используя SAP Speech Engine. Могут ли персонажи с форматом «aal» делать то же самое? Если да, то как? Для примера привожу чтение голосовым движком у Merlin Ms Agent: Agent1.Character(‘Merlin’).Speak (‘Hello!’, EmptyParam); Merlin произносит вслух и делает мимику, а «aal» — нет. Подскажите пожалуйста, голосовые движки стоят, имею SAP 5 + русскоязычные тоже. И второй вопрос, если можно: При запуске Merlin выходит на квадратном розовом фоне, а Джин на зелёном… Подробнее »