Ну вот не так уж и много времени прошло после первой статьи про 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 и вывести, например, другое сообщение. Вот так делается обработка команд в контекстном меню нашего помощника.

Да, кстати, для будущих мам — 38 неделя беременности является признаком доношенного плода ребенка. Необходимо думать о его будущем уже

Теперь приступим к рассмотрению анимаций нашего персонажа. В прошлой статье про 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, которая позволила бы Вам создавать своих собственных персонажей.

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

Автор статьи - Andrey53

Метки: , , , ,

Комментарии закрыты.