使用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脚本文件时需要注意里面是否具有恶意代码。

Posted in: EJSTool

Tags:

添加评论

  Country flag

biuquote
  • 评论
  • 在线预览
Loading