??xml version="1.0" encoding="utf-8" standalone="yes"?> input高度固定Q自动增?lt;br> <br> <textarea type="text" style="width:260;overflow-x:visible;overflow-y:visible;"></textarea>
<input type="text" style="width:60;overflow-x:visible;overflow-y:visible;">
textarea宽度固定Q自动增?lt;br>
2.验证是不是ؓ(f)汉字或者字母或者数?正规字符)
var corName=document.getElementById("displayName");
if(corName.value==""||!corName.value.match(exp1)){
document.getElementById("displayNameInfo").innerHTML="<font color='red' >昄名不能ؓ(f)IZ只能为字母和汉字l成</font>";
corName.focus();
return false;
}
]]>
http://examples.adobe.com/flex2/inproduct/sdk/explorer/explorer.html
http://www2.flash8.net/teach/6200.htm
序大本营战士
atyzy(W笑)
---- Microsoft Agent是微软公怺1997q?月发布的一代理Y件开发技术,而后被集成到Internet Explorer 4.0 Plus?qing)更高版本中Q目前版本ؓ(f)2.0Q支持简体中文。作ZUY件代理工PAgent以其强大的交互功能、鲜明的人性特炏V优的操作界面和简便统一的编E方法,对由菜单、按钮、提C框{组成的传统人机交互方式产生了很大媄(jing)响,在多媒体创作、Web应用、教育Y件、Y件帮助系l和辅助工具制作{方面,hqK的应用前景?
一?Microsoft Agent技术简?
---- Agent一词的中文意思是“代理”,故名思意Q这cM理Y件的主要作用是提供一U易于理解和使用的操作界面,接受用户的指令、代替用户完成某些复杂繁琐的工作、或为用h供帮助。科学研I表明:(x)从h机工E的角度考虑Q赋予电(sh)脑或E序更多人性化色彩Q如支持语音合成输出信息、语韌别输入指令、智能提C、动ȝQ能够充分提高hZ互的有效性和易用性?
---- 我们知道Q在Office 97帮助pȝ中有一U叫作Office助手的代理YӞ其中q默风趣的动Mh物,如“大眼夹”,能够Ҏ(gu)用户的操作步骤“智能化”地提出一些徏议或帮助信息。与Office助手相比QAgent功能更加丰富强大Q表现在Q?
Office助手沿用传统的不透明矩ŞH口Q窗口后面的背景被完全挡住;Agent动画人物本n是一个“AlwaysOnTop”窗口,只有人物w体部分挡住背景Q其余部分透明?
Office助手只允许Office 97的各个组件调用,Agent动画人物可由MWindowsE序调用Q?
Agent支持文字气球和输入提C条Q在输出语音的同时把文字输出至一个卡通式文字气球中。如果电(sh)脑系l中安装有Agent语音识别引擎Q当用户按住输入键,如Scroll Lock键,在Agent人物下方出现一个输入命令窗口,表示它正在“聆听”用L(fng)语音命o(h)?
Agent提供Genie、Merlin、Bobby和Peedy{动Mh物,不仅h优美诙谐的动作,而且可以通过声卡、麦克风与用户交谈?
二?Microsoft Agent安装Ҏ(gu)
---- Agent是一UActiveX控gQ其服务器程序(C:\WINDOWS\MSAGENT\Agentsvr.exeQ运行在Win95/98/NT操作q_上,为其它调用Agent的客L(fng)序提供服务。客L(fng)序可以是利用VB、C++、Delphi、VFP、PB{开发的应用软gQ也可以是HTML文g中的Visual Script、Java Script脚本语言代码?
安装Agent核心lgMsagent.exe?
安装Lernout & Hauspie TruVoice Text-to-Speech EngineQ完成从文字合成语音的工作,目前版本只支持英语)Cgram.exe?
安装Microsoft Command and Control Speech EngineQ提供语韌别功能,目前版本只支持英语)Actcnc.exe?
Agent动画人物人物数据文g。Agent支持单结构角色文Ӟ.acsQ角色数据与动画数据存于同一个文ӞQ也支持分离l构角色文gQ?acfQ角色数据存?acf中,动画数据存于.aca中)。基于本地硬盘和|络的应用程序可采用.acs文gQ基于Web面的HTML文g在浏览器中访问时?x)自动调用,习(fn)惯上多使?acs文g?
---- 上述文g可从 下蝲?
三?Microsoft Agent~程要点
---- 1?在Delphi中添加Agent控g
---- 在Delphi IDE中选择菜单ComponentQImport ActiveX Control——在Import ActiveX下的列表框中选择Microsoft Agent Control 2.0QVersion 2.0Q,点击按钮Install——在Install对话框中点击按钮OK——在Confirm对话框中点击按钮Yes——在对话框中点击按钮OK。至此,Agent控g被添加到Delphilg板ActiveX上?
---- 2?在Delphi中调用Agent控g
---- ⑴、在Delphi IDE 中新建Project1Q包含Form1Q,在Form1上放|Agent1QName属性ؓ(f)MyAgentQ、Button1?
---- c(din)定义变量?
Var Peedy: IagentCtlCharacterEx; Request1,Request2: IagentCtlRequest;
---- ⑶Agent主要属性、方法、事件?
---- ①Characters属性与Load、UnloadҎ(gu)Q初始化AgentQ加载动L据,卸蝲动画人物
---- Request1 := MyAgent.Characters.Load( Peedy, C:\Windows\System\Peedy.acs );
---- Peedy := MyAgent.Characters.Character( Peedy );
---- MyAgent.Characters.Unload(Peedy);
---- ②Show与HideҎ(gu)Q显C、隐藏Agent动画人物。参数Fast表示动画人物昄、隐藏的速度。Fast?表示Agent飞入、飞出,Fast?表示Agent直接出现、消失,没有动画q程?
---- Peedy.Show(0);
---- Peedy.Hide(1);
---- ③StopAll、StopҎ(gu)Q停止所有动作?
---- Peedy.StopAll();
---- Peedy.Stop(Request);
---- ④Connected属性:(x)Agent是否与Microsoft Agent服务器连接?
---- MyAgent.Connected := True;
---- ⑤Get_Height、Get_Width、Set_Height、Set_WidthҎ(gu)Q获得、设|Agent动画人物的高度、宽度?
AgentHight := Peedy.Get_Height; AgentWidth := Peedy.Get_Width; Peedy.Set_Height(
round(AgentHeight / 2 )); Peedy.Set_Width( round( AgentWidth / 2 ));
---- ⑥MoveToҎ(gu)Q参数xQy表示Agent动画人物Ud到的坐标Q参数Speed表示Ud的速度?
---- Peedy.MoveTo( (Screen.Width-Peedy.Get_Width) Div 2, (Screen.Height-Peedy.Get_Height) Div 2, 2 );
---- ⑦InterruptҎ(gu)Q中断指定角色的动画。在几十U动d作中Q有一cd~名ؓ(f)“ing?的动作比较特D,如“processing”、“searching”、“reading”、“writing”,一旦执行就必须通过调用另外一个动Mh物的InterruptҎ(gu)才能中断 。角色不能中断自w的动作Q否则会(x)D异常?
Request1 :=
Robby.Play(reading); Peedy.Interrupt(Request1);
---- ⑧WaitҎ(gu)Q在多个不同动画人物之间协调动画动作Q如{待sRobby的当前动作执行完毕后QPeedy做另外一个动作?
Request1 := Robby.Play(read); Peedy.Wait(Request1); Peedy.Play(search);
---- ⑨PlayҎ(gu)Q执行指定的动画动作Q参数AnimationZ帔RQ表C动ȝ型。Agent提供了几十种预定义动作,开发Y件时只需直接调用q些帔R卛_。下面简要介l其中常用的一些常量仅供编E参考?
---- 动作cd 中文含意 动作cd 中文含意 动作cd 中文含意
Acknowledge 承认
LookDown 向下?Sad (zhn)伤 Alert 警告 LookDownBlink 向下看眨?Search L
Announce 声明 LookUp 向上?StartListening 开始聆?Blink 眨眼 LookUpBlink
向下看眨?StopListening 停止聆听 Confused qh LookLeft 向左?Suggest
Congratulate 贺 LookLeftBlink 向左看眨?Surprised 吃惊 Decline 拒绝
LookRight 向右?Think 思?DontRecognize 不承?LookRightBlink 向右看眨?
Wave 挥动 Explain 解释 MoveDown 向下Ud Write 书写 GestureDown 向下姿势
MoveUp 向上Ud Processing 计算…?GestureUp 向上姿势 MoveRight 向右Ud
Reading 阅读…?GestureLeft 向左姿势 MoveLeft 向左Ud Searching L…?
GestureRight 向右姿势 Pleased 高兴 Writing 书写…?GetAttention 获得注意
Read 阅读 Greet 问?RestPose 恢复初始状?Request := peedy.Play(search);
---- ⑩SpeakҎ(gu)QAgent通过调用语音合成引擎Q支持英语的语音合成输出功能Q只需输入英文字符ԌAgentp通过声卡、音“说话”。Agent的当前版本尚不具备支持中文语韛_成功能,所以只能以.wav文g的Ş式播放中文。用时可以想要说的中文句子预先录好,?wav形式存储Q在E序中调用即可。参数Text表示文字气球中显C的文字Q参数url表示.wav文g的\径?
---- Peedy.speak(嗨,朋友们,你们好,现在由我为?zhn)提供帮助Q?C:\新徏文g夹\Help.wav);
---- Peedy.Speak( Do you like my help? If so, Please send me an email! Thank you!, );
---- ⑾Commands.AddҎ(gu)Q在Button1Click事g中ؓ(f)Agentd自定义语韌别命令,参数const Name表示语音命o(h)的标识,参数Caption表示该命令在输入命o(h)H口中的昄标题Q参数Voice表示该命令对应的语句。当用户通过麦克风向动画人物发出语音命o(h)Ӟ触发Agent的Command事gQ因此我们可以另外编写一个过E完成语韌别功能?
procedure TForm1.Button1Click(Sender: TObject); begin Peedy.Commands.Add(Delphi,Run
Delphi,Delphi,True,True); Peedy.Commands.Add(Visual Basic, Run VB,VB,True,True);
Peedy.Show(0); Peedy.Speak(What can I do for you, sir?,); end;
---- 按F9q行E序。以上程序在Delphi3.0/4.0、Windows95/98/NT体中文版环境下调试通过?
<table border="1">
<thead onclick="order()" style="cursor:hand;">
<th>Item 1</th><th>Item 2</th><th>Item 3</th><th>Item 4</th>
</thead>
<tr><td>12.3</td><td>423</td><td>86.83</td><td>1.213</td></tr>
<tr><td>2</td><td>434</td><td>5.334</td><td>.234</td></tr>
<tr><td>33</td><td>43</td><td>5.223</td><td>8.73</td></tr>
<tr><td>21.3</td><td>234</td><td>52.34</td><td>.666</td></tr>
<tr><td>33.4</td><td>59</td><td>67.2</td><td>.426</td></tr>
</table>
</body>
</html>
function getFormAsString(formName){
returnString ="";
formElements=document.forms[formName].elements;
for(var i=formElements.length-1;i>=0; --i ){
returnString+="&"
+escape(formElements[i].name)+"="
+escape(formElements[i].value);
}
}
It allows code in a browser to use Java functions running on a web server just as if it was in the browser.
DWR consists of two main parts:
DWR works by dynamically generating Javascript based on Java classes. The code does some Ajax magic to make it feel like the execution is happening on the browser, but in reality the server is executing the code and DWR is marshalling the data back and forwards.
This method of remoting functions from Java to JavaScript gives DWR users a feel much like conventional RPC mechanisms like RMI or SOAP, with the benefit that it runs over the web without requiring web-browser plug-ins.
Java is fundamentally synchronous where Ajax is asynchronous. So when you call a remote method, you provide DWR with a callback function to be called when the data has been returned from the network.
The diagram shows how DWR can alter the contents of a selection list as a result of some Javascript event like onclick.
DWR dynamically generates an AjaxService class in Javascript to match some server-side code. This is called by the eventHandler. DWR then handles all the remoting details, including converting all the parameters and return values between Javascript and Java. It then executes the supplied callback function (populateList) in the example below which uses a DWR utility function to alter the web page.
DWR helps you in producing highly interactive web-sites by providing some Javascript libraries to help with DHTML and by giving you a set of examples to copy from.
For details on how to get started with DWR see the getting started guide and download instructions.
//---------------------------以下是中文介l?0--------------------------------------------------------------
java代码: |
web.xml配置 <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> |
java代码: |
publicvoid handle(HttpServletRequest req, HttpServletResponse resp) throwsIOException { String pathinfo = req.getPathInfo(); if(pathinfo == null || pathinfo.length() == 0 || pathinfo.equals("/")) { resp.sendRedirect(req.getContextPath() + req.getServletPath() + '/' + "index.html"); }else if(pathinfo != null && pathinfo.equalsIgnoreCase("/index.html")) { doIndex(req, resp); }else if(pathinfo != null && pathinfo.startsWith("/test/")) { doTest(req, resp); }else if(pathinfo != null && pathinfo.equalsIgnoreCase("/engine.js")) { doFile(resp, "engine.js", "text/javascript"); }else if(pathinfo != null && pathinfo.equalsIgnoreCase("/util.js")) { doFile(resp, "util.js", "text/javascript"); }else if(pathinfo != null && pathinfo.equalsIgnoreCase("/deprecated.js")) { doFile(resp, "deprecated.js", "text/javascript"); }else if(pathinfo != null && pathinfo.startsWith("/interface/")) { doInterface(req, resp); }else if(pathinfo != null && pathinfo.startsWith("/exec")) { doExec(req, resp); }else { log.warn("Page not found. In debug/test mode try viewing /[WEB-APP]/dwr/"); resp.sendError(404); } } |
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<display-name>DWR Servlet</display-name>
<description>Direct Web Remoter Servlet</description>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<dwr>
<allow>
<convert converter="bean" match="dwr.sample.Apartment"/>
<create creator="new" javascript="ApartmentDAO" class="dwr.sample.ApartmentDAO">
<include method="findApartments"/>
<include method="countApartments"/>
</create>
</allow>
</dwr>
<script src='dwr/interface/ApartmentDAO.js'></script>
<script src='dwr/engine.js'></script>
<script src='dwr/util.js'></script>
function updateTotal() {
$("resultTable").style.display = 'none';
var bedrooms = document.getElementById("bedrooms").value;
var bathrooms = document.getElementById("bathrooms").value;
var price = document.getElementById("price").value;
ApartmentDAO.countApartments(loadTotal, bedrooms, bathrooms, price);
}
function loadTotal(data) {
document.getElementById("totalRecords").innerHTML = data;
}
function updateResults() {
DWRUtil.removeAllRows("apartmentsbody");
var bedrooms = document.getElementById("bedrooms").value;
var bathrooms = document.getElementById("bathrooms").value;
var price = document.getElementById("price").value;
ApartmentDAO.findApartments(fillTable, bedrooms, bathrooms, price);
$("resultTable").style.display = '';
}
function fillTable(apartment) {
DWRUtil.addRows("apartmentsbody", apartment, [ getId, getAddress, getBedrooms, getBathrooms, getPrice ]);
}