уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Если Вы работаете в Windows 7 или выше и желаете написать программу, использующую MS Agent, то перед прочтением статьи обязательно ознакомьтесь с информацией на сайте Microsoft, касающейся использования MS Agent в этой операционной системе!

Все, наверное, помнят навязчивую Скрепку из MS Office? Особенно раздражало, когда эта гадость начинала объяснять какие-то прописные истины по работе с пакетом, когда этого не требовалось. Естественно в итоге «Помощник» отключался и более никогда не использовался.

MS Agent. Doctor

MS Agent. Doctor

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

Если говорить конкретно, то использование технологии MS Agent в свое время очень помогло мне сэкономить нервы и время на то, чтобы обучить неопытных пользователей использовать сложный программный комплекс. Более того, теперь абсолютно все пользователи используют «Помощника» в работе.  Хотите узнать что такое MS Agent и как его использовать правильно? Тогда приступим.

1. Что такое MS Agent и где его взять?

Microsoft Agent — это сервер автоматизации (OLE Automation Server), который позволяет расширить форму взаимодействия приложения или web-узла с пользователем с помощью анимированных персонажей в рамках интерфейса Microsoft Windows. Разработчики могут использовать данный компонент для расширения пользовательского интерфейса, в который входят привычные элементы управления.

Следует особо отметить — MS Agent может только дополнить интерфейс программы, а не заменить его полностью. Никогда не следует слишком нагружать вашего персонажа действиями одновременно сокращая привычный интерфейс программ (кнопки, меню и т.д.) — люди в большинстве своем консервативны и мало кому понравиться, если вместо привычного окна на рабочем столе будет скакать поятоянно какой-то мутант и при этом (не дай Боже) говортиь на корявом русском :).  В связи с этим, хотелось бы дать несколько общих рекомендаций по использованию технологии MS Agent:

  1. Определите роль агента.
  2. Дайте возможность пользователю выбрать — использовать им персонаж или нет.
  3. Обеспечьте обратную связь с ассистентом (персонажем). Связь можно обеспечить как через привычный интерфейс, например контекстное меню персонажа, так и через более «навороченный» — набор голосовых команд.
  4. Рационально используйте анимации. Не следует делать так, чтобы Ваш персонаж постоянно нарезал круги по рабочему столу и махал руками — в очень короткий срок такой персонаж будет отключен и збыт пользователем.
  5. Подготовьте синонимичные ответы пользователю. Например, если Вы планируете использовать MS Agent для замены окон с ошибками, то следует предусмотреть реакции (анимацию, движение) и правильность построения фраз персонажа. От этого в большой степени зависит понравиться ли пользователю использование агента или нет.

Теперь непосредственно по установке MS Agent. Первое, что необходимо — это скачать ядро MS Agent с официального сайта Microsoft. Также Вы можете скачать и файлы персонажей.

После того как Вы скачаете и установите пакет MS Agent, неободимо выполнить следующие действия:

msagent_1

  1. Запускаем Delphi (я использую Delphi 2009);
  2. Выбираем в меню «Component»—>»Import Component…»
  3. Помня о том, что MS Agent — это ActiveX компонент, выбираем в появившемся окне «Import ActiveX Control» и жмем кнопку «Next». После чего Delphi сгенерирует список доступных ActiveX-компонентов.
  4. Во всем этом безобразии многообразии ищем компонент с названием Microsoft Agent Control 2.0. Выбираем его и жмем «Next». В итоге нам предложат выбрать страницу палитры компонентов на которую следует поместить пиктограмму компонента, путь до юнита компонента и пр. Всё это можно оставить как есть и нажать два раз «Next» и, после этого «Finish«

В результате Delphi сгенерирует нам unit компонента с говорящим названием AgentObjects_TLB и кучей комментариев на тему использования функций и параметров. Теперь можно смело приступать к программированию.

2. Подключаем MS Agent к приложению.

Для начала определим порядок действий, которые нужно проделать для того, чтобы начать работать с одним персонажем:

  1. Подключиться к серверу Microsoft Agent
  2. Загрузить персонаж в коллекцию
  3. При необходимости показать персонаж

Итак, для демонстрации описаных выше действий возьмем персонажа с названием «merlin» для этого ложим в каталог с нашей будущей программой файл merlin.acs, который вы можете скачать все на том же офф.сайте Microsoft.

Теперь создаем наш проект в Delphi и на событие FormCreate главной формы пишем следующий код:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ActiveX, AgentServerObjects_TLB;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Agent : IAgentEx;
Chars : IAgentCharacterEx;
ICharID : integer;
IReqID  : integer;
implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Agent.Unload(ICharID);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
CoCreateInstance(CLASS_AgentServer, nil, CLSCTX_SERVER, IID_IAgentEx, Agent);
Agent.Load('merlin.acs', ICharID, IReqID);
Agent.GetCharacterEx(ICharID,Chars);
Chars.Show(0,IReqID);
end;

end.

Собственно, то, что мы сейчас сделали, называется «Прямое обращение к Agent Server«. Если Вы заметили — я не просил Вас использовать какие-либо компоненты — только подключаем два модуля в разделе uses и все. После запуска проекта можно увидеть примерно следующую картинку

msagent_2

Теперь попробуем разобраться, что мы собственно такого навояли. Прежде всего мы получили указатель на интерфейс IAgentEx, который, собственно, и позволяет нам управлять персонажем. Далее, как Вы уже догадались по названию метода (Load), мы загрузили нашего Мерлина в коллекцию.  Метод Load имеет три параметра:

  1. имя файла персонажа (входной параметр)
  2. Идентификатор персонажа (character ID, выходной параметр)
  3. Идентификатор, хранящий состояние запроса (request ID, выходной параметр).

Ну, и в конце концов, мы показали нашего персонажа пользователю, т.е. себе любимому. После закрытия формы персонаж выгружается из памяти. Все просто и доступно.

Если Вы достаточно хорошо знакомы с интерфейсами…да и с программированием на Delphi в общем, то Вы сможете без труда переделать нашу простейшую программку и использовать для связи с сервером установленный нами компонент Agent Control.  Ну, а я продолжу рассмотрение этой интересной темы программирования в следующих статьях блога.

0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
15 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Alex
Alex
13/02/2010 04:41

Почему то не появляется категории AciveX и соотвественно компонента TAgent

Alex
Alex
13/02/2010 15:59

Спасибо за ответ, уже разобрался…
на последнем шаге регистрации компонента, необходимо было добавить в новый проект

voldemar
voldemar
24/02/2010 04:31

Почему то не появляется категории AciveX и соотвественно компонента TAgent в Delphi 2009?что сделать, чтоб она появилась?

seer
seer
05/03/2010 20:28

Опубликуйте ваш Agent_Objects_TBL.pas.  Мои Delphi7 и Delphi2007 интерфейс IAgentEx в данный файл не поместили.  Откуда у вас взялся AgentServerObjects_TLB?

seer
seer
08/03/2010 19:40

«с говорящим названием AgentObjects_TLB» и uses … AgentServerObjects_TLB;
нестыковочка…

Алекс
Алекс
01/05/2012 16:49

Вы хоть код проверяете? или копипастите из интернета:..Ничего страшного, что переменных он не видит?

[Error] Main.pas(212): Undeclared identifier: ‘IAgentEx’
[Error] Main.pas(213): Undeclared identifier: ‘IAgentCharacterEx’
[Error] Main.pas(1249): Undeclared identifier: ‘CLASS_AgentServer’
[Error] Main.pas(1249): Undeclared identifier: ‘IID_IAgentEx’

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ImgList,DateUtils,ActiveX,ComObj,WordXP, ExtCtrls,
cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage,
cxEdit, DB, cxDBData, cxGridLevel, cxGridCustomTableView,
cxGridTableView, cxGridDBTableView, cxClasses, cxControls,
cxGridCustomView, cxGrid, ADODB, Buttons, PngSpeedButton, RzButton,
RzPanel, RzPrgres, StdCtrls, sSkinProvider, sSkinManager,AgentObjects_TLB,
XPMenu, Tray, pngimage, OleCtrls;

Рома
Рома
07/07/2012 20:30

Здравствуйте. Вопрос автору сайта. А почему вокруг персонажа непрозрачный прямоугольник получается?

Рома
Рома
08/07/2012 14:22

Vlad, персонаж с официального сайта макрофака скачан. Не работает — ну и хрен с ним. Меньше чужого больше своего в приложении будет.:)

trackback

[…] Поиск в строках. Наивный алгоритм на Delphi    MS Agent в Delphi. […]