Использование Microsoft Agent в Delphi. Часть 2 Свойства, события и методы

Использование Microsoft Agent в Delphi

Использование Microsoft Agent в Delphi. Часть 2 Свойства, события и методы

<!--// BODY -->

В прошлой статье я обещал рассказать про события, свойства и методы агентов, но что ж начнем.
Опубликованных свойств всего 11, из них нам интересны только 2, остальные являются наследуемыми и Вы не раз сталкивались с ними.

Connected: Показывает или устанавливает соединение с сервером управления Агента, если True соединение установлено.
 

RaiseRequestErrors: Это свойство включает генерацию ошибок (по умолчанию True). Например, если ваш агент не поддерживает анимацию, которую вы хотите использовать, будет возбуждена ошибка (и показана на экране) если значения свойства True (Истина).

Теперь рассмотрим события, их гораздо больше, а точнее 26, но и  вкратце о них, а о некоторых, даже и поподробней:
 

OnClick: Ну это и понятно, когда кликнете на агенте мышкой.

OnDblClick: При двойном клике.

OnDragStart: При начале перетаскивания агента.

OnDragComplete: При завершение перетаскивания.

OnShow: Агент появился на экране.

OnHide: Агент скрыт с экрана.

OnRequestStart: Начало выполнения запроса.

OnRequestComplete: Запрос выполнен.

OnRestart: Не знаю, применения этому событию , я пока не нашел, если кто узнает для чего это просьба сообщить мне.

OnShutdown: Пользователь закрыл MSAgent.

OnBookmark: В команде speak достигнут тэг закладки.

OnCommand: Пользователь выбрал команду в сплывающем меню или голосом.

OnIdleStart: При впадение агента в спячку.

OnIdleComplete: При прекращение спячки агента.

OnMove: Агент перемещен.

OnSize: Изменены размеры агента.

OnBalloonShow: Область текста показана.

OnBalloonHide: : Область текста скрыта.

OnHelpComplete: Пользователь вышел из справки.

OnListenStart: Начало выполнение метода Listen.

OnListenComplete:Метод Listen завершен.

OnDefaultCharacterChange: Свойства агента по умолчанию изменены.

OnAgentPropertyChange: Свойства агента изменены.

OnActiveClientChange: Активная клиентская область изменена.

OnActivateInput: Ввод активирован.

OnDeactivateInput: Ввод деактивирован.

В примере вы можете посмотреть какие события, когда происходят.

Теперь рассмотрим основные методы агента, большую часть из них я использовал в примере к прошлой статье и вы должны быть с ними знакомы.

Show(Fast: OleVariant): IAgentCtlRequest;
Выводит изображения агента на экран, ее единственный параметр, определяет показывать агента с анимацией(False) или сразу(True).
Request := Character.Show(False);

Hide(Fast: OleVariant): IAgentCtlRequest;
Скрывает изображения агента с экрана, его параметр аналогичен по свойству и целям параметру метода Show.
Request := Character.Hide(False);

 

MoveTo(x: Smallint; y: Smallint; Speed: OleVariant): IAgentCtlRequest;
Перемещает фигурку агента в заданные координаты экрана в параметрах x,y и с заданной скоростью перемещения параметром Speed. Если параметр 0 персонаж сразу же окажется в указанном месте экрана. Чем больше число Speed, тем медленнее персонаж будет перемещаться. Во время движения проигрывается анимации группы Moving.
Request := Character.MoveTo(640,365, 0);

GestureAt(x: Smallint; y: Smallint): IAgentCtlRequest;
При выполнение этого метода агент указывает в направление заданных координат экрана параметрами x,y. При этом используется определенный набор анимаций, который вы также можете использовать в методе Play.
Request := Character. GestureAt(0, 0);

Play(const Animation: WideString): IAgentCtlRequest;
Метод Play проигрывает указанную анимацию , название которой передается строкой в параметре Animation.
Request := Character.Play('Announce');

Speak(Text: OleVariant; Url: OleVariant): IAgentCtlRequest;
Проговаривает фразу , первый параметр задает текст который будет в окно вывода Baloon, а второй параметр задает имя файла или адрес URL где находится аудиофайла с помощью которого может быть произнесена эта фраза. Любой из параметров необязателен, но один параметр нужно задать. Если второй параметр не задан и установлен звуковой движок агента, звук будет сгенерирован в соответствие с текстом.
Также первый параметр может содержать теги Speech MSAgent, которые задают свойства произносимого текста, о них поподробнее. Пишутся все теги в заключенными в обратные слеши, всего их 11.Некотрые персонажи могут не поддерживать определенные теги, и все теги требуют установленный движок TTS.
Chr, Ctx, Emp, Lst, Map, Mrk, Pau, Pit, Rst, Spd, Vol
Chr
Определяет тон произносимого текста
"Normal" По умолчанию нормальный голос
"Monotone" Монотонно.
"Whisper" Шепотом.
\Chr="Monotone"\
Ctx
Опрделяет значения произносимого после этого текста ,используется для сокращений ,адресов.
"Address" Адреса и/или телефонные номера one.
"Email" Электронная почта.
"Unknown" По умолчанию значение неизвестно.
\Ctx="Addres"\
Emp
На следующем за ним слове будет сделано ударение.
\Emp\
Lst
Произнесенный текст будет повторен.
\Lst\
Map
Позволяет произносить один текст, а выводить в рамку текста Balloon другой.
Первый параметр произносимый текст, второй текст в рамке.
\Map="Привет"="Здравствуй"
Mrk
Устанавливает закладку в тексте. Когда тег закладки достигнут происходит событие onBookMark.
\Mrk=1\
Pau
Пауза, параметр должен содержать число миллисекунд длительности паузы
\Pau=1000\
Pit
Устанавливает частоту произносимого текста в Герцах
\Pit=22400\
Rst
Сбрасывает и устанавливает значения по умолчанию для всех тегов.
\Rst\
Spd
Устанвливает среднюю скорость произносимых слов в минуту.
\Spd=100\
Vol
Устанавливает громкость произносимого текста, значение параметра от 0 до 65535.
\Vol=4000\
Request := Character.Speak('Привет \Mrk=1\ ну ты и мужик',EmptyParam);

Think(const Text: WideString): IAgentCtlRequest;
Параметр задает текст, а ваш персонаж делает вид , что думает, текст появляется в чуть измененном окне Balloon, а звукового сопровождения при этом нет.
Request := Character.Think('и это жизнь.');
 

Wait(const WaitForRequest: IDispatch): IAgentCtlRequest;
Указывает на запрос другого агента, завершения которого ожидает второй персонаж.
Используйте этот метод только, когда вы используете одновременно нескольких персонажей и вам нужно следить за их взаимодействие. Для единственного персонажа каждый запрос анимации запускаются последовательно - после того, как предыдущий запрос завершается.
Это выглядит примерно так.
var
Character2:IAgentCtlCharacterEx;
Request1: IAgentCtlRequest;
Request11: IAgentCtlRequest;
Character1:IAgentCtlCharacterEx;
Request2: IAgentCtlRequest;
Request22: IAgentCtlRequest;
Begin
Request1:=Agent1.Characters.Load(Agent1,AgentPath1);
Character1:=Agent1.Characters.Character(Agent1);
Request2:=Agent1.Characters.Load(Agent2,AgentPath2);
Character2:=Agent1.Characters.Character(Agent2);
Request1 := Character1.Show(False);
Request2 := Character2.Show(False);
Character2.Wait(Character1.Speak ('Сколько время???'));
Request2 := Character2.Think('Да уж...');
End;
 

Напоследок код который определяет все возможные анимации агента, для этого нужно добавить в uses модуль ActiveX и использовать интерфейс IagentCtlCharacterEx, использую код который мне прислал Илья Троицкий, но если он будет против, могу выложить свой, просто его код получился короче и понятнее моего, хотя смысл точно такой же.
procedure TForm1.Button1Click(Sender: TObject);
var
AnimNames: IAgentCtlAnimationNames;
Enum: IEnumVariant;
Str: OleVariant;
Len: LongWord;
begin
AnimNames := Character.AnimationNames;
Enum := AnimNames.Enum as IEnumVariant;
Len := 0;
While (Succeeded(Enum.Next(1, Str, Len)) and (Len > 0))do
ListBox1.Items.Add(String(Str));
end;

Ну вот и все...на данный момент....А то много получилось...
В следующей части мы рассмотрим интерфейсы MSAgent и все, что с этим связано, а также я выложу пример ко второй и третьей части. Вообщем ждите...

<!-- BODY //-->С удовольствием выслушаю все комментария и замечания по поводу данной статьи. Сразу хочу предупредить, я не отвечаю на письма где меня просят выслать что либо или будет ли продолжение(и подобные письма не несущие какой-то содержательной части), я их читаю, но отвечать на них у меня времени нет. Также , если кто обнаружит неточности, да и просто грамматические ошибки в статье, за это прошу заранее извинение.



Опубликовал admin
3 Авг, Воскресенье 2003г.



Программирование для чайников.