MS Agent в приложениях. Часть 2

5 минут на чтение

Ну вот не так уж и много времени прошло после первой статьи про ms agent в Delphi. Как я бы хотел бы поговорить о продолжении. А точнее в этой статье хотел бы рассмотреть анимации своих персонажей, а также хотел рассказать как можно добавить в меню своему персонажу новые команды. Меню персонажа — когда нажимаете правой кнопкой мыши и появляется контекстное меню, по умолчанию там один пункт — «Скрыть», по нажатию на который скрывается наш персонаж, как скрыть персонаж еще и программного мы также здесь рассмотрим, это можно отнести также как еще одному виду анимации нашего персонажа. Давайте сперва поговорим о добавлении новых команд в меню нашего персонажа. За добавление новых команд в меню нашего персонажа отвечает объект Commands, обращаться к нему можно следующем образом.

procedure TForm1.Button5Click(Sender: TObject);
begin
   Agent1.Characters.Character('ROCKY').Commands.Add('Test','&Test',1,1,True);
end;

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

procedure TForm1.Button6Click(Sender: TObject);
begin
   Chrr.Commands.Add('Test2','&Test2',1,1,True);
end;

Тут думаю все понятно, Commands отвечает за объект команд, Add - добавляет новую команду, первый параметр название нашей команды, а второй параметр — название, которое непосредственно будет отображаться в меню нашего персонажа. Теперь можете в этом сами убедиться, запустить приложения и как только появиться наш персонаж вызовите контекстное меню нажав по персонажу правой кнопкой мыши и Вы увидите Ваш пункт меню. Теперь как бы этот пункт нам нужен для того, чтобы выполнять какие-либо действия. Теперь давайте  сделаем обработку нашей команды, для этого выделим наш компонент TAgent и перейдем в список событий данного компонента. Найдем событие OnCommand - данное событие отвечает за выполнения всех списка команд, а чтобы конкретной командой управлять, нам необходимо сделать проверку на выбранную пользователем команду. Для этого на событие OnCommand напишем следующий код

procedure TForm1.Agent1Command(ASender: TObject;
  const UserInput: IDispatch);
var
 cmd:IAgentCtlUserInput;
begin
   cmd:=UserInput as IAgentCtlUserInput;
   if cmd.Name='Test' then
    ShowMessage('Test run');
end;

То есть тут все понятно, просто делаем проверку на имя нажатой команды, если это было Test, то выполняем одно действие, можно добавить проверку на Test2 и вывести, например, другое сообщение. Вот так делается обработка команд в контекстном меню нашего помощника.

Теперь приступим к рассмотрению анимаций нашего персонажа. В прошлой статье про ms agent мы рассматривали некоторые анимации персонажа, а точнее перемещение его по экрану, это в какой-то степени тоже является анимаций. А сейчас рассмотрим более подробный список анимаций и вообще как его получить для каждого персонажа именно свой список. Вообще чтобы проиграть анимацию необходимо воспользоваться методом Play, чтобы остановить соответственно воспользоваться методом Stop. В параметрах указывается название анимации. Вообще чтобы получить список анимаций можно, например, скачать программу Agent Viewer. Через данную программу можно загружать вашего персонажа и в текстовом поле появляются весь список анимаций, который можно проиграть для данного персонажа. Проиграть анимацию можно следующим образом

procedure TForm1.Button7Click(Sender: TObject);
begin
   req:=Chrr.Play('Greeting');
end;

Данную анимацию — Greeting, я получил с помощью программы — Agent Viewer и просто написал сюда, данная анимация будет проигрываться только для моего персонажа.Кроме того, сделать анимацию можно еще с помощью одного метода — GestureAt.

procedure TForm1.Button3Click(Sender: TObject);
begin
   req:=chrr.GestureAt(100,20);
end;

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

procedure TForm1.Button4Click(Sender: TObject);
  var
  ANames : IAgentCtlAnimationNames;
   Enum : IEnumVariant;
   V : OLEVariant;
   Fetched : cardinal;
   S : TStringList;
   begin
   S.Clear;
   ANames := Chrr.AnimationNames;
   Enum := ANames.Enum as IEnumVariant;
  Repeat
   Enum.Next(1, V, Fetched);
   If VarToStr(V) <> '' Then
    S.Add(V);
  Until Fetched = 0;
  ListBox1.Items := S;
end;

Здесь перебор идет с помощью интерфейса IAgentCtlAnimationNames, а Enum - это указатель на один из интерфейсов IEnumXXX, в нашем случае IEnumVariant, который содержит элемент коллекции анимаций в данном случае.

Как видите работа с ms agent не такая уж и сложная, так что вполне можно украшать Ваши приложениями такими персонажами. И в добавок хотелось сказать, что пользуйтесь программой — Microsоft Agent Character Editor, которая позволила бы Вам создавать своих собственных персонажей.

Исходник статьи можно скачать тут

Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

Здравствуйте, в этой статье хотел бы рассказать как очень легко и быстро добавить в Ваше приложение MS Agent. Давайте сначала поговорим вообще что такое MS Agent. Надеюсь большинство пользователей устанавливали пакет MS Office, так вот Вы могли заметить, что т...
В этой статье я хотел бы рассказать как можно в своих приложениях БД использовать данные в Blob-полях. Этой статьей я хотел бы и закончить наш рассказ, про ADO технологию в Delphi для БД MS Access. Пойдем дальше и будем рассматривать другие БД и не много други...
Здравствуйте, в этой статье хотел бы рассказать как можно отобразить картинки в дереве рядом с узлами. Наверняка многие делали все возможные каталоги или применяли «деревья» в своих приложениях, где необходимо было именно размещать картинки, а например при рас...