(( سرگرمي هاي مايکروسافت))
Microsoft Agent
يكي از سرگرم كننده ترين فن آوريهاي
Microsoft مي باشد كه تا كنون توانسته بسيار مورد علاقه كاربران قرار بگيرد.
Agentها به برنامه هاي شما جذابيت زيادي مي دهند و
امكان ارتباط بهتر و جالبتري را با كاربر ايجاد
ميكنند.اولين باري که از اين تکنولوژي استفاده شد در
برنامه
Office 97
بود که خيلي مورد علاقه کاربران قرار گرفت. من اون موقع
خيلي گشتم تا بتونم از اين امکان استفاده کنم ولي خوب
نتونستم ): اما بعدها با پيشرفت کردن علم برنامه نويسي اين
تکنولوژي در اختيار ديگران هم قرار گرفت. براي همين در
اوايل فقط در
Office بود که از اين امکان استفاده مي شد
حالا اينا رو گفتم اما ببينيم اصلاً
Agent
چي هست؟
شما اگه از
Office
استفاده ميکنيد حالا هر کدوم از برنامه هاش که باشه (Word
،Excel،FrontPage...)
يک شکلکي رو ميبينيد که هميشه نسبت به کارهايي که انجام
ميدين يک سري حرکات از خودش نشون ميده که هم سرگرم کننده
هست هم آموزنده. حالا حتماً متوجه شدين که در مورد چي صحبت
ميکنيم (هر چند که ميدونم ميدونستيد (; ) خوب حالا مي
خواهيم ببينيم که چطور ميشه از اين امکان تو برنامه هاي
خودمون استفاده کنيم مثلاً وقتي برنامه داره کار ميکنه يه
شکلکي بياد براي کاربر ادا در بياره تا طرف نفهمه که
برنامه چيکار ميکنه (: يا مثلا موقع ذخيره کردن و بازيابي
کردن و يا جستجو و... يک سري حرکات مربوط به آن عمل انجام
بده.اينکار خيلي ساده است و فقط کافي هست شما يک
Agent رو انتخاب کنيد و در برنامتون تعريفش کنيد و بعد هر کاري که خواستين
رو بهش دستور بدين تا براتون انجام بده. ضمنا شما لازم
نيست اصلاً غصه درست کار کردن اون رو بخورين چون خود
Windows اونو کنترل ميکنه که يه وقت کار بدي
نکنه ((: شما نميتونيد که
Agent
رو داخل يک جعبه مکالمه (Dialog Box)
قرار بدين و فقط ميتونيد جاي اوليه اون رو انتخاب کنيد بعد
نمايش بدين و کاربر ميتونه اونو به دلخواه خود تغيير مکان
بده با
Drag کردن اينکار رو انجام ميده. خوب حالا براي شروع کار به يک سري
Agent
نياز داريم که البته همراه ويندوز هميشه يک سري همراه
هستند بهترين اونها که ميتونه کارهاي زيادي انجام بده
(منظور حالتهاي زيادي براش تعريف شده)
Merlin هست که يک جادوگر پير مي باشد. براي
Download کردن اينها ميتونيد به سايتهايي که معرفي ميکنم يک سري بزنيد. ضمناً
شما خودتون هم ميتونيد يک
Agent طراحي بکنيد که براي اينکار بايد از يک سري نرمافزار استفاده
کنيد.براي اينکه کاربر بتونه از
Agent
برنامه شما استفاده کنه بايد حتماً
Microsoft Agent Server رو نصب کنه. که البته من تا حالا تو هر ويندوزي که برنامم رو اجرا
کردم نصب شده بوده فکر کنم اين برنامه همراه خود ويندوز
هست (; ولي اگه نبود شما ميتونيد يک سري به آدرس زير بزنيد
اونجا چيزهاي جالبي در اين مورد داره که يکم مطالعه کنيد
بد نيست:
http://www.microsoft.com/msagent
اين مطالب تحت عنوان
Microsoft Agent Software Development Kit هست که در اونجا شما همچنين ميتونيد نرم افزار
Microsoft Agent Character Editor
رو براي درست کردن
Agent
دريافت کنيد. در اين مقاله ما در مورد
Voice Command
(فرمانهاي صوتي) و طراحي
Agent
صحبت نميکنيم و فقط طرز استفاده از اين امکان رو شرح ميدم
که خودتون بعداً ميتونيد در موردش بيشتر جستجو کنيد. ما
براي کارمون فقط احتياج به
Agent Server و يک کاراکتر داريم.خوب حالا ميريم سر اصل مطلب. بعد از اينکه مطمئن
شدين روي ويندوزتون
AgentServer رو دارين دلفي رو اجرا کنيد و مراحل زير رو مو به مو انجام بدين:
1.
Component | Import ActiveX Control رو انتخاب کنيد.2.
Microsoft Agent Control رو از تو ليست پيدا کنيد و رو ي دکمه
Install کليک کنيد.3.
خوب حالا بايد تو قسمت
ActiveX
يک آيکوني شبيه به
MenInBlack داشته باشيد.
خوب تا يادم نرفته اينو بگم که براي پيدا کردن يک کاراکتر
روي ويندوزتون بايد براي
acs.* جستجو کنيد که البته به طور عادي اگر
Agent Server نصب باشه توي شاخه
Windows
يک
msagent بايد وجود داشته باشه و داخل اون هم يک شاخه ديگه به نام
Char هم هست که توش يک يا چند کاراکتر وجود
داره که اگر از
XP
استفاده ميکنيد حتماً يکيش
Merlin.acs
هست (که من خيلي بهش علاقه دارم (: ) براي همين ما بايد تو
برنامه مون چک کنيم که آيا اين شاخه وجود داره يا نه اگه
وجود داشت ميدونيم که
Agent
Server
روي ويندوز کاربر نصب هست و ما مي تونيم از
Agent استفاده کنيم.
خوب براي اينکار بايد اول
ActiveX
رو به روي فرم منتقل کنيم با اينکار يک
type با نام
TAgent به تعاريف فرم اضافه ميشه. بعد بايد يک متغيير تعريف کنيم که از نوع
Boolean
باشه تا با اون چک کنيم که آيا
Agent Server
نصب هست يا نه براي اينکار ميشه از
Code زير استفاده کرد:
TYourObject
private
AgentInstalled: Boolean;
function AgentIsInstalled: Boolean;
procedure CreateAndLoadAgentIfInstalled;
function GetColorDepth: Word;
function GetWinDir: String;
procedure SetFormColor;
function AgentWasClicked
شما ميتونيد روي ويندوز کاربر به دنبال اون شاخه و
کاراکتري که مي خواهيد از او استفاده کنيد بگرديد و اگه
بود کار رو باهاش شروع کنيد اگه هم نبود خوب ديگه کاربر
بايد محيط خشک برنامتون رو تحمل کنه (;
حالا مثلاً ما مي خواهيم از
Merlin
استفاده کنيم:
function TYourObject.AgentIsInstalled: Boolean;
begin
Result := (FileSearch('Merlin.acs',
Format('%s\MSAGENT\CHARS', [GetWinDir]))<>'');
end;
function TYourObject.GetWinDir : string;
var
WinDirZ : array[0..256] of Char;
begin
GetWindowsDirectory(WinDirZ, SizeOf(WinDirZ));
Result := StrPas(WinDirZ);
end;
نکته: در بالا براي بدست آوردن نام شاخه اي که ويندوز در
آن نصب هست از
API استفاده شده که مسير کامل ويندوز را به ما ميدهد
حال که فهميديم کاربر امکان استفاده از
Agent
رو داره مي تونيم کار رو شروع کنيم. در ادامه بايد يک
Object براي
Agent
خودمون بسازيم تا از اين به بعد از اون استفاده کنيم و
مجبور نباشيم از
ActiveX استفاده کنيم. براي اينکار از کد زير ميشه استفاده کرد:
implementation
uses
AgentDemoConsts,
Registry,
OLECtrls, AgentObjects_TLB;
procedure
TYourObject.CreateAndLoadAgentIfInstalled;
const
RightBias = 80;
TopBias = 70;
var
tp: TPoint;
begin
if (AgentInstalled) and not (Assigned(RobotAgent))
then begin
RobotAgent := TAgent.Create(Application);
RobotAgent.Characters.Load('Merlin','Merlin.acs');
{ Move the Agent to the center of the screen }
tp.x := (Screen.Width div 2)-(Width div 2);
tp.y := (Screen.Height div 2)-(Height div 2);
with
RobotAgent.Characters.Item['Merlin'] do begin
MoveTo(tp.x+RightBias, tp.y+TopBias, 0);
Show(0);
Play('Greet');
Play('Explain');
Speak(SDemoIntro, '');
Play('Pleased');
Play('RestPose');
Speak(SWhisper, '');
Speak(SMonotone, '');
Speak(SMap, '');
end;
end;
end;
چند خط اول که مشخص هست چه کار ميکنه. اما بعد از اينکه
کاراکتر تعريف شد (RobotAgent) اونو به
Merlin نسبت ميديم وبعد هم اونو به وسط صفحه نمايش منتقل ميکنيم و حالا
ميرسيم به مهمترين قسمت کار که دستور دهي به
Merlin هست.
با استفاده از
Play شما ميتونيد به
Agent دستور بدين اما براي هر
Agnet دستورات متفاوت هست يعني ممکن هست که دستوارتي که براي
Merlin
کار ميکنه براي
Robby
(که يکي ديگر از
Agent
ها هست) کار نکنه. شما اگه کاراکترتون رو خودتون درست
ميکنيد خوب پس ليست دستوراتش رو داريد اما اگه اونو از
جايي
Download
ميکنيد حتما ليست دستوراتش هم همراش هست. مثلا شما ميتونيد
در مورد
Merlin
و يا
Robby و يا چند
Agent ديگه از تو همون آدرسي که در بالا دادم ليست دستوارتش رو بگيريد.
حالا در کد بالا ميبينيد که در ابتدا از دستور
Show استفاده شده اين دستور براي به نمايش در آوردن
Agent هست و در تمامي آنها کار ميکنه. بعد با استفاده از
Play کارهاي مورد نظرمون رو به
Agent
ميگيم. مثلاً من در ابتدا با استفاده از دستور
Greet
از
Agent
خواستم که سلام کنه و بعد هم با استفاده از
Explain خواستم که شروع کنه به گفتن يک سري مطالب که با دستور
Speak
اونها رو که در متغيير
SDemoIntro
قرار داده ام به صورت يک بالون که بالاي سرش باز ميشه
ميگه. شما براي اينکه بگين مطالب رو با چه حالتهايي بخونه
مي تونيد از دستواراتي که در جدول زير آوردم استفاده کنيد:
Addition |
Resulting capability |
\Chr="Whisper"\ |
The Agent will whisper the following text. |
\Pau=N\ |
The Agent will pause for the designated
number of milliseconds. |
\Emp\ |
The Agent will give special emphasis to the
following phrase. |
\Chr="Montone"\ |
The Agent will emphasize nothing at all. |
\Map=<spoken text> |
The Agent will say one thing, and =<spoken
text> "think" another. |
خوب حالا براي اينکه بيشتر متوجه بشين در زير يک سري مثال
آوردم که ميتونيد اونها رو در برنامه استفاده کنيد و نقش
هر کدوم از دستوارت رو ببينيد:
SFuzzyWuzzy = 'Fuzzy wuzzy was a bear;\Pau=500\ ' +
'fuzzy wuzzy had no hair;\Pau=500\ ' +
'fuzzy wuzzy wasn't very \Emp\fuzzy, \Emp\was he?';
SWhisper = '\Chr="Whisper"\Now I will whisper: ' +
'Whisper whisper whisper.';
SMonotone = '\Chr="Monotone"\Now I will speak in a
' +
'monotone. Pat Paulsen for President.';
SMap = '\Map="I will now continue to speak in ' +
'English, but you will see my words ' +
'translated into German in the balloon above ' +
'my head. How are you today? I am just ' +
'\Emp\dandy!"="Jetzt werde ich zwar immer ' +
'noch in Englisch reden, sie werden ' +
'aber meine Woerte im Balloon obenauf ins ' +
'Deutsch uebersetzt sehen. Wie geht es ' +
'Ihnen heute? Mir geht es ganz gut!"\';
Ehsanelaye_1366@yahoo.com