Мастерская Delphi программирования. | ||||||||||||||
| ||||||||||||||
Использование Ms Agent в проектах Delphi.
При создании этого материала были использованы Microsoft Agent Control 2.0 (Version 2.0) и Персонаж Merlin. Необходимые компоненты можно загрузить сдесь. Содержание:
Установка.Установка Ms Agent не должна вызвать проблем. Распакуйте архив и запустите файл msagent.exe на выполнение. Далее следуйте
инструкциям указаным при установке. Аналогичным образом действуйте при установке персонажа "Мерлин" из файла merlin.exe.
Экспорт в Delphi.Чтобы использовать Ms Agent в своих приложениях необнодимо импортировать ActiveX Control в среду Delphi. Воспользуйтесь приведенным ниже алгаритмом.
Об Ms Agent.Ms Agent - это обычный ActiveX компонент с большим набором интерфейсов. Наиболее часто будут использоаваться следующе:
Использование в своем приложении.Рассмотрим небольшой пример приложения который раскрывает некоторые возможности предоставляемые Ms Agent. На рисунке показан внешний вид окна приложения.Модуль Main В верхней части окна расположены кнопки: "Показать", "Скрыть", "Домой". Действия осуществляемые при нежатии кнопок понятны из названий. "Домом" для персонажа служит панель расположенная ниже. При нажатии кнопки "Домой" персонаж перемещается на панель из любой точки экрана. Правее панели расположен список в котором перечислены все анимации реализованные в персонаже. При выборе пункта из списка персонаж проигрывает соответствующую анимацию. Если воспроизводится зацикленная анимация, ее можно остановить кликнув по персонажу. Воспроизведение остановится и персонаж вернется в исходное положение. Справа от списка анимаций расположена группа компонентов которая позволяет перемещать персонаж в заданную точку. Введите значенич координат X, Y и нежмите кнопку Go!. Персонаж переместится воспроизведя соответствующую анимацию. Персонаж переместится даже если он скрыт, только его не будет видно на экране. Ниже слева расположен компонент в котором отображается описание персонажа и его версия. Правее находится кнопка Think. При нажатии этой кнопки персонаж говорит запрограммированную фразу. Когда на персонже происходит щелчек правой кнопкой мыши вызывается Popup меню персонажа. В это меню добавлены две комманды: "Demo" и "Test". Сами по себе эти комманды бесполезны, они просто проигрывают анимации. Но мы имеем возможность задавать агенту собственные комманды. Теперь разберемся как это все работает. Подготавливаем персонаж к работе. Для этого в обработчике onCreate пишем следуюший код: procedure TForm1.FormCreate(Sender: TObject); begin Agent1.Characters.Load('Char', 'merlin.acs'); //Загружаем персонаж из файла merlin.acs Character := Agent1.Characters.Character('Char') as IAgentCtlCharacterEx; //Присваеваем указатель на интерфейс IAgentCtlCharacterEx переменной AgentAnimationEnum; //Заполняем список анимаций ToolButton3Click(Sender); //Позиционируем персонаж в "Домашней позиции" Character.Commands.Add('Test', '&Test', 1, 1, True); Character.Commands.Add('Demo', '&Demo', 1, 1, True);// Добавляем в меню две комманды Memo1.Lines.Clear; { Показать опсиание персонажа } Memo1.Lines.Add(Character.Description); Memo1.Lines.Add('Version ' + Character.Get_Version); end;За заполнение списка анимациями отвечает процедура AgentAnimationEnum. Ниже представлен ее код. procedure TForm1.AgentAnimationEnum; var AEnum: IEnumVariant; Fetch: Cardinal; V: OleVariant; begin AnimationNames := Character.AnimationNames; AEnum := AnimationNames.Enum as IEnumVariant; // Получаем интерфейс IEnumVariant для перебора анимаций AEnum.Reset; ListBox1.Items.Clear; // Подготавливаем IEnumVariant к перебору анимаций и список к их хранению Repeat AEnum.Next(1,V,Fetch); //Начинаем перебор анимаций If VarToStr(V) <> EmptyStr Then // Пропускаем пустые строки ListBox1.Items.Add(V); // Добавляем имя анимации в список until Fetch=0; //выходим из цикла если перебор закончен end;При нажатии на кнопку "Домой" позиционируем персонаж в центре панели. Ниже представлен код обработчика события. procedure TForm1.ToolButton3Click(Sender: TObject); var PanelPos : TPoint; Pos : TPoint; X,Y : Integer; begin PanelPos.x := Panel1.Left; PanelPos.Y := Panel1.Top; Pos := ClientToScreen(PanelPos); // Переводим координаты панели в координаты экрана // Вычисляем координаты точки перемещения X := Pos.X+Panel1.Width DIV 2 - Character.Width DIV 2; Y := Pos.y+Panel1.Height DIV 2 - Character.Height DIV 2; Character.MoveTo(X,Y,1); // перемещаем Персонаж end;При выборе имени анимации из списка персонаж проигрывает ее. Метод play() возврашает указатель на IAgentctlRequest. Его необходимо сохранить если понадобится остановить ваоспризведение анимации. procedure TForm1.ListBox1Click(Sender: TObject); begin ListBox1.Hint := ListBox1.Items[Listbox1.ItemIndex]; Req := Character.Play(WideString(ListBox1.Items[Listbox1.ItemIndex])); //Воспоризводим выбранную анимацию end;Если кликнуть мышкой на персонаже, будет прекращено воспроизведение анимации. Это достигается следующем кодом. procedure TForm1.Agent1Click(Sender: TObject; const CharacterID: WideString; Button, Shift, x, y: Smallint); begin try Character.Stop(Req); // Останавливаем действие которое содержится в переменной Req finally Req := Character.Play('RestPose'); // При любом исходе возвращаем персонаж в исходное состояние end; end;Персонаж эффектно перемещается по экрану. Перемещение в заданные координаты осуществляется следующим кодом. procedure TForm1.Button1Click(Sender: TObject); var X,Y: Integer; begin try X := StrToInt(Edit1.Text); Y := StrToInt(Edit2.Text); // Преобразуем введенные координаты из стороки в число Character.MoveTo(X,Y,1); // перемещаем персонаж except Toolbutton1click(nil); // При возникновении ошибки перемещаемся в "домашнее положение" end; end;Персонаж можно заставить говорить заранее определенные фразы. Заставим его произнести "мысли вслух". Попробуем смоделировать поведение персонажа, как будто он думает. Получается довольно реалистично. procedure TForm1.Button3Click(Sender: TObject); begin Character.Play('Think'); // Проиграть анимацию задумчивости Character.Think('И что от меня хотят?'); // Произнести фразу end;Персонажу можно добавить собственные комманды управления. При создании окна приложения были добавлены две. Теперь рассмотрим как осуществить обработку соответствующей комманды. procedure TForm1.Agent1Command(Sender: TObject; const UserInput: IDispatch); var Cmd : IAgentCtlUserInput; begin Cmd := UserInput as IAgentCtlUserInput; If Cmd.Name = 'Test' Then // Если выбрана комманда "Test" // Соответствующие действия begin Character.Speak('Вызвали команду Test',''); req := Character.Play('Processing'); end; If Cmd.Name = 'Demo' Then // Если выбрана комманда "Demo" // Соответствующие действия begin Character.Speak('Вызвали команду Demo',''); req := Character.Play('DoMagic1'); req := Character.Play('DoMagic2'); Req := Character.Play('RestPose'); end; end;В этом примере не затронуты еше несколько возможностей Ms Agent. Например возможность манипулировать с областью вывода текста - Baloon, или возможность управлять агентом голосовыми коммандами. Также использование одновременно нескольких персонажей. Например можно заставить их ругаться между собой или поиграть в пятнажки. Возможностей еще много. Чтобы узнать больше почитайте документацию или посетите сайт Microsoft. Полностью исходник примера находится здесь. Использование в HTMLСама идея Ms Agent достаточно необычна и привлекательна. Использование технологии ActiveX позволяет использовать персонаж при оформлении Web страниц. Получается довольно оригинально. Судите сами, вот страница используюшая Ms Agent. Она протестирована на Internet Explorer 5.0.Персонажи.Помимо персонажей разработанных компанией Microsoft, у вас есть возможность создать собственный. Для этих целей служит редактор персонажей.Попробуйте, может у вас что-нибуть получится. DownloadMicrosoft Agent Control 2.0 (Version 2.0)Персонаж "Merlin" Microsoft Agent Character Editor | ||||||||||||||
| ||||||||||||||
http://www.valler.narod.ru |