使用EJS进行GUI编程(一)
三月 8, 2015 at 10:34 下午
—
Easton
众所周知,原生JavaScript是不支持GUI编程的,在对原生JavaScript标准进行拓展后,我让EJS拥有了GUI编程的能力。
下面就让我们来学习下EJS是如何进行GUI编程的吧。
首先,我们谈谈EJS是如何支持GUI编程的。EJS是基于.NET平台的脚本语言,因此它天生就拥有强大的运行库支持,通过.NET平台提供的GUI接口,我们可以方便的让EJS具有与C#或F#一样的强大功能。
为了解决这个问题,我也花了一点时间解决各种兼容性问题,尤其是脚本解释运行方面的问题。因为原生JavaScript是没有事件这个概念的(注意区分浏览器支持的JS和原生的JS标准,浏览器支持的JS是支持DOM事件的,并且浏览器中的JS本身就属于事件驱动的),因此为了支持这个功能,我对JavaScrpt引擎进行了改造,让它支持+=事件绑定。由于语言特点,我这里并没有让它支持-=事件取消(因为语言特点的问题,JS不太好实现这个语法,而且这个功能并不实用)。
下面来说说微软的JScript引擎,微软的JScript甚至不支持新的事件声明,这对GUI编程来说是一件多操蛋的事情,微软原文:http://ily.so/aYnuui。
声明:我本文使用的EJS脚本解释器的IDE是V1.2 R1版本的,这个版本是我2015年3月8日发布的最新版本,在http://ily.so/2EZZz2可以下载到。
建议下载绿色版,它可以脱离.NET环境运行,如果下载的5.5MB的普通版则需要安装.NET 4.0框架和.NET 2.0框架。
下面我们开始通过一段小代码来学习EJS下是如何进行GUI编程的。
代码如下:
//在shell中执行可以隐藏控制台
console.hide();
//引用.NET框架内的类,这些类通过微软MSDN:http://ily.so/7Zbi6j 可以查找到详细用法。
var Form = System.Windows.Forms.Form;
var FormStartPosition = System.Windows.Forms.FormStartPosition;
var Button = System.Windows.Forms.Button;
var TextBox = System.Windows.Forms.TextBox;
var Application = System.Windows.Forms.Application;
var Point = System.Drawing.Point;
function main()
{
//实例化类
var frm = new Form();
frm.Text = "EJS GUI编程实例01";
var txt = new TextBox();
txt.Text = "hello";
txt.Location = new Point(20, 20);
frm.Controls.Add(txt);
var txt2 = new TextBox();
txt2.Multiline = true;
txt2.Location = new Point(20, 90);
frm.Controls.Add(txt2);
var btn = new Button();
btn.Text = "测试";
btn.Location = new Point(20, 50);
//为按钮绑定单击事件
//脚本解释器会自动匹配事件类型
btn.Click += function(sender, e)
{
alert(txt.Text);
alert("您单击的是:\"" + sender.Text + "\"按钮。");
};
frm.AcceptButton = btn;
frm.Controls.Add(btn);
//运行
Application.Run(frm);
}
//别忘了调用main,当然,你也可以把所有代码放在main函数外面直接执行
//但是我不推荐大家使用这种方法,因为放在函数内部有个好处是可以使用return停止执行后面的代码。
main();
//恢复shell窗口,这样不会因为出错导致shell进程一直驻留在系统
console.show();
上面的代码直接在IDE环境中运行就可以看到一个窗口出现,并且可以单击按钮。
如下图所示:
是不是感觉很简单呢?
为了方便运行脚本代码,在1.2版本的EJS中,我新增了Shell工具,通过注册SJS文件关联,可以让我们双击SJS文件运行脚本。
在本文中,我们新建的脚本文件也是保存为*.sjs文件的。
注意:在运行网络上下载的SJS脚本文件时需要注意里面是否具有恶意代码。
ff6b9846-1eda-43d3-89c4-1971bf7f2b3a|15|4.1|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Posted in: EJSTool
Tags: