ardio v17.121 更新   (2018/6/18):
---------------------------------------------------------------------------
1、修正编辑树形控件的范例,未处理取消编辑的问题,感谢 make2855 反馈。
2、修正inet.httpFile下载百度云获取不到文件名的问题,感谢 nlysh007 把名。

aardio v17.120 更新   (2018/6/14):
---------------------------------------------------------------------------
1、给力的升级 web.rest,可以用键值对匹配一组返回结果。
可以在API对象的成员中使用一个表对象批量替换多个URL模板的占位符。

可能新手看不明白为何这个升级“给力”,
借用一下 getpost 发的帖子中的源码,其中主要的抓取代码用这个功能可以缩减如下:
http://bbs.aardio.com/forum.php?mod=viewthread&tid=22550&extra=

import crypt;
import console; 
import web.rest.jsonLiteClient; 

//创建HTTP客户端
var http = web.rest.jsonLiteClient()

//第一步、声明获取视频基本信息的接口
var boosj = http.api("http://www.boosj.com/drama_43355_29.html",,{
    id = '<@vid:"@>([0-9]+)';
    name = "videoName\s*?\:\s*?\'(.*?)\'"
} )

//第二步、找到分段视频配置文件m3u8 
data = boosj.get();
data.t = crypt.md5(data.id+"01136c5948d353b1bg2",false); 

//第三步、提取分段视频网址        
var gslb = http.api("http://gslb.boosj.com/f_hls/?_id={id}&t={t}")
var m3u8 = gslb[ data ].get();

if( m3u8["error"] == 200 ){
    var m3u8Urls = http.api(m3u8.url ++ "?" ++ m3u8.t,"GET",{"(http.*?\.ts)"})
    var urls = m3u8Urls.get();
    console.dumpJson( urls )
}

console.pause(true);


aardio v17.119 更新   (2018/6/14):
---------------------------------------------------------------------------
1、改进 win.ui.layered 绘图效果

aardio v17.118 更新   (2018/6/14):
---------------------------------------------------------------------------
1、优化plus控件、win.ui.tabs绘图效果,修正父窗口启用内部裁剪偶尔出现的不刷新问题。
2、win.ui.tabs增加自动保持选项卡间距的功能,如果未启用固定边距,可自动保持选项卡间距不变。

aardio v17.117 更新   (2018/6/14):
---------------------------------------------------------------------------
1、改进 win.ui,不再默认导入ide扩展库。

aardio v17.116 更新   (2018/6/14):
---------------------------------------------------------------------------
1、 plus 控件改进调用skin函数时如果重写border样式,可省略设计器指定的default样式

扩展库 更新   (2018/6/12):
---------------------------------------------------------------------------
1、 golang扩展库添加更多函数,补充文档,
增加调用Go编译生成DLL、并在aardio中调用该DLL的演示.

一个简单程序,go生成的DLL优化后只有1MB多一点,不依赖外部运行库,支持WinXP,
而且还可以内存加载,非常不错,使用aardio提供的golang扩展库,编译Go代码生成DLL会非常简单。

aardio v17.115 更新   (2018/6/12):
---------------------------------------------------------------------------
1、 inet.downBox 增加 preget属性,首次连接慢的服务器可设为true

扩展库 更新   (2018/6/12):
---------------------------------------------------------------------------
1、 golang扩展库改进支持自动下载安装go编译器

aardio v17.114 更新   (2018/6/12):
---------------------------------------------------------------------------
1、 改进 zlib.httpFile 解压大文件时的重绘效果

aardio v17.113 更新   (2018/6/12):
---------------------------------------------------------------------------
1、 inet.httpFile 修正有时出现下载错误问题。
2、 inet.downBox 对于某些响应连接非常慢的下载服务器,等待连接时滚动显示进度。
3、 progress 增加 startProgress(),stopProgress()函数用于方便的启动、停止自动滚动效果。

aardio v17.112 更新   (2018/6/11):
---------------------------------------------------------------------------
1、 修正 win.ui.tabs 未保持设计时边框设置

aardio v17.111 更新   (2018/6/11):
---------------------------------------------------------------------------
1、 更新 electron.blink 以及范例工程

aardio v17.110 更新   (2018/6/11):
---------------------------------------------------------------------------
1、 修正 chrome.driver 报错

aardio v17.109 更新   (2018/6/11):
---------------------------------------------------------------------------
1、 electron.app改进支持以独立窗口运行,支持使用 favicon.ico替换窗口图标,
electron.app做了一些细节上的优化,范例和文档已改进请注意查看。

2、 chrome.app 改进支持使用CEF3嵌入为aardio子窗口运行。
chrome.app做了一些细节上的优化,范例和文档已改进请注意查看。

3、 chrome.driver 如果不指定 chromedriver的位置或版本,
chrome.driver会优先使用指定的chrome目录(或CEF3目录)下自带的chromedriver.exe,


aardio v17.107 更新   (2018/6/11):
---------------------------------------------------------------------------
1、 WebSocket在关闭连接时不再触发onError,而是触发onClose(错误代码为1006)

aardio v17.106 更新   (2018/6/10):
---------------------------------------------------------------------------
1、 chrome.app 改进可以支持CEF3,在创建窗口前调用
chrome.app.path = "cefclient.exe所在路径" 即可。

aardio v17.103 更新   (2018/6/10):
---------------------------------------------------------------------------
1、 chrome.driver 添加 removeArguments 函数,用于排除chrome启动参数

aardio v17.102 更新   (2018/6/9):
---------------------------------------------------------------------------
1、chrome.driver 范例增加调用JS,传参数并获取返回值的演示。
chrome.driver 其他一些小的优化改进。

aardio v17.101 更新   (2018/6/9):
---------------------------------------------------------------------------
1、chrome.driver, chrome.app 优化代码。
注意如果服务端调用了 chrome.app 的 aardio.js,在新版中开发时注意更新该文件。
新版aardio.js不再使用 window.name 跨域(改用更简单的URL传参)

aardio v17.100 更新   (2018/6/9):
---------------------------------------------------------------------------
1、chrome.driver, chrome.app 改进可以混合使用了,
请参考:aardio范例->Chrome->APP

2、chrome.driver 浏览器会话对象增加 doScript函数,可以方便的执行JS脚本,
增加 loadScript 函数,可以方便的加载JS脚本文件。


aardio v17.99 更新   (2018/6/9):
---------------------------------------------------------------------------
1、 改进 chrome.driver ,默认不显示新版chrome弹出来的控制台窗口。
2、 改进 chrome.driver ,使用startBrowser创建的浏览器会话,提供 hwndChrome字段用于获取chrome窗口句柄。
 
aardio v17.98 更新   (2018/6/8):
---------------------------------------------------------------------------
1、 强劲改进  chrome.driver,增加更多简化操作的接口函数,增加更多更全的接口文档

aardio v17.97 更新   (2018/6/8):
---------------------------------------------------------------------------
1、 增加 electron.driver 用于调用 ChromeDriver控制 electron

aardio v17.96 更新   (2018/6/8):
---------------------------------------------------------------------------
1、process.chrome.app 移动到 chrome.app ( 原名字空间自动重定向到 chrome.app )

2、增加 chrome.driver 用于调用ChromeDriver自动化操作Chrome浏览器。

参考帖子:ChromeDriver超级懒人库
http://bbs.aardio.com/forum.php?mod=viewthread&tid=22544

aardio v17.95 更新   (2018/6/7):
---------------------------------------------------------------------------
1、改进 inet.httpFile 默认禁用缓存

aardio v17.94 更新   (2018/6/7):
---------------------------------------------------------------------------
1、修正 win.imageList 一处bug,感谢mick反馈

aardio v17.93 更新   (2018/6/6):
---------------------------------------------------------------------------
1、更新 web.blink, electron.blink扩展库到最新版,
miniblink范例中增加嵌入网页开发工具到子窗口的演示。

aardio v17.92 更新   (2018/6/6):
---------------------------------------------------------------------------
1、增加ide接口函数  ide.getActiveDocPath() 

aardio v17.91 更新   (2018/6/6):
---------------------------------------------------------------------------
1、兼容 Linux Wine( 包含 CrossOver ) 环境,
可以编写窗口程序,因为Wine支持控制台程序有些问题,所以我增加了一个console.wine 虚拟了一个简单的控制台。

注意目前Wine下涉及COM对象的功能有些问题暂时不要用,浏览器控件经测试只有 miniblink可以正常使用。
web.form可以用于显示网页,在访问com对象是可能有bug.

2、路径对以 "//"开始时, io.fullpath,io.localpath等函数会去掉第一个斜杠并不作任何转换。

3、tonumber 支持指定字符串开始位置,
对于较长的字符串,使用这个特性就可以直接取数值,而不用先截取字符串,
web.json也应用了这个特性做了优化。


aardio v17.90 更新   (2018/6/4):
---------------------------------------------------------------------------
1、chrome.app 支持从远程网页启动应用程序( 网页必须引用aardio.js ),
aardio.js使用windows.name 跨域传递RPC接口地址,让远程网页能连接到本地RPC(动态分配空闲端口).

aardio v17.89 更新   (2018/6/1):
---------------------------------------------------------------------------
1、 增加了tcp协议实现jsonrpc的库: wsock.tcp.jsonClient。

用法请参考《aardio调用go语言演示》http://bbs.aardio.com/forum.php?mod=viewthread&tid=22524



aardio v17.88 更新   (2018/5/31):
---------------------------------------------------------------------------
1、修正新版 electron扩展库笔误一处,感谢 阿呆自传 反馈。

aardio v17.87 更新   (2018/5/31):
---------------------------------------------------------------------------
1、嵌入原版 electron 的突破式更新:
在aardio中嵌入原版 electron 可以生成非常小的独立EXE文件了,最小仅1MB多一点。
所有使用aardio编写的electron中使用共享的同版本electron运行时,在首次运行前自动下载安装(速度极快,并且仅安装一次)

注意,请新建electron工程后测试,工程范例已更新。

aardio v17.84 更新   (2018/5/30):
---------------------------------------------------------------------------
1、优化 wsock 部分代码,修正导致数据发送出错的一处bug。

aardio v17.82 更新   (2018/5/29):
---------------------------------------------------------------------------
1、优化 win.ui.layered,降低CPU占用

aardio v17.81 更新   (2018/5/29):
---------------------------------------------------------------------------
1、修正 electron.blink 在xp上不能生成独立EXE的小问题。

aardio v17.80 更新   (2018/5/29):
---------------------------------------------------------------------------
激动人心的新功能又来了:

1、aardio添加精简版electron扩展库electron.blink,
该扩展库与web.blink一样基于开源项目 miniblink。

在工程向导中点选“web界面->elctron精简版”向导,即可一键创建基于electron.blink的工程。

可以编写基于 electron的程序,并且可以减少10倍的体积了,
而且兼容 WinXP, Win7,Win10,再也不用担心费上几百MB还不支持XP了。

支持一键生成单个EXE文件。


aardio v17.79 更新   (2018/5/28):
---------------------------------------------------------------------------
为了追求那么一点完美,原来3句代码实现的 string.search 无奈的膨胀了几倍。
现在 string.search 参数中的筛选器函数可以返回非字符串值用于指定筛选条件。

我们终于可以这样任性的写代码了:

import console; 
import string.list;
import web.rest.jsonLiteClient;

var http = web.rest.jsonLiteClient();
var qq = http.api("http://www.qq.com",,{
		"\<a([^>]+)"; //找出所有a标签
		λ(a) string.list(a,"\s").href; //提出href属性
		λ(href) string.trim(href,`"'`); //去掉两头的引号
		"^http\:.+"; //只保留http开头的超链接
		λ(url) string.indexOf(url,"qq.com") ; //必须包含指定域名
	} 
);
var urls  = qq.get();

console.dumpJson(urls);
console.pause(true);


aardio v17.78 更新   (2018/5/28):
---------------------------------------------------------------------------
脑洞大开改进如下:

1、 string.search 输入的每一个模式表达式,
都可以用一个函数或 lambda表达式替代,这时候用于筛选上一次的模式匹配结果返回下一次要查找的字符串.
这样我们就可以无限的扩展模式表达式的能力了(而不用写很多循环处理的代码)

2、 string.search 的第一个参数可以直接指定一个接受匹配结果的数组,
如果参数1是数组,则函数的返回值也是该数组( 否则函数无返回值 )

3、 web.rest.client (以及所有继承的对象 )在调用api函数时,
在参数@3中指定的模式表达式也可以指定一个表达式数组,如果这样用就会
在服务器响应请求时自动调用 string.search 匹配并搜索筛选得到一个包含搜索结果的数组。
当然,跟 string.search一样,每一个模式表达式都可以用一个函数或 lambda表达式替代。


aardio v17.77 更新   (2018/5/28):
---------------------------------------------------------------------------
1、增加 string.search 函数,
可以连续指定多个模式表达式,使用前面匹配的结果作为后面匹配的参数。
此函数的作用是把模式匹配问题分解为多个小匹配分步解决。

扩展库 更新  (2018/5/27):
---------------------------------------------------------------------------
1、 web.blink 扩展库更新,优化绘图功能,透明动画窗口占用CPU大幅下降。

aardio v17.76 更新  (2018/5/27):
---------------------------------------------------------------------------
1、web.rest.client 增加一个方便的功能:
在声明API时可以直接指定一个模式表达式,用于模式匹配服务器返回的结果提取需要的部分。

示例:

	import console; 
	
	import web.rest.jsonLiteClient;
	var restClient = web.rest.jsonLiteClient();
	var baiduPan = restClient.api("https://pan.baidu.com/s/10fa9_7lg6_KhYD_B-Q_2MQ",,"yunData\.(setData%())");
	var yunData  = baiduPan.get();
	
	console.dumpJson(yunData);
	console.pause(true);


aardio v17.75 更新  (2018/5/27):
---------------------------------------------------------------------------
1、string.html 改进对script标签的处理。

扩展库 更新  (2018/5/26):
---------------------------------------------------------------------------
1、web.blink,web.kit 改进:
只要在加载网页的窗口上简单调用 winform.enableDpiScaling() 
即可自动支持系统DPI缩放。

aardio v17.74 更新  (2018/5/26):
---------------------------------------------------------------------------
1、string.html,string.xml 增强格式化效果。
改进 string.html 对html省略关闭标签的兼容性。

解析格式化HTML演示
http://bbs.aardio.com/forum.php?mod=viewthread&tid=22516


aardio v17.73 更新  (2018/5/26):
---------------------------------------------------------------------------
1、string.xml,string.html 增加格式化缩进的功能。
现在只要简单的调用 xmlDoc.outerXml(true) 就可以美化xml,html了。

aardio v17.72 更新  (2018/5/26):
---------------------------------------------------------------------------
1、改进 string.xml 对DOCTYPE的处理

扩展库 更新  (2018/5/25):
---------------------------------------------------------------------------
1、web.blink,web.kit 更新 queryEles() 函数兼容 web.form的写法(省略CSS选择器)。

aardio v17.71 更新  (2018/5/25):
---------------------------------------------------------------------------
1、修正 web.form queryEles函数范例修改节点颜色未生效问题,感谢 君子兰 反馈。

aardio v17.70 更新  (2018/5/25):
---------------------------------------------------------------------------
1、标准库添加 access.oleDb12 ,一句代码检测并安装 Microsoft.ACE.OLEDB.12.0 数据驱动.

import access.oleDb12;
access.oleDb12.install();

感谢 阿法牛 协助测试.

aardio v17.69 更新  (2018/5/25):
---------------------------------------------------------------------------
1、process 改进:如果设置了自定义环境变量参数,置于继承环境变量之前。

aardio v17.68 更新  (2018/5/25):
---------------------------------------------------------------------------
1、electron扩展库升级运行库到最新版本

aardio v17.67 更新  (2018/5/25):
---------------------------------------------------------------------------
1、string.xml 增加 eachAttribute迭代器用于遍历节点属性。
string.html 改进对空标签的支持。

aardio v17.66 更新  (2018/5/25):
---------------------------------------------------------------------------
1、string.list 增加功能:
可使用模式匹配语法指定行分隔符,可在tostring参数中重新指定拼接的分隔符

aardio v17.65 更新  (2018/5/25):
---------------------------------------------------------------------------
1、改进 string.xml 解析器,增加以下函数:
   xmlNode.getAttribute() 用于忽略大小写获取属性
   xmlNode.getParent() 用于获取节点在文档中的父节点
   xmlNode.remove() 用于在文档中移除节点
   
2、增加 string.html 解析器,基于 string.xml 实现,
string.html拥有string.xml的所有功能,并且增强了对HTML空标签、可省略闭合标签的识别规则。


aardio v17.64 更新  (2018/5/24):
---------------------------------------------------------------------------
1、process.chrome.app 增加setPos,center等函数,并且改进external对象增加更多默认函数。

aardio v17.63 更新  (2018/5/23):
---------------------------------------------------------------------------
1、web.rest.jsonLiteClient , web.rest.jsonClient 
在响应状态码为200并且获取的数据为HTML格式时自动转换为字符串(不执行JSON解析)

aardio v17.62 更新  (2018/5/20):
---------------------------------------------------------------------------
1、process.chrome.app 关闭跨域限制更简单了,示例:

    import process.chrome.app;
    var app = process.chrome.app(); 
    app.disableWebSecurity = true; 
    
2、process.chrome.app 设置userDataDir支持"%LocalAppData%"等路径环境变量,
可以更方便的指定用户数据目录到appdata目录下,方便生成绿色便携的EXE文件。


aardio v17.61 更新  (2018/5/18):
---------------------------------------------------------------------------
1、process.chrome.app 工程范例增加关闭跨域、自动化控制框架网页的演示代码。

aardio v17.60 更新  (2018/5/17):
---------------------------------------------------------------------------
1、time对象增加getMilliTime()用于获取以毫秒为单位的时间,
增加 setMilliTime()可直接使用毫秒为单位的时间更新时间对象。

aardio v17.59 更新  (2018/5/15):
---------------------------------------------------------------------------
1、 process.chrome.app() 支持在参数中指定winform或custom控件作为chrome嵌入窗口。
可隐藏chrome自带的标题栏,方便的嵌入chrome到到本地窗口中。

aardio v17.58 更新  (2018/5/15):
---------------------------------------------------------------------------
1、线程控件代码优化,线程控件范例增加跨线程调用控件函数演示。

aardio v17.57 更新  (2018/5/13):
---------------------------------------------------------------------------
1、 win.ui.tabs 增加 queryStrip, count 等函数。

aardio v17.56 更新  (2018/5/13):
---------------------------------------------------------------------------
1、 process.popen 增加 writeClose() 函数,用于写完数据后关闭进程进程输入流。

aardio v17.55 更新  (2018/5/12):
---------------------------------------------------------------------------
1、web.rest 支持模URL模板占位符内部指定斜杠,例如 {/name}
如果调用时使用动态资源名替换了该占位符会自动在前面加上斜杠,否则不添加斜杠。

aardio v17.54 更新  (2018/5/10):
---------------------------------------------------------------------------
1、改进简单跳转插件,现在可以直接输入文本并自动开始查找(禁用模式匹配),
不用再回车启动查找,但是输入完成,可以直接回车查找下一个(允许模式匹配语法)。

aardio v17.53 更新  (2018/5/10):
---------------------------------------------------------------------------
1、process.chrome.app 支持360、2345....等chrome兼容浏览器。
增加 process.chrome.path 用于获取 chrome兼容浏览器安装路径。

aardio v17.52 更新  (2018/5/10):
---------------------------------------------------------------------------
1、win.ui.tabs 改进可以自定义adjust事件(在选项卡调整布局时自动触发),
并且增加 getPos() 函数获取选项卡当前大小。

aardio v17.51 更新  (2018/5/10):
---------------------------------------------------------------------------
1、process.chrome.app 支持自定义窗口图标,自定义HTTP处理程序

aardio v17.50 更新  (2018/5/9):
---------------------------------------------------------------------------
1、process.chrome.app 增加 onQuit 事件。

aardio v17.49 更新  (2018/5/9):
---------------------------------------------------------------------------
1、增加 process.chrome.remote,用于简化启动chrome远程调试进程的代码,
参考改进的 aardio范例->Web应用->WebSocket->Chrome远程调试
2、process.chrome.app改进初始化JS接口代码。

aardio v17.48 更新  (2018/5/9):
---------------------------------------------------------------------------
1、激动人心的新功能又来了。
使用cef,electron虽然有趣,但他们的运行库实在是太大了,
而且每个软件都要带上相同的运行库,一遍又一遍,多么无聊而且浪费资源。

现在aardio提供了一个新的库 process.chrome.app,
使用这个库可以直接调用系统已安装的chrome创建应用程序。

当然 chrome没有提供一个方便的与本地代码交互的接口。
不过这没有关系,使用 aardio 我们就可以在网页Javascript里方便、简单、
直接地调用本地接口,访问本地文件。

支持XP!支持XP!支持XP!

用法:直接在工程向导里创建 chrome app就可以了。

aardio v17.47 更新  (2018/5/9):
---------------------------------------------------------------------------
1、改进 electron扩展库,修正退出aardio程序后未退出electron进程。

aardio v17.46 更新  (2018/5/8):
---------------------------------------------------------------------------
1、改进electron扩展库,现在嵌入electron更简单,可以共享公共的electron运行库,
这样发布electron程序就不用带一个巨大的运行库了(运行时检测如果运行库不存在会自动下载),
实际上每个程序都带上相同的、体积惊人的运行库是不必要的。

aardio v17.45 更新  (2018/5/8):
---------------------------------------------------------------------------
1、plus控件、按钮等在设计属性中指定[默认按钮]为true,在模态对话框中即可默认响应回车键。
2、工程管理器里对文件重命名时支持Ctrl + C,Ctrl + V等快揵键。

aardio v17.44 更新  (2018/5/8):
---------------------------------------------------------------------------
1、 listview增加listview.setColumns()函数用于传入一个列名数组快速添加多个列。
可以使用 listview.clear(true) 快速清空所有行列。

因为 win.ui.grid() 是基于listview控件,也支持以上函数。
相关范例已更新。

aardio v17.43 更新  (2018/5/7):
---------------------------------------------------------------------------
1、plus控件指定边框的border属性可以使用padding缩小高度,已添加到范例中

aardio v17.42 更新  (2018/5/7):
---------------------------------------------------------------------------
1、修正gdip.bitmap网址加载图像BUG,感谢艾克反馈。

aardio v17.41 更新  (2018/5/7):
---------------------------------------------------------------------------
1、现在只要提前调用 import inet.http,
plus控件就可以自动支持用网址指定图像参数。
gdip.bitmap也可以自动支持传入网址参数并创建图像。

import win.ui;
var winform = win.form(text="plus控件直接使用网址加载动画";right=759;bottom=469;bgcolor=0)
winform.add(plus={cls="plus";foreRepeat="center"})

import inet.http;
winform.plus.foreground = "http://s4.sinaimg.cn/large/001MqVhfzy7aSDem4Dx73&690"

winform.show() 
win.loopMessage();



aardio v17.40 更新  (2018/5/7):
---------------------------------------------------------------------------
1、 win.ui.listPopup onGetItems事件允许通过返回值指定默认选中索引。

aardio v17.39 更新  (2018/5/6):
---------------------------------------------------------------------------
1、 win.ui.listPopup 增加 onComplete 事件

aardio v17.38 更新  (2018/5/6):
---------------------------------------------------------------------------
1、改进plus控件在使用cheked属性时,自动开启“响应通知”功能。

aardio v17.37 更新  (2018/5/5):
---------------------------------------------------------------------------
1、改进标准库控件处理默认快捷键时不再使用translateAccelerator接口,避免与自定义快揵键冲突。
2、改进非模态对话框按ESC时不再关闭窗口,而是触发 winform.onCancel 事件由用户自行决定是否关闭。
模态对话框如果用户未定义onCancel,则添加默认 onCancel事件,并在onCancel内自动关闭对话框。
3、添加 win.ui.listPopup 用于显示一个弹出窗体外的的listbox控件。
用法请参考:范例程序\Windows窗口应用\orphanWindow\智能提示

import win.ui;
/*DSG{{*/
var winform = win.form(text="智能提示";right=600;bottom=400)
winform.add(
edit={cls="edit";left=190;top=301;right=525;bottom=327;db=1;dl=1;dr=1;edge=1;multiline=1;z=1};
static={cls="static";text="请在下面输入任意英文单词可弹出提示窗口,按上下方向箭可以切换选项,回车或鼠标点击可以确认输入,按ESC取消。";left=67;top=229;right=532;bottom=284;transparent=1;z=2}
)
/*}}*/

import web.rest.jsonLiteClient;
var http = web.rest.jsonLiteClient();
var suggestion = http.api("http://fanyi.baidu.com/sug?kw={0}")

import win.ui.listPopup;
var listPopup = win.ui.listPopup(winform.edit);
listPopup.onGetItems = function(text){
    var result = suggestion[ text ].post(); 
    return table.map(result.data,lambda(v) v.k + '\t ' + v.v );
} 

listPopup.onSetText = function(text){ 
    return string.split(text,'\t')[1]; 
}
  
winform.show(true);
win.loopMessage();


aardio v17.36 更新  (2018/5/4):
---------------------------------------------------------------------------
1、对状态栏【简单跳转】进行了改进,
如果开启该插件,则下次打开aardio时仍然会自动开启该插件。
如果使用右键菜单关闭该插件,则下次打开aardio时该插件仍然是关闭状态。

简单跳转插件功能改进:在使用关键字查找时,支持查找到尾部自动跳回文档的开始处继续查找。
在按模式匹配语法查找失败以后,会自动改为忽略大小写的文本搜索。

aardio v17.35 更新  (2018/5/4):
---------------------------------------------------------------------------
1、增加 wsock.addrInfo

aardio v17.34 更新  (2018/5/4):
---------------------------------------------------------------------------
1、增加 wsock.tcp.simpleHttpServer.startPort 属性,
用于配置 wsock.tcp.simpleHttpServer.stopUrl 的监听端口(不指定自动分配空闲端口)

aardio v17.33 更新  (2018/5/3):
---------------------------------------------------------------------------
1、plus控件笔误修正,感谢 艾克 反馈。

aardio v17.32 更新  (2018/5/3):
---------------------------------------------------------------------------
1、移除八进制的前缀零表示法(例如010),
这虽然是C系语言通用的表示法,但实际上8进制我们基本用不到,而0开头表示的10进制数却经常会遇到,这种表示法有时候会给我们添乱。另外aardio中本就可以使用 8#10 的方法表示8进制数,所以0前缀的表示法也显得多余。

目前新版Javascript也移除了这种表示法。

aardio v17.31 更新  (2018/5/3):
---------------------------------------------------------------------------
1、修正 string.unescape 参数为空导致的问题。

aardio v17.30 更新  (2018/5/2):
---------------------------------------------------------------------------
1、 修正上版一处笔误,感谢艾克反馈。

aardio v17.29 更新  (2018/5/2):
---------------------------------------------------------------------------
1、 修正 win.ui.tabs 的 clear()函数报错。

aardio v17.28 更新  (2018/4/30):
---------------------------------------------------------------------------
1、改进 win.ui.tabs,感谢 艾克 反馈的修改意见。

aardio v17.27 更新  (2018/4/28):
---------------------------------------------------------------------------
1、范例中的HTTP测试网址 http://httpbin.org 更改为 http://eu.httpbin.org/

aardio v17.26 更新  (2018/4/28):
---------------------------------------------------------------------------
1、增加 table.mapr() 函数,
此函数用法与 table.map() 相同,
但是 table.mapr() 可以递归处理子表。

aardio v17.25 更新  (2018/4/28):
---------------------------------------------------------------------------
1、 zlib库中gzUncompress 等函数支持自定义"zlib","gzip","raw"等压缩格式头。
压缩格式头指定为"raw"表示无压缩头.

aardio v17.24 更新  (2018/4/27):
---------------------------------------------------------------------------
1、增加 【工具->开发环境->简单跳转】插件,
可以在输入框中输入行号,跳转行号后支持回跳到上次所在的行。
也可以输入搜索关键字(支持模式匹配语法)然后点击跳转按钮在代码中搜索。
点击下拉框会自动列出当前代码中的函数定义,点击可快速跳转到函数定义。

aardio v17.23 更新  (2018/4/27):
---------------------------------------------------------------------------
1、plus 控件增加measureString() 函数可以获取输出文字的区块大小。
2、plus 控件增加fitContent() 函数可以根据显示字数自动调整plus控件大小。

aardio v17.22 更新  (2018/4/27):
---------------------------------------------------------------------------
1、 现在给窗体加淡入淡出效果只要一句代码了
用 win.ui.fade( winform ) 替换 winform.show() 就可以了

2、 增加 win.ui.message ,用于显示plus控件实现的信息提示框,
提供了一堆函数用于显示各种字体图标的信息提示框, 下面是演示代码:

	import win.ui;
	/*DSG{{*/
	var winform = win.form(text="aardio form";right=759;bottom=469;bgcolor=8421504)
	winform.add(
	plus={cls="plus";text="显示简单提示框";left=451;top=378;right=587;bottom=408;font=LOGFONT(h=-16);notify=1;z=1}
	)
	/*}}*/
	
	import win.dlg.message;
	var msgDlg = win.dlg.message(winform); 
	
	winform.plus.skin(msgDlg.buttonStyle)
	winform.plus.oncommand = function(id,event){
		if( msgDlg.ask("你觉得这个简单提示框好用吗")  ){
	  		msgDlg.smile("谢谢!")
		}
		else {
			msgDlg.frown('很遗憾你会这么想,但是\nwin.dlg.message提供了很多自定义外观样式的选项\n您可以根据自己的喜好进行调整')
		}	
	}
	
	winform.show() 
	win.loopMessage();
	
aardio v17.21 更新  (2018/4/26):
---------------------------------------------------------------------------
1、 修正 process.openUrl 函数与 process.openUrl扩展库命名冲突。
新版程序建议大家直接使用 process.openUrl 函数。

aardio v17.20 更新  (2018/4/26):
---------------------------------------------------------------------------
1、改进对齐辅助线,窗体设器默认设置为自动对齐到网络

aardio v17.19 更新  (2018/4/26):
---------------------------------------------------------------------------
1、改进plus控件边框绘制效果

aardio v17.18 更新  (2018/4/26):
---------------------------------------------------------------------------
1、控件属性增加“临时锁定”选项(也可以在右键菜单中设置)。
2、窗体设计器增加控件对齐辅助线(建议设置控件自动对齐到网格)。


3、线程回调函数支持主线程定义的 gobal.onError。
4、修正time()转换为字符串时一处可能导致内存增长的BUG,感谢lxping反馈该问题。

aardio v17.17 更新  (2018/4/24):
---------------------------------------------------------------------------
1、修正新版库的发布触发器未调用的问题

aardio v17.16 更新  (2018/4/24):
---------------------------------------------------------------------------
1、工程向导新增“控制台->后台服务”工程范例。
2、增强标准库中用于实现后台服务的service库,
增加 service.activeSessionId()等获取系统用户会话ID的函数
增加 service.msgbox() 等可用于服务进程在登录用户桌面上弹出对话框的函数。
3、增加 console.askYesNo() 函数。
调用此函数,可在控制台询问用户,并等待用户按Y/N键作出选择。

aardio v17.15 更新  (2018/4/22):
---------------------------------------------------------------------------
1、增加 console.setCtrlHandlerThread 函数,用于在控制台关闭前触发线程回调。
2、改进 plus控件生成的圆形图像效果

aardio v17.14 更新  (2018/4/22):
---------------------------------------------------------------------------
1、修正在工程管理器双击打开切换到其他工程的BUG,感谢默心反馈。

aardio v17.13 更新  (2018/4/22):
---------------------------------------------------------------------------
1、强力改进plus控件圆角边框的抗锯齿效果,现在输出更为平滑美观了。
2、可以窗体设计器中更灵活的调整各种圆角效果,只要把plus控件的圆角半径设为-1,aardio将会自动裁剪前景图像为圆形图像,并且仍然支持各种绘图模式,例如居中、拉伸,保持比例,平铺等效果。
3、窗体设计器改进,右键可穿透被锁定的控件选取被遮挡的控件。
4、调整高分屏下智能提示列表适应字体宽度,感谢 匿名 反馈。
5、静态回调函数支持使用void声明无返回值。注意 web.blink,web.kit扩展库必须升级到最新版,因为这2个扩展库里有几个fastcall回调的类型错误的声明为了void返回类型。

aardio v17.12 更新  (2018/4/21):
---------------------------------------------------------------------------
1、 web.socket 不再使用 win.setTimeout 延时回调

aardio v17.11 更新  (2018/4/21):
---------------------------------------------------------------------------
1、tcc扩展库更新到0.9.27,新版可以更好的支持UTF8,UTF16字面量,
增加compileEx,outputEx等函数支持直接使用UTF8编译C语言源代码,已更新部分aardio自带的tcc范例。

aardio v17.10 更新  (2018/4/20):
---------------------------------------------------------------------------
1、增加miniblink范例,udp广播范例。

aardio v17.09 更新  (2018/4/19):
---------------------------------------------------------------------------
1、修正websocket发送过长文本出错的问题,感谢QQ_0FD175反馈。

aardio v17.08 更新  (2018/4/17):
---------------------------------------------------------------------------
1、修正自定义控件子窗口超出的问题,感谢carl反馈

aardio v17.07 更新  (2018/4/16):
---------------------------------------------------------------------------
1、修正程序中个别不是由aardio创建的窗口出现不能输入的问题

aardio v17.06 更新  (2018/4/16):
---------------------------------------------------------------------------
1、改进锁定控件显示效果


aardio v17.05 更新  (2018/4/16):
---------------------------------------------------------------------------
1、支持拖动工程文件的快捷方式到工程管理器(打开工程)
2、窗体设计器支持在控件右键菜单中锁定、解锁控件,控件被锁定以后在设计器中不能调整大小,如果鼠标单击多个控件的重叠区域时,aardio将自动穿透被锁定的控件(优先选择未被锁定的控件),锁定状态在切换到代码视图后自动解除(关闭文件也会自动解除)
3、发布网站时支持自定义触发器(工程、或库目录下的.build目录里定义的触发器)。
4、改进智能提示的显示字体。
5、edit,richedit控件在设置为单行模式、并启用tab控制属性时,自动支持回车键切换焦点(当然也可以用tab键)。
6、输入类控件增加tabNext函数,用于快速切换焦点到下一个启用tab控制属性的控件。

aardio v17.04 更新  (2018/4/14):
---------------------------------------------------------------------------
1、修正上传代码工具报错,感谢 我心飞翔1995 反馈

aardio v17.03 更新  (2018/4/14):
---------------------------------------------------------------------------
1、改进orphanWindow功能,添加使用orphanWindow实现智能提示效果的范例。
范例位置:代码段->aardio范例->Windows应用->orphanWindow->智能提示

2、在父窗口上添加控件aardio尽可能的推算出位置参数,
如果省略所有坐标参数,aardio也会默认设置控件的坐标参数为 marginLeft=0,marginTop=0;marginRigh=0;marginBottom=0;
这个改进可以让我们在动态添加控件时写更少的参数,例如:

    //给custom添加一个列表框
    winform.custom.add( 
        listbox={cls=
"listbox";edge=1;hscroll=1;vscroll=1;}
    )

3、 改进 web.rest.client 调用API函数名包含中文时自动转换为URL编码(UTF8编码)后发送 aardio v17.02 更新 (2018/4/13): --------------------------------------------------------------------------- 1、string.xml 解析器代码优化 aardio v17.01 更新 (2018/4/13): --------------------------------------------------------------------------- 1、aardio工具中增加:[代码上传工具] 文件位置:[aardio工具->编码->代码上传工具] 这个工具也是演示高级界面的一个示例, 大家可以看一下源码参考一下plus,win.ui.tabs的一些用法。 感谢 xauto 分享该接口:https://paste.rs/n4L.js 2、win.ui.tabs 增加很好用的 query 函数,用法请查看文档。 aardio v17.0 更新 (2018/4/12): --------------------------------------------------------------------------- 1、编辑器增加快捷键 CTRL + ? 快速输入 <? ?> 2、增加 lambda 表达式。 2.1) lambda 不需要写return语句就可以直接返回一个表达式。 例如 lambda() 123 等价于 function() return 123; 2.2) lambda的函数体只能是一个表达式,不能使用其他语句或语句块, 例如 lambda(){} 等价于 function() return {}; 2.3) ambda表达式不包含逗号,不会返回多个值。 例如 console.log( lambda() 123, 456 ) 等价于 console.log( function() { return 123 }, 456 ) 2.4) lambda表达式的函数体不是语句,不包含分隔语句的分号。 例如 console.log( lambda() 123; ) 是错误的写法 可选使用希腊字母λ代替 lambda关键字。 以下是演示代码:

    import console;      
    
var arr = {1;2;3;4;7}
    
var value = reduce(arr,lambda(a,b) a + b );     
    console.dump(value);
    console.pause(
true);

aardio v16.123 更新 (2018/4/12): --------------------------------------------------------------------------- 1、修正 IDE插件中弹出子窗口时,关闭子窗口插件退出的问题,感谢 carl 反馈。 aardio v16.122 更新 (2018/4/11): --------------------------------------------------------------------------- 1、修正 string.xml 解析script出错的问题,感谢 蘑菇 反馈. aardio v16.121 更新 (2018/4/11): --------------------------------------------------------------------------- 1、 改进 fsys.cookies 在push添加同域同名cookie时更新原来的cookie(取代原来的添加cookie) aardio v16.120 更新 (2018/4/11): --------------------------------------------------------------------------- 1、 win.inputBox调整外观,去掉最大化最小化按钮,感谢"我心飞翔1995" aardio v16.119 更新 (2018/4/10): --------------------------------------------------------------------------- 1、 web.form 默认外观样式开启 _UIFLAG_NO3DBORDER, web.form 空白窗体示例,默认添加 _UIFLAG_DIALOG aardio v16.118 更新 (2018/4/10): --------------------------------------------------------------------------- 1、改进 string.xml 支持自动清理innerText中插入的HTML注释 aardio v16.117 更新 (2018/4/9): --------------------------------------------------------------------------- 1、改进winex,以及winspy,增强搜索外部窗口的功能, 并在多个函数中支持用owner窗口替代父窗口参数查找子窗口。 aardio v16.116 更新 (2018/4/9): --------------------------------------------------------------------------- 1、修正用户库下的 \.build\main.aardio 未被调用的问题 aardio v16.115 更新 (2018/4/9): --------------------------------------------------------------------------- 1、增加无循环函数 table.some,table.every,table.filter,table.map 借用 xauto 提供的范例,感谢 xauto

import win.ui;
/*DSG{{*/
var winform = win.form(text="筛选";right=290;bottom=255)
winform.add(
edit={cls=
"edit";left=27;top=29;right=245;bottom=58;edge=1;multiline=1;z=1};
listview={cls=
"listview";left=27;top=60;right=245;bottom=192;edge=1;z=2}
)
/*}}*/

var name = {"赵三";"张三";"李四";"孙李";"张三丰";"李四光";};
winform.listview.insertColumn(
"姓名",100)
winform.listview.items = name;

winform.edit.oncommand = 
function(id,event){

    
if(event = 0x400/*_EN_UPDATE*/){
        winform.listview.items = table.filter(name,
function(v){ 
            
return string.indexOf(v,winform.edit.text) 
        })
    }
}

winform.show() 
win.loopMessage(); 

aardio v16.114 更新 (2018/4/9): --------------------------------------------------------------------------- 1、 win.inputBox 添加 onOk,onCancel 事件 aardio v16.113 更新 (2018/4/9): --------------------------------------------------------------------------- 1、win.form窗体对象增加 winform.onOk,winform.onCancel 事件, 用于响应Enter,ESC 等对话框快捷键。 2、创建控件自动分配ID不会再使用_IDOK,_IDCANCEL的值, 但是仍然可以在创建控件的参数中自行指定id的值。 3、窗口在全屏模式下按ESC将退出全屏,可自定义onCancel事件取消该行为。 aardio v16.112 更新 (2018/4/8): --------------------------------------------------------------------------- 1、增加 reduce 函数,与Javascript同名函数用法类似,示例:

    import console; 

    
var arr = {1;2;3}
    
var ret = reduce(arr,function(prev,next,index,arr){
        
return prev + next;
    });

    console.log(ret);
    console.pause(
true);

aardio v16.111 更新 (2018/4/8): --------------------------------------------------------------------------- 1、win.form 支持在创建参数中使用 className 自定义不带TID后缀的类名. 请参考新增的范例:aardio范例->Windows窗口应用->创建窗口的隐藏参数 aardio v16.110 更新 (2018/4/7): --------------------------------------------------------------------------- 1、修正ovplayer工程范例文件链接错误(我修改目录名导致的问题),以及笔误一处( 感谢netfox反馈 ) aardio v16.109 更新 (2018/4/7): --------------------------------------------------------------------------- 1、工程向导中增加 popdes 分享的 ovplayer界面源码,感谢 popdes 2、winform增加以下事件函数, 因为这些事件比较常用,增加事件或以减少不必要的消息回调函数。 winform.onMouseDown winform.onMouseClick winform.onMouseDoubleClick winform.onActivate winform.onActivateApp winform.onMouseActivate aardio v16.108 更新 (2018/4/6): --------------------------------------------------------------------------- 1、gdip.bitmap 提供的 split函数拆分图像返回的数组增加一个map函数, 该函数可以将数组转换为名值对,例如将sys_tab_bkg.png拆分为4列,并且 第1列为default图像,第2列为hover图像,第3列为active图像,那么代码如下: winform.plus.skin( background = gdip.bitmap("\res\Images\sys_tab_bkg.png").split(4).map( default = 1; hover = 2; active = 3; ); ) aardio v16.107 更新 (2018/4/6): --------------------------------------------------------------------------- 1、gdip.bitmap 修正 split 函数 bug,感谢 易水寒 反馈。 aardio v16.106 更新 (2018/4/6): --------------------------------------------------------------------------- 1、gdip.bitmap 增加自动拆分图像的split函数 aardio v16.105 更新 (2018/4/6): --------------------------------------------------------------------------- 1、修正plus控件skin函数在重复设置样式,而且图像为bitmap对象时,导致图像异常释放报错的问题。 2、修正 websocket 服务端客户端的close函数触发onError的问题,感谢艾克反馈。 3、修正inet.ftp文档错误,感谢kylin反馈 aardio v16.104 更新 (2018/4/4): --------------------------------------------------------------------------- 1、增加 table.eachValue 用于按表的值排序遍历表, 感谢 翔阿 提供的例子,示例: import console; var t = { ["832"]=2; ["822"]=2; ["812"]=3; ["862"]=5; ["632"]=3; ["232"]=1; ["932"]=2; } for k,v in table.eachValue(t,function(v,v2) return v > v2 ){ console.log(k,v) } console.pause(true); aardio v16.103 更新 (2018/4/4): --------------------------------------------------------------------------- 1、增加 console.hex 函数,可以16进制输出字符串、缓冲区的所有字节。 2、python后台进程示例中添加 import thread.command,感谢 大龙 反馈。 aardio v16.102 更新 (2018/4/3): --------------------------------------------------------------------------- 1、 string.xml的queryEles查询条件,支 持指定innerText的匹配了(innerText在string.xml里是一个函数以前不支持作为匹配的属性)。 innerText的查询会自动设置为最后一个检测条件,这样就可以避免大量不必要的字符串匹配。 aardio v16.101 更新 (2018/4/3): --------------------------------------------------------------------------- 1、 增加 process.openUrl 函数, 很多人可能不知道,创建一个线程打开网址会更流畅,不然会卡顿, 这个函数把这些都写好了,只要直接用就可以。 2、改进 richedit打开超链接的功能。 3、规范化 process.execute_xxxx 这几个函数名为 process.executeXxxx, aardio一个优势就是库函数命名风格统一,留着这几个不统一的函数名不是很好,想改很久了。 原来的函数名会继续保留,但在代码提示中会推荐新的写法。 aardio v16.100 更新 (2018/4/3): --------------------------------------------------------------------------- 1、本版更新有BUG,已撤回 aardio v16.99 更新 (2018/4/3): --------------------------------------------------------------------------- 1、增加 thread.command.sendInvoke() 函数 2、python多线程范例增加了一些代码演示。 aardio v16.98 更新 (2018/4/3): --------------------------------------------------------------------------- 1、py,py2,py3等扩展库更新,改进对多线程GIL支持。 python的多线程是假多线程,而且GIL用起来有些麻烦, 建议在单线程中使用python,如果需要在后台线程中使用python, 也建议做成单线程会省很多事。 我已经在范例中添加了python使用GIL、以及后台单线程运行python的演示。 2、一处小改进,在跨多线程赋值控件text属性时,python对象也可以提前调用tostring转换为文本。 aardio v16.97 更新 (2018/3/31): --------------------------------------------------------------------------- 1、增强了一下查找替换对话框的功能,现在写这个功能更简单了。 增加了一个新的范例,位置:aardio范例->Windows窗口应用->richedit->查找替换 2、 增加了一个 win.getCopyData() 函数, 这个函数的代码是从 onCopyData里分离出来的。 aardio v16.96 更新 (2018/3/30): --------------------------------------------------------------------------- 1、修正 inet.url.splitParameters 拆分参数抛出异常的问题,感谢 ҉k҉o҉m҉ 反馈 aardio v16.95 更新 (2018/3/30): --------------------------------------------------------------------------- 1、Ctrl + * 改为自动输入段注释,因为段注释在aardio中可以包含长字符串, 写aardio代码经常要写输入段注释,而段注释要按N多下,这个快捷键这样用应当更有用一些。 2、添加 win.ui.listEdit 可以非常方便的将listbox控件添加编辑功能,用起来很简单, win.ui.listEdit( listbox ) 就什么都有了,参考listbox新增的范例代码。 3、在web.form范例的模拟自动化分类中增加了监听事件等范例。 4、time构造函数,在格式化输入的时间文本时,如果提前文本结束,则后续的时间字段将自动置为最小值(例如时分秒设置为0) 5、本版重点改进Unicode(UTF16)编码支持。修正因为UTF16编码与单字节字符的不相容特性导致错乱的问题(这个其实机率很小)。 6、string.load函数在读入文件时,如果遇到UTF16 BOM开始,并且长度为2的倍数的文件,自动添加UTF16标记。 7、新增 string.subUnicode函数,可以非常方便的以字符为单位截取UTF16字符串。 aardio 扩展库 更新 (2018/3/28): --------------------------------------------------------------------------- 1、web.blink,web.kit 增加aardio中的buffer对象自动转换为JS中Uint8Array的功能,用于交换二进制数据。 2、web.blink,web.kit 增加time对象在aardio,js之间双向自动转换的功能。 aardio v16.94 更新 (2018/3/26): --------------------------------------------------------------------------- 1、plus控件增加使用图标字体制作复选框、单选框功能。 请参考aardio范例->window窗口应用->plus控件->复选框、单选框 2、plus控件改进 startAnimation() 函数,移除效果较差的旋转字体图标功能, 增加使用 onAnimation 自定义动画的功能,plus控件范例中增加一个自绘动画的例子。 3、plus控件增加startProgress()函数,用于创建进度条动画。 请参考aardio范例->window窗口应用->plus控件->进度条动画 aardio v16.93 更新 (2018/3/24): --------------------------------------------------------------------------- 1、SQL存储过程示例增加使用输出参数演示。 aardio v16.92 更新 (2018/3/24): --------------------------------------------------------------------------- 1、改进Ctrl + J, Ctrl + K 组合键的功能,修正按 Ctrl + J 不流畅、光标显示错误等问题。 aardio v16.91 更新 (2018/3/24): --------------------------------------------------------------------------- 1、web.form文档改进,并改进在设置ua参数时,自动设置addHeaders中的请求ua. aardio v16.90 更新 (2018/3/24): --------------------------------------------------------------------------- 1、修正edit控件getsel函数bug,感谢xuguoyinmax反馈。 aardio v16.89 更新 (2018/3/23): --------------------------------------------------------------------------- 1、修正sys.cpu报错,移除不必要的远程调用 aardio v16.88 更新 (2018/3/23): --------------------------------------------------------------------------- 1、阻止在自身进程创建远程调用,这种用法无意义而且会导致异常。 aardio v16.87 更新 (2018/3/23): --------------------------------------------------------------------------- 1、修正在窗体设计器生成代码前输入时有时候光标会跳到后面的BUG。 2、修正plus控件重命名时弹出错误对话框。 3、改进代码编辑器折叠功能,并增强Ctrl+K组合键一键修复折叠错误的功能。 4、增加ide.command,用于避免出现在IDE环境中process.command提示群组名被占用的问题。 aardio v16.86 更新 (2018/3/23): --------------------------------------------------------------------------- 1、工具->探测器->winspy 改进增强,增加更多探测选项,可显示子窗口树 2、增加轮播FastCGI部署教程的一个工具,可在开始页启动,这个工具的源码也是一个很好的示范,建议仔细看看。 aardio v16.85 更新 (2018/3/21): --------------------------------------------------------------------------- 1、工程向导里的 web.kit 替换为 web.blink, web.blink使用比wke(webkit)更新的chromium内核,而且接口是基本一样的。 aardio v16.84 更新 (2018/3/20): --------------------------------------------------------------------------- 1、winspy增加显示密码功能 2、edit,richedit控件增加 passwordChar属性,指定为"*"隐藏密码,指定为null正常显示文本 aardio v16.83 更新 (2018/3/19): --------------------------------------------------------------------------- 1、web.socket.client, web.socket.server 改进close函数,避免重复调用。 2、edit,richedit控件增加 lines迭代器,用于遍历所有文本行,并支持自动忽略空行。 aardio v16.82 更新 (2018/3/17): --------------------------------------------------------------------------- 1、改进combobox控件失去焦点取消全选功能。 2、增加一个调用web.form控件显示Three.js(WebGL)页面的范例。 aardio v16.81 更新 (2018/3/17): --------------------------------------------------------------------------- 1、combobox控件在dropdown模式并开启自动布局以后,会“机智”的自动全选文本, 本版针对这个问题进行了修正,自动禁用了这个多此一举的功能。 aardio v16.80 更新 (2018/3/16): --------------------------------------------------------------------------- 1、 服务端 response对象增加 response.preheaders 属性, 用于配置优先输出到客户端的HTTP头。 aardio v16.79 更新 (2018/3/16): --------------------------------------------------------------------------- 1、文本框新增lineSel()函数,用于选取并替换文本框指定行的文本, 注意以前已经有一个selLine属性可以跳转到指定行。 例如选取最后一行,并且替换最后一行的文本,一句代码完成任务: winform.edit.lineSel(-1,"要替换最后一行的文本"); aardio v16.78 更新 (2018/3/16): --------------------------------------------------------------------------- 1、修正下载扩展库时,突然中断网络,扩展库仍然继续安装的问题。感谢 我心飞翔1995 反馈该问题。 aardio v16.77 更新 (2018/3/16): --------------------------------------------------------------------------- 1、修正plus控件启用编辑框、滚动条设置问题,感谢Danboy反馈。 aardio 扩展库 更新 (2018/3/15): --------------------------------------------------------------------------- 1、web.blink(miniblink)更新支持自资源文件内存加载网页调试工具,可返回网页调试工具窗口句柄。 cookie目录等默认值改为AppData路径(可自定义),以方便生成独立EXE文件。 aardio v16.76 更新 (2018/3/13): --------------------------------------------------------------------------- 1、修正plus控件启用编辑框、并启用滚动条时出现双滚动条,以及背景闪烁问题。 2、winex.waitVisible改进不指定控件参数时,进程ID参数无效的问题。 aardio v16.75 更新 (2018/3/13): --------------------------------------------------------------------------- 1、win.ui.tooltip 增加批量设置控件提示的add函数。 aardio v16.74 更新 (2018/3/13): --------------------------------------------------------------------------- 1、增强winspy窗口探测工具,改进tab切换支持,改进排版。 点击窗口样式、扩展样式时显示详细的窗口样式列表。 点击窗口标题、类名时显示查找、操作窗口的演示代码。 支持将鼠标指针对准父窗口句柄,然后按快捷键获取父窗口信息。 aardio 扩展库更新 (2018/3/13): --------------------------------------------------------------------------- web.blink增加web.blink.export web.kit增加web.kit.export 用于直接将导出aardio对象为JS全局变量 演示代码: import win.ui; /*DSG{{*/ var winform = win.form(text="miniblink - JS直接调用WinAPI";right=1123;bottom=570) /*}}*/ import web.blink.form; var mb = web.blink.form(winform); //导出DLL对象为JS全局变量 web.blink.export("user32",::User32); mb.html = /** <a href='javascript: user32.MessageBox(0,"JS直接调用WinAPI","user32.MessageBox",0) '>JS直接调用WinAPI函数试一下</a> **/ winform.show() win.loopMessage(); aardio v16.73 更新 (2018/3/12): --------------------------------------------------------------------------- 1、edit控件多行模式添加tab快捷键(系统edit控件在多行模式下,默认不允许tab切换焦点) 其实aardio自定义控件快捷键是非常简单的,translateAccelerator事件中响应按键消息并返回true就可以了。 aardio v16.72 更新 (2018/3/12): --------------------------------------------------------------------------- 1、修正窗体缩放导致个别控件在设计器上出现偏移的问题,感谢 Kylin 反馈该问题。 aardio v16.71 更新 (2018/3/11): --------------------------------------------------------------------------- 1、修正窗体缩放比例设置有时会被重置为默认值的问题 aardio v16.70 更新 (2018/3/11): --------------------------------------------------------------------------- 1、保存最后一次设置的缩放比例为默认设置(支持窗体设计器、代码编辑器),并且在首次启动aardio时根据系统DPI设置相应的默认缩放比例。 2、plus控件设计属性增加“编辑->允许编辑”属性用于启用文本编辑框,并且可以在“编辑”分类下设置编辑框的其他设计参数。 3、文本框控件的“隐藏选区”的值在设计属性中显示为“保持选区”(hidesel取反),edit控件“保持选区”的值默认为true,richedit控件“保持选区”的值默认为false 4、edit,richedit的setsel()函数支持指定一个位置参数移动光标到指定字符后面,但不设置选区。 5、richedit支持tab切换焦点功能。 6、plus控件启用文本编辑框时,支持tab切换焦点功能。 7、修正Ctrl+{组合键没有缩进选中代码。 8、添加显示隐藏标准库按钮。 9、修正123反馈的一处导致关闭未提示保存的BUG。 aardio v16.69 更新 (2018/3/09): --------------------------------------------------------------------------- 1、plus控件创建文本编辑框时,默认关闭保持选定功能。 aardio v16.68 更新 (2018/3/09): --------------------------------------------------------------------------- 1、强大的的plus控件又添新功能, 现在可以用plus控件实现透明美观的文本编辑框了。 请参考: aardio范例->Windows窗口应用->plus控件->文本编辑 只要一句代码: winform.plus.editable = true; 就可以了,而且可以使用editable属性动态控制是否显示编辑框。 可以使用plus控件指定背景、前景图片、边框等效果, 文本框可透明显示。 2、richedit添加 enablePopMenu() 函数, 现在只要一句代码就可以添加右键菜单了。 aardio v16.66 更新 (2018/3/06): --------------------------------------------------------------------------- 1、win.ui.menu 改进,菜单对象,添加selIdex,selId,selText等用于获取、设置单选项的属性,并增加 onMenuItemClick事件用于一次性设置所有菜单项默认回调事件。 示例: var menuRadio = win.ui.popmenu(winform); menuRadio.onMenuItemClick = function(id){ menuRadio.selId = id; winform.msgbox( menuRadio.selText ) } menuRadio.add("a" ) menuRadio.add("b" ) menuRadio.add("c" ) var menu = win.ui.menu(winform); menu.add('选择其中一个',menuRadio) aardio v16.65 更新 (2018/3/06): --------------------------------------------------------------------------- 1、winspy 增加自定义热键功能,默认为Ctrl + F12 aardio v16.64 更新 (2018/3/05): --------------------------------------------------------------------------- 1、listview 增加 selected属性,用于直接获取所有选中项索引数组 aardio v16.63 更新 (2018/3/05): --------------------------------------------------------------------------- 1、添加:工具->控测器->窗口探测器(winspy) aardio v16.62 更新 (2018/2/24): --------------------------------------------------------------------------- 1、改进 inet.ras.dial() 不指定entryName时自动获取连接名 aardio v16.61 更新 (2018/2/24): --------------------------------------------------------------------------- 1、按钮等控件增加 disabledText 属性,此属性指定为文本时禁用控件并显示指定文本, 此属性指定为null值时启用控件并恢复之前的正常文本。 2、指定窗口的onDropFiles回调时,自动设置窗口为接受拖放。 aardio v16.60 更新 (2018/2/24): --------------------------------------------------------------------------- 1、改进spin控件自动吸附edit控件功能, 可在窗体设计器中将spin控件置于edit控件内部、或外部靠左侧或靠右侧, 在调整窗口大小时,spin控件会自动吸附于edit控件对应侧。 aardio v16.59 更新 (2018/2/22): --------------------------------------------------------------------------- 1、改进plus控件边框绘制效果 aardio v16.58 更新 (2018/2/13): --------------------------------------------------------------------------- 1、electron扩展库更新electron组件使用最新版 v1.8.2 aardio v16.57 更新 (2018/2/12): --------------------------------------------------------------------------- 1、edit 控件print函数改由log函数输出文本,支持自动滚动不受文本字数限制。 2、增加 sys.monitor.changeMode函数。 aardio v16.56 更新 (2018/2/12): --------------------------------------------------------------------------- 1、修正 gdi.getRgba() 文档笔误,改进color库函数文档等,感谢 匿名 反馈。 扩展库 更新 (2018/2/12): --------------------------------------------------------------------------- web.blink 修正获取JS数组异常。 修正获取JS对象键名数组异常。 修正 web.blink.fileSystem异常等问题。 感谢 松江 反馈。 aardio v16.55 更新 (2018/2/11): --------------------------------------------------------------------------- 1、custom控件用于直接加载窗体文件时, 如果忘记在子窗体文件中写 return语句,aardio将自动设置一个返回值。 aardio v16.54 更新 (2018/2/11): --------------------------------------------------------------------------- 1、custom控件用于直接加载窗体文件时,传递更多设计时属性到子窗体 aardio v16.53 更新 (2018/2/11): --------------------------------------------------------------------------- 1、标准库增加 color ,提供了一些颜色转换有关的函数。 aardio v16.52 更新 (2018/2/11): --------------------------------------------------------------------------- 1、wsock.tcp.simpleHttpServer 修正客户端异常断开偶尔报错的问题 aardio v16.51 更新 (2018/2/11): --------------------------------------------------------------------------- 1、plus控件可设置线性渐变颜色 2、plus控件支持在foreground属性中指定半透明的前景色 3、增加一些plus控件范例,位置:aardio范例->Windows窗口应用->plus控件 更多范例请查看plus控件教程。 aardio v16.50 更新 (2018/2/9): --------------------------------------------------------------------------- 1、 web.rest.client 忽略服务端返回的不能识别的charset aardio v16.49 更新 (2018/2/8): --------------------------------------------------------------------------- 1、修正web.socket.jsonServer #18行client返回空导致的问题,感谢A2反馈。 aardio v16.48 更新 (2018/2/7): --------------------------------------------------------------------------- 1、更新帮助文档 aardio v16.47 更新 (2018/2/7): --------------------------------------------------------------------------- 1、 win.ui.simpleWindow 支持禁用最大化、最小化按钮的窗体属性。 这个先要在窗体属性中设置一下,如果不想设置可以直接用 win.ui.simpleWindow2。 aardio v16.46 更新 (2018/2/6): --------------------------------------------------------------------------- 1、增加 win.ui.simpleWindow2 作用跟win.ui.simpleWindow 一样,但不创建最大化按钮,拖动调整大小的边框。 aardio v16.45 更新 (2018/2/6): --------------------------------------------------------------------------- 1、 win.form 增加 beforShowWindow 事件,此事件在窗体隐藏、显示前触发。 2、 custom控件改进管理多窗口的功能,现在显示任意的子窗口,其他子窗口自动隐藏。 简单的说,就是不用再写任何代码,他自己就可以机智的管理子窗口如何显示了。 aardio v16.44 更新 (2018/2/6): --------------------------------------------------------------------------- 1、 win.ui.tabs 改进:支持模板的border属性, 2、 win.ui.tabs 改进:如果没有调用过skin函数自动切换模板中的plus按钮到单选模式。 aardio v16.43 更新 (2018/2/5): --------------------------------------------------------------------------- 1、 修正 listbox selText设置选项的问题,感谢 松江 反馈。 aardio v16.42 更新 (2018/2/5): --------------------------------------------------------------------------- 1、 修正 winform.bindConfig() 在子窗口使用时未自动保存配置的问题,感谢 松江 反馈。 aardio v16.41 更新 (2018/2/3): --------------------------------------------------------------------------- 1、改进 fsys.cookies 传入的cookie缺少name字段时返回空值, 修正 web.kit.form的cookieSet函数,传入fsys.cookies对象时报错, 感谢 testinfo123 反馈该问题。 aardio v16.40 更新 (2018/2/3): --------------------------------------------------------------------------- 1、修正 edit 控件选中一个字符时selText返回null的问题,感谢lacker反馈。 aardio v16.39 更新 (2018/2/2): --------------------------------------------------------------------------- 1、修正 plus控件调用 setFont函数时不支持point属性的问题,感谢松江反馈 aardio v16.38 更新 (2018/2/1): --------------------------------------------------------------------------- 1、 win.ui.tabs模板增加foreRepeat属性,感谢易水寒反馈。 2、 custom控件通过aardio文件加载子窗体时,如果忘记写return winform,custom控件支持自动获取,感谢易水寒反馈。 3、 修正metaProperty一处笔误,感谢 …幽筱\君寒'' 反馈。 aardio v16.37 更新 (2018/2/1): --------------------------------------------------------------------------- 1、 增加一些快捷键, 以下快捷键基本都是将原来就要按的Shift键换为Ctrl键, 利用原本就空闲的组合键快速输入配对的括号等。 为什么不用Shift键自动配对呢? 这是因为改代码,或者是并不是写代码而是在字符串中输入括号,都不需要自动配对。 替换为Ctrl键的好处是可以明确输入目的,又不会增加按键次数。 Ctrl + { 自动输入{}包含的语句块,并添加缩进,光标移动到语句块内部。 如果先选中一段代码,该段代码自动移入语句块内部 Ctrl + ( 自动输入(),光标移动到括号内部。 如果先选中一段代码,该段代码自动移入括号内部 Ctrl + " 自动输入一对引号,光标移动到引号内部。 如果先选中一段文本,该段代码自动移入引号内部,并且文本中的所有双引号自动替换为一对双引号(因为在双引号内用一对双引号表示原来的双引号) Ctrl + ` 自动输入一对反引号,光标移动到反引号内部。 如果先选中一段文本,该段代码自动移入反引号内部,并且文本中的所有反引号自动替换为一对反引号(因为在反引号内用一对反引号表示原来的反引号) Ctrl + * 自动将选中代码移入自动折叠语句块。 感谢 某人 提出的建议 2、修正winform.group函数BUG,感谢ﻬKoK☉L〇反馈 aardio v16.36 更新 (2018/1/30): --------------------------------------------------------------------------- 1、 添加 fsys.appdata 函数,一句代码在appdata目录下建立文件。 2、 改进 sevenZip.cmd 回显功能。 3、 改进 web.kit.form 对 orphanWindow的支持。 aardio v16.35 更新 (2018/1/30): --------------------------------------------------------------------------- 1、 添加了listbox GDI+自绘范例, 范例位置:aardio范例->Windows窗口应用->列表框控件->GDI+自绘。 在扩展库中双击 win.graphics 可下载打开lujjjh写的listbox自绘例子(GDI)。 aardio v16.34 更新 (2018/1/29): --------------------------------------------------------------------------- 1、 jsonrpc服务端、客户端增加 beforeJsonParse,afterJsonStringify触发器,可用于在传输JSON以前加密或解密数据包。 增加该功能的库: web.socket.jsonServer, web.socket.jsonClient, web.rpc.jsonClient, web.rpc.jsonServer aardio v16.33 更新 (2018/1/29): --------------------------------------------------------------------------- 1、 win.fontAwesome, gdip.fontAwesome 共用同一字体文件, web.fontAwesome 不必要再使用,导入 win.fontAwesome 就行了(使用扩展库兼容旧代码) 导入gdip.fontAwesome 就不用再导入 win.fontAwesome 了。 aardio v16.32 更新 (2018/1/29): --------------------------------------------------------------------------- 1、改进窗体设计器添加事件的功能,避免添加不合适的位置,感谢 我心飞翔1995 反馈该问题。 aardio v16.31 更新 (2018/1/29): --------------------------------------------------------------------------- 1、在窗体设计器中双击控件最新增加的事件,改为添加到 winform.show前面,感谢lacker反馈的意见。 aardio v16.30 更新 (2018/1/28): --------------------------------------------------------------------------- 1、改进对多显示器的支持,custom控件全屏时自动选择当前显示器,感谢cad反馈。 aardio v16.29 更新 (2018/1/28): --------------------------------------------------------------------------- 1、ide扩展库增加 ide.gotoLine() 函数用于跳转到指定代码行。 2、ide.getActiveCodeEditor() 取消必须进程内调用的限制。 3、发布生成EXE时,如果当前编辑的代码是工程内的代码文件,不再自动打开main.aardio。 但如果编辑的是外部进程的代码,仍然会自动切换到 main.aardio (避免打开外部工程main.aardio时发生混淆) 4、edit,richedit控件增加selLine属性,用于快速切换当前行。 aardio v16.28 更新 (2018/1/28): --------------------------------------------------------------------------- 1、electron范例增加一个使用eletron嵌入仿真浏览器控件实现模拟自动化、注入JS脚本、控制网页的演示。 其实这些在electron那本来就没几页的文档中就提供了范例的。 py3 扩展库更新 (2018/1/28): --------------------------------------------------------------------------- 1、支持不用额外安装VC2015运行库的前提下,在win7上完美嵌入python3.6 注意,所有python扩展库(最新版)都自带requests模块,不用再去安装。 aardio v16.27 更新 (2018/1/27): --------------------------------------------------------------------------- 1、改进win.form自动缩放功能,改进 winform.enumControl函数按父子顺序枚举窗口, 增加 winform.eachControlEx迭代器用于遍历匿名窗口。 因为 winform.enumControl是按父子顺序枚举, 所以在枚举过程中调用 win.setParent()函数改变父窗口会导致顺序混乱。 这时候应当使用 winform.eachControlEx迭代器替代。 2、窗口不再自动调用 winform.group()函数,因为部分软件只是拿groupbox做背景,并不需要这个功能。 如果有需要的,请手动调用一下。 3、修正 田雨春楊 反馈的涉及groupbox的bug,修正内容看上面。 aardio v16.26 更新 (2018/1/27): --------------------------------------------------------------------------- 1、修正设置控件或窗口背景图像导致异常的一处BUG,感谢 无涯 反馈该问题。 aardio v16.25 更新 (2018/1/26): --------------------------------------------------------------------------- 1、checklist改为report模式实现,修正list模式字体放大后复选框不居中问题。 感谢 寻-浔-荨& 反馈,感谢 xauto 提供的方法。 aardio v16.24 更新/Python扩展库更新 (2018/1/26): --------------------------------------------------------------------------- 1、修正 static放入groupbox以后,自动设置groupbox作为父窗口, 但是修改文本出现重影的问题。感谢 田雨春楊。 2、修正 python3.6扩展库运行报错。 aardio v16.23 更新/Python扩展库更新 (2018/1/26): --------------------------------------------------------------------------- 本版aardio更新仅添加标准库显示python3.6的版本号的功能,并未更新其他功能。 新增python3.6扩展库,修正py2,py扩展库上一版本运行部分python代码出错。 目前提供的python扩展库版本如下: 1) py3扩展库,基于最新python3.6,不支持Win10以下操作系统。 2) py扩展库,基于最新python3.4,支持XP操作系统 3) py2扩展库,基于最新python2.7,支持XP操作系统 如何更新扩展库:点击aardio工具->扩展库->安装更新 aardio v16.22 更新(2018/1/25): --------------------------------------------------------------------------- 1、 util.metaProperty 支持用 __get,__set 替代 get,set 实现属性读写器。 这个改进是为了解决 python中调用 requests中 get函数的问题。 aardio v16.21 更新(2018/1/25): --------------------------------------------------------------------------- 1、 win.ui.tabs 增加 each 函数 aardio v16.20 更新(2018/1/25): --------------------------------------------------------------------------- 1、 fsys.cookies 增加 push函数 aardio v16.19 更新(2018/1/24): --------------------------------------------------------------------------- 1、修正static等控件放到groupbox里以后设置的颜色失效,感谢寻-浔-荨&,天天快乐 等反馈该问题。 aardio v16.18 更新(2018/1/24): --------------------------------------------------------------------------- 1、控件,窗体等增加group函数, 控件的group函数可以一句代码添加所有范围内的其他控件作为自己的子窗口。 而窗体的group函数可以一句代码调用所有groupbox控件的group函数。 另外,窗体会自动调用group函数, 所以,大家什么也不用干,所有事自动做好。 带来的好处: a、单选框放到groupbox内,就可以自动分组,不用去看坑人的Z序排列。 b、一组控件添加到groupbox以后,就可以通过控制groupbox控件,方便的控制一组控件隐藏或显示。 当然,例如custom控件加载子窗口的功能也可以实现类似的效果。 2、修正文档、模式匹配工具模板,fsys.mime笔误等,感谢123,xauto,匿名 等反馈。 aardio v16.17 更新(2018/1/24): --------------------------------------------------------------------------- 1、修正控件属性中颜色值不能以文本方式编辑、粘贴颜色值的问题,感谢 天天快乐反馈。 aardio v16.16 更新(2018/1/23): --------------------------------------------------------------------------- 1、高级界面范例工程,mainForm 去掉 var定义为全局变量,感谢 洋洋,xauto反馈。 aardio v16.15 更新(2018/1/22): --------------------------------------------------------------------------- 1、win.ui.tabs 增加 create函数,简化需要动态创建子窗口的代码 aardio v16.14 更新(2018/1/22): --------------------------------------------------------------------------- 1、 改进DPI缩放效果 aardio v16.13 更新(2018/1/22): --------------------------------------------------------------------------- 1、 plus控件一些小细节改进,默认设置禁止换行,超出显示范围显示省略号等。 因为我们用plus控件一般是做按钮,大多时候自动换行是不太美观的。可通过stringFormatFlags,trimming的等属性自定义这些选项。 aardio v16.12 更新(2018/1/21): --------------------------------------------------------------------------- 1、修正新版custom控件无法修改自定义类名,感谢 carl 反馈。 2、修正web.json.parser参数类型错误未显示错误信息,感谢 cad 反馈。 aardio v16.11 更新(2018/1/21): --------------------------------------------------------------------------- 1、窗体设计器改进,属性面板新增“位置”分类,与控件位置、缩放布局有关的属性归入此分类。 因为这个属性使用比较多,默认放到前面。 控件的“固定边距”属性增加保持“百分比”选项, 当选择“百分比”保持边距,在窗体上调整控件时,aardio会自动记录边距的当前百分比。 如果结合新版custom控件可以更方便的载入子窗口的功能, 我们只要点几下鼠标,就可以轻松的对窗体按百分比划分空间。 并且可以用子窗口进一步的再次分割空间,并且非常自由的控制各个控件的自动缩放。 当然新版还提供marinLeft......这些更加灵活的动态创建控件的参数, 可参考新版范例:Windows窗口应用->动态创建控件 2、工程文件的右键菜单中增加“复制路径”“复制绝对路径”功能。 我们在编码时,经常需要引用工程中的文件,使用这个功能可以方便的获取路径参数。 注意:在aardio中文件路径多以斜杠、或反斜杠开始表示相对工程根目录的路径, 而“复制路径”复制的就是这种格式的路径。 3、修正一处导致跳转到定义导致卡死的BUG,感谢“一呆宗师”反馈 aardio v16.10 更新(2018/1/20): --------------------------------------------------------------------------- 1、htmlayout改进支持custom自定义控件,感谢cad反馈。 aardio v16.09 更新(2018/1/20): --------------------------------------------------------------------------- 1、改进按百分比划分边距的功能,可以更方便的实现更灵活的控件布局, aardio v16.08 更新(2018/1/19): --------------------------------------------------------------------------- 1、win.ui.grid 添加 import win.ui.ctrl.edit 感谢 vikon反馈 2、win.ui.tabs 修改关闭按钮创建参数,感谢 yachao反馈。 aardio v16.07 更新(2018/1/19): --------------------------------------------------------------------------- 1、win.ui.tabs 修正切换选项卡偶尔不显示子窗口,感谢 daheian反馈 aardio v16.06 更新(2018/1/18): --------------------------------------------------------------------------- 1、 winform.fullscreen() 改进在多屏显示时自动选择最靠近屏幕,感谢cad反馈。 aardio v16.05 更新(2018/1/18): --------------------------------------------------------------------------- 1、orphanWindow 功能改进,修正透明flash出现残影的问题,感谢tanqinghong反馈该问题。 aardio v16.04 更新(2018/1/17): --------------------------------------------------------------------------- 1、修正 win.ui.simpleWindow,plus控件 反复调用skin函数修改样式时不生效的问题,感谢幻月反馈该问题。 aardio v16.03 更新(2018/1/17): --------------------------------------------------------------------------- 1、 custom控件的类名属性 - 可以直接指定一个用于加载子窗体的aardio文件路径。 使用这个功能,我们可以方便的把一个窗体放到另一个窗体上作为控件窗口。 在custom的属性面板的“类名”属性中增加“浏览文件”按钮。 如果custom控件的类名是一个aardio文件,那么在窗体设计器中双击custom控件 会自动打开指定的aardio文件。 custom控件以前就可以使用 loadForm() 函数加载子窗口, 并且可以加载多个窗口,并且可以实现类似选项卡的效果(例如win.ui.tabs就用到了custom控件) 但是,如果我们只是想最简单的加载一个子窗口, 使用 custom的loadForm函数就不合算了,因为这多创建了一个窗口,而且要多写几句代码。 新功能可以简化这些操作。 aardio v16.02 更新(2018/1/16): --------------------------------------------------------------------------- 1、修正win.ui.tabs可能导致进程无法退出的问题,感谢 Cui 反馈。 aardio v16.01 更新(2018/1/15): --------------------------------------------------------------------------- 1、修正部分系统向导窗口字体问题 aardio v16.0 发布(2018/1/15): --------------------------------------------------------------------------- 为迎接所有新学员,特昼夜兼程,终于赶在开课之前终推出aardio最新版本。 1、全新的工程向导 2、正式推出强大的高级选项卡( win.ui.tabs ),这可不仅仅是一个选项卡,部分范例参考帖子:http://bbs.aardio.com/forum.php?mod=viewthread&tid=22149 3、大幅改进 plus控件,增强对自定义边框的支持,目前可以在窗口设计器中设置plus的边框,支持单独设置各方向的边框,支持自定义颜色,支持圆角边框,支持圆角裁剪背景。在代码中调用skin函数更可设定不同操作状态下的边框样式(可以同时方便的设置前景背景贴图) 4、工程向导增加“高级界面”,高级控件是以plus控件、win.ui.tabs等基于plus控件的界面组件编写的界面,灵活简洁,简单拖放就可以做出简洁、漂亮的界面,可以大幅提升软件开发效率。 5、增加“electron”工程向导。 6、窗体设计器右键菜单增加:“自动九宫格缩放布局”, 一键调整界面上所有控件到最佳布局效果,原理请参考文章: https://mp.weixin.qq.com/s/W-1un6Q1n6r4ifOMgdcZxQ 7、修复已知BUG. aardio v15.76 更新(2018/1/13): --------------------------------------------------------------------------- 1、 修正 string.xml 属性名未检测连字符的BUG aardio v15.75 更新(2018/1/13): --------------------------------------------------------------------------- 1、 win.ui.tabs 修正笔误,感谢…幽筱\君寒反馈 aardio v15.74 更新(2018/1/13): --------------------------------------------------------------------------- 1、 win.ui.tabs 一些小细节的改进, 修正窗口拖到不能显示选项卡抛异常的问题,改进点击下拉按钮等不获取焦点 感谢…幽筱\君寒反馈的意见。 2、plus控件改进对border属性类型的判断,感谢松江反馈。 aardio v15.73 更新(2018/1/13): --------------------------------------------------------------------------- 1、 win.ui.tabs 一些小细节的改进,禁止选项卡得到焦点, 在选项卡数目超出显示范围需要自动折叠时,总是显示当前选中选项卡. 感谢…幽筱\君寒反馈的意见。 aardio v15.72 更新(2018/1/12): --------------------------------------------------------------------------- 1、 改进 win.ui.simpleWindow 支持更多自定义参数 aardio v15.71 更新(2018/1/12): --------------------------------------------------------------------------- 1、修正关闭按钮出现时窗口会闪一下(抢焦点) aardio v15.70 更新(2018/1/12): --------------------------------------------------------------------------- 1、增加自动移除窗体边框 范例已更新,增加调用选项卡打开网页的示例,感谢podes增加示例 aardio v15.69 更新(2018/1/12): --------------------------------------------------------------------------- 1、win.ui.tabs 改进窗口加载相关函数, 感谢…幽筱\君寒反馈选项卡超出显示范围自动折叠后,出现窗口与选项卡不对应BUG aardio v15.68 更新(2018/1/12): --------------------------------------------------------------------------- 1、plus控件支持在样式中配置边框,圆角等 演示代码请点这里查看 aardio v15.67 更新(2018/1/12): --------------------------------------------------------------------------- 1、标准库增加高级选项卡控件( win.ui.tabs ) 这是基于plus控件开发的增强版选项卡,这可不仅仅是一个选项卡, 这个库的代码量接近plus控件的代码量,也跟plus控件一样不但使用简单,而且功能强大。 1、可以非常快的开发出变化丰富的导航条效果。 2、按钮使用plus控件,所以可以做的非常漂亮。 3、自动识别设计器中模板控件的设置,自动判断是水平还是垂直选项卡 4、自动搜索附近的custom控件,如果找到,自动管理多窗口的切换显示。 5、在按钮数目太多超出显示范围时,可自动生成下拉菜单。 6、支持在选项卡上自动生成悬浮的关闭按钮,可以非常方便的动态添加、删除节点。 ...... 库函数文档已经写好,范例和教程后面再补上 aardio v15.66 更新(2018/1/10): --------------------------------------------------------------------------- 1、改进plus控件自绘接口,参考新版 onDrawBackground,onDrawContent文档 aardio v15.65 更新(2018/1/10): --------------------------------------------------------------------------- 1、修正新版固定底边距报错 aardio v15.64 更新(2018/1/10): --------------------------------------------------------------------------- 1、强力改进 winform.add / addCtrl 函数, 注意所有控件对象都有 addCtrl 函数,用法与 winform.add完全一样。 但是控件的 addCtrl 函数可以将其他控件添加为自己的子窗口。 现在可以非常方便的在创建控件时通过 marginLeft,marginRight,marginTop,marginBottom指定外边距, 这几个参数非常有趣的地方在于他除了可以使用普通的数值指定边距以外, 也可以使用一个0到1之间的小数指明如何划分剩余可用空间的百分比作为边距。 例如,当我们把 marginTop 设为 0.5 ,这个控件就可以在运行时在父窗口中垂直居中了。 简单灵活,是不是有点感觉找到了写CSS的一些感觉呢?! 另外,还可以直接在创建控件的参数中通过width指定宽度,height指定高度。 本版同时新增范例详细讲了 winform.add / addCtrl 函数的用法。 因为这几个函数一直是通过窗口设计器来用的,所以文档基本没有写到。 范例位置:aardio范例->Windows窗口应用->动态添加控件 2、因为启动触发器init.aardio是不可修改的, 新版本增加了一个功能,init.aardio会检测同目录下是否存在 init-user.aardio, 如果有这个文件就自动执行。感谢松江反馈的意见。 请注意启动时加执行代码会影响到启动速度。 3、修正access,sqlServer一处BUG,感谢晨阳反馈 aardio v15.63 更新(2018/1/10): --------------------------------------------------------------------------- 1、修正access,sqlServer新增的getRows函数BUG,感谢republican反馈。 aardio v15.62 更新(2018/1/9): --------------------------------------------------------------------------- 1、修正新版有时候不提示版本更新,感谢xauto反馈 aardio v15.61 更新(2018/1/9): --------------------------------------------------------------------------- 1、增加一个懒人库 win.ui.simpleWindow, 用于实现无边框窗口时,用一句代码就可以快速添加标题栏按钮、阴影、拖动边框等等。 aardio v15.60 更新(2018/1/9): --------------------------------------------------------------------------- 1、改进 electron.runtime 支持发布时打包asar文件、自动复制electron运行库。 aardio v15.58 更新(2018/1/9): --------------------------------------------------------------------------- 1、win.ui.grid 改为鼠标双击开始编辑,增加 readonlyColums 属性可用于设置只读列,感谢 KING 反馈的意见和部分代码。。 2、 web.socket.jsonServer 增加 hActiveSocket 属性可用于在服务端RPC回调函数中获取活动套接字句柄。 aardio v15.57 更新(2018/1/8): --------------------------------------------------------------------------- 1、改进aardio启动速度 2、工具栏的“扩展”选项卡改为“插件”,避免眼花看成“扩展库”,扩展库在右边。 aardio v15.56 更新(2018/1/6): --------------------------------------------------------------------------- 1、去掉开始页阻塞线程的一句win.invoke,换成线程异步回调。 2、优化win.peekPumpInputMessage()函数,快了那么一丁点,积少成多。 aardio v15.54 更新(2018/1/5): --------------------------------------------------------------------------- 1、修正inet.http导致报参数错误的BUG一处,感谢库拉反馈并协助测试一晚上。 aardio v15.53 更新(2018/1/5): --------------------------------------------------------------------------- 1、增加 wsock.udp.asynClient 异步UDP客户端 2、增加 UDP/SSDP 局域网发现设备示例 import win.ui; /*DSG{{*/ var winform = win.form(text="SSDP客户端 - 发现局域网设备";right=1044;bottom=715) winform.add( btnDiscover={cls="button";text="发现局域网设备";left=789;top=645;right=979;bottom=698;db=1;dr=1;z=2}; edit={cls="edit";left=15;top=23;right=1021;bottom=625;db=1;dl=1;dr=1;dt=1;edge=1;multiline=1;vscroll=1;z=1} ) /*}}*/ import web.json; import wsock.udp.ssdpClient; var ssdpClient = wsock.udp.ssdpClient(); //异步响应局域网设备应答的数据报文 ssdpClient.onDeviceDiscovered = function(result){ winform.edit.print(result) } //发起SSDP查询 winform.btnDiscover.oncommand = function(id,event){ ssdpClient.discover(); } winform.show() win.loopMessage(); aardio v15.52 更新(2018/1/4): --------------------------------------------------------------------------- 1、thread.table添加shift,unshift,append等函数 2、修正inet.httpFile一处BUG aardio v15.51 更新(2018/1/4): --------------------------------------------------------------------------- 1、网站开发增加session功能,标准库中各个HTTP服务端实现已同步支持。 可以实现自定义的session实现,只要在sessionHandler名字空间下添加库并导入就可以了, aardio已经默认提供了sessionHandler.default (使用文件存储session)。 session的使用非常简单,不需要像其他语言那样要搞一堆函数, 直接用 session["键名"] 就可以存取session键值了。 只要使用了 session,session功能就会自动启动。 如果不使用,session功能就会保持关闭状态,一切全自动, 不用多写一句代码。 --------------------------------------------------------------------------- session 的使用非常简单, 直接用 session["键名"] 就可以存储键值了。 如果页面代码中使用session,那么session功能就会自动启动, 调用 session.start() 不是必须的。 可选调用 session.start() 函数来启动session, 这个函数的参数可以指定一个过期时间,以秒为单位, 默认为1800秒,注意过期时间将应用于当前网站下的所有session。 可选在 sessionHandler 名字空间下创建自定义的session加载器, 只要该加载器导入网站应用,服务端会优先使用自定义的加载器。 if(! session["count"] ){ response.write("欢迎首次访问"); session["count"]=1; } else { session["count"]= session["count"] + 1; response.write("本次会话访问本站次数:",session["count"]); } --------------------------------------------------------------------------- 这里补充一下,为什么我用web.json存储session,而不是直接序列化table对象, table对象的语法比较复杂,在还原时要用到eval,而eval可以执行任何代码,所以这种用户可能从客户端提交数据的地方, 调用eval是不太安全的。最后改用了更简单的JSON,因为JSON基于纯文本解析所以没有这个问题, 原来json中有一处调用eval的非标准扩展,已经在本版被移除了。 所以大家要注意,虽然table序列化方便,但不要在客户端服务端传来传去的, 本机桌面软件当然没有问题,别人要捣乱,不如直接格式化他自己的硬盘更快点。 aardio v15.50 更新(2018/1/3): --------------------------------------------------------------------------- 1、优化WebSocket事件触发机制 aardio v15.49 更新(2018/1/3): --------------------------------------------------------------------------- 1、electron运行库改了国内CDN(感谢大淘宝),试了下可以闪电下载, 2、改进 inet.httpFile,修正某些网址不能下载,服务器未提供文件名时下载失败的问题。 aardio v15.47 更新(2018/1/3): --------------------------------------------------------------------------- 1、修正几处笔误,感谢艾克反馈 aardio v15.46 更新(2018/1/3): --------------------------------------------------------------------------- 1、添加 win.setTimeout() 函数用于异步延迟执行函数。 适合一些内部没有窗口的对象,但又需要调用setTimeout时使用。 2、 web.socket.jsonClient 在服务端断开以后发送出错, 不再抛出异常,而是改为触发 onError,end 等错误回调函数。 aardio v15.45 更新(2018/1/2): --------------------------------------------------------------------------- 1、修正com.DumpTypeInfo错误,感谢松江反馈 aardio v15.44 更新(2018/1/2): --------------------------------------------------------------------------- 1、修正FastCGI网站卡住的问题,感谢 133720331 反馈 2、修正sqlServer报错,感谢 晨阳 反馈 aardio v15.42 更新(2018/1/2): --------------------------------------------------------------------------- 1、2018新年第一次给力更新,aardio标准库增加了web.nativeMessaging, 用于写Chrome本地应用扩展,几句代码就可以写一个本地应用了,不用带巨大的运行库, 虽然chrome的协议是基于阻塞读写的管道实现,但在aardio中使用强大的多线程封装为了异步消息模式, 类似WebSocket,虽然底层以多线程实现,但调用时只要用最简单的单线程异步的事件模式写代码就可以了, 稍后我会发教程,简单例子: 教程:http://bbs.aardio.com/forum.php?mod=viewthread&tid=22108 //创建本地应用消息主机 import web.nativeMessaging; var host = web.nativeMessaging(); //客户端已连交接 host.onOpen = function(extension,parentWindow){ winform.edit.print("客户端已连接:",extension) //不能使用 win.setParent(),chrome会崩溃掉 win.setOwner(winform.hwnd,parentWindow); } //客户端已关闭 host.onClose = function(){ winform.edit.print("客户端已断开,即将退出") win.quitMessage();//必须及时退出 } //客户端发了JSON对象过来 host.onMessage = function(data){ winform.edit.print("收到数据",data); host.send("这是来自aardio的数据"); } //遇到错误了 host.onError = function(err){ winform.edit.print(err); } //运行消息主机 host.run(); } 2、改进_ARGV自动解析参数为键值对的功能,如果参数有多个前导符则去除多个前导符,支持自动拆解使用等号分隔的键值对 3、io.open打开的文件流对象增加mode函数,可以修改文本的二进制或文本模式,并可以获取文件正在使用的模式。另外增加 type() 函数用于获取文件对象的类型(例如控制台,管道,本地文件....等等) aardio v15.41 更新(2017/12/31): --------------------------------------------------------------------------- 1、win.ui.grid 增加按空格进入编辑状态,按ESC撤消等等....参考文档 aardio v15.40 更新(2017/12/31): --------------------------------------------------------------------------- 1、raw.buffer 支持传入参数为 { type="Buffer";data ={1;2;3;} } 格式的对象,并还原为buffer对象。aardio中的buffer对象以及node.js中的Buffer对象转换为JSON时都使用该格式。 2、其他一些细节上的代码优化 aardio v15.39 更新(2017/12/31): --------------------------------------------------------------------------- 1、listview控件增加 setTable() 函数,可用于将sqlite,access,sqlSever等数据库对象的 getTalbe()函数取出来结果直接显示在listview控件上。 2、增加 win.ui.grid 用于为listview增加编辑功能, 现在写一个简单的显示、编辑数据控件只要几句代码了。 3、access,sqlServer增加getRows函数,优化getTable函数,感谢 republican 提出的改进意见 import win.ui; /*DSG{{*/ var winform = win.form(text="简单数表表视图";right=1031;bottom=712) winform.add( edit={cls="edit";left=25;top=584;right=997;bottom=693;edge=1;multiline=1;z=2}; listview={cls="listview";left=24;top=27;right=996;bottom=555;edge=1;z=1} ) /*}}*/ import sqlite var sqlConnection = sqlite("/testParameters.db"); sqlConnection.exec( "CREATE TABLE IF NOT EXISTS @tablename(id INTEGER PRIMARY KEY, date, title);",{ tablename = "myTableName" } ) var cmd = sqlConnection.prepare("INSERT INTO myTableName VALUES (NULL,@date,@title);" ); for(i=1;10;1){ cmd.step( date = time().addday( math.random(1,30)); title = string.random(15); ) } import win.ui.grid; var grid = win.ui.grid(winform.listview); var dataTable = sqlConnection.getTable("SELECT * FROM [myTableName] "); ////直接让liswview控件显示数据库的查询结果 grid.setTable( dataTable ) //编辑变更值会触发下面的事件 grid.onEditChanged = function(text,iItem,iSubItem){ var name = dataTable.fields[iSubItem] winform.edit.print(dataTable[iItem][name],"-->",text); dataTable[iItem][name] = text; } winform.show() win.loopMessage(); aardio v15.38 更新(2017/12/30): --------------------------------------------------------------------------- 1、增加sqlite.backup import sqlite; import console var db = sqlite(":memory:"); db.exec("CREATE TABLE user( id INTEGER PRIMARY KEY )"); for(i=1;10) db.exec("INSERT INTO user VALUES (NULL)" ) // 备份内存数据库 import sqlite.backup; var backup = sqlite.backup(db,"\backup.data") backup.step(); // 查看备份结果 var dbTest = sqlite("\backup.data") console.dumpJson( dbTest.getTable("SELECT * from [user]") ) console.pause(); aardio v15.36 更新(2017/12/30): --------------------------------------------------------------------------- 1、修正 wsock.tcp.client 对象新增的 readAlloc() 一处可能导致程序崩溃的BUG, 这个BUG会影响到较多的其他库,建议尽快升级 aardio v15.35 更新(2017/12/30): --------------------------------------------------------------------------- 1、因为ini是基本被淘汰的格式,在aardio中用的很少, 确实我对这个没有对 json这些文件格式那么重视,库函数说明写的比较简单。 刚才我已经补充了一下fsys.ini的文档。 当然类似这种库本身就没几句代码,大家可以看一下库函数的源码都可以一目了然了, 有时候看文档反而不如直接看源码。 2、关于fsys.ini的函数失败返回null,之前我为什么没写, 在aardio中有返回值的库函数失败基本都返回null,大多数我都写了,但少数的可能没写, 毕竟库函数那么多,千万遍的重复相同的一句话也没意义。 在aardio语句手册->函数返回值 这一节我再加了一大段重点讲了一下关于这方面的问题。 aardio v15.34 更新(2017/12/30): --------------------------------------------------------------------------- 1、修正嵌入多个electron窗口的范例,在关闭窗口时electron进程不退出的问题,感谢xauto反馈。 electron不像aardio那样关闭所有窗口,并且没有代码再执行了以后会自动退出,你希望electron退出, 必须明确加上退出进程的代码,不然他就会一直在那里运行。所以请注意:electron主进程必须添加以下代码: //在所有窗口关闭时退出electron进程 app.on('window-all-closed', () => app.quit() ); aardio v15.33 更新(2017/12/30): --------------------------------------------------------------------------- 1、 添加 winform.onDropFiles回调用于支持文件拖放, 不用去写 _WM_DROPFILES 回调,也不用再调用 win.getDropFile(wParam)了 示例: import win.ui; /*DSG{{*/ var winform = win.form(text="请拖放一个或多个文件到窗口上";right=759;bottom=469) winform.add( edit={cls="edit";left=69;top=34;right=693;bottom=377;edge=1;multiline=1;z=1} ) /*}}*/ /* 可以在窗口属性中设置接受拖放, 也可以用DragAcceptFiles动态控制是否接受拖放 */ ::Shell32.DragAcceptFiles(winform.hwnd,true); //拖放会触发onDropFiles事件,files已经是处理好的文件路径数组了 winform.onDropFiles = function(files){ winform.edit.print(files) } winform.show() win.loopMessage() aardio v15.32 更新(2017/12/29): --------------------------------------------------------------------------- electron支持库重新换了个方法实现,用远进程API钩子的方法有些粗鲁了, 因为现在aardio与electron主进程可以更方便的交互,而electron提供了一个函数 win.getNativeWindowHandle().readInt32LE() 可以取到他的窗口句柄,所以改进了不再用API钩子。 而且elecron是多进程交互,多进程的交互需要方便的了解双方的状态, 例如RPC通道是否打通连接,窗口是否显示创建等等。我们必须改成按JS异步回调的思路来处理这些问题。 目前嵌入electron的功能已大幅简化,main.js最短只要几句代码就可以了。 在electron中可以用 aardio.on("ready") 来保证 A/E 双方都已经准备就绪。 而在aardio中可以用 app.onReady() 回调来保证 A/E 双方都已经准备就绪。 electron范例已经更新。 范例位置:aardio代码段 -> 范例程序 -> electron 本来下午就写好了,但是遇到了一个诡异的BUG,一切代码都正常,但很多代码都不执行了, 诡异的是,我随便找个地方加了一句 win.delay(100)就正常了,我满头大汗的找了三四个小时, 最后发现,原来是调试代码里试用electron调用winapi,然后弹了个MessageBox,因为electron取窗口句柄麻烦, 所以就没有设置父窗口,然后这个MessageBox藏到主窗口后面了,所以 electron停在那里了....... 不是简单的问题,就不需要工作量 aardio v15.31 更新(2017/12/29): --------------------------------------------------------------------------- 1、修正zlib.unzip报错,感谢xauto反馈 aardio v15.30 更新(2017/12/28): --------------------------------------------------------------------------- 1、增加asar文件解析器 electron用到一种asar的打包文件格式, 压缩工具都不支持这个,只能在node.js的命令行里搞,虽然我用node.js写了个工具, 不能直接查看文件列表,不能编辑,打包解包连个进度条都没有,闷声不响的....... 虽然码命令行能让人找到某种神圣的自豪感,但我还是受不了了,决定自己写一个。 标准库增加: fsys.asar.reader 用于解包 fsys.asar.writer 用于打包生成asar文件。 范例增加: aardio范例->文件操作->asar->打包解包工具 代码可以拿去当教程看看不错的。 2、文件流读写指针全部改用64位指针,size函数不再需要指定参数。 获取格式化的文件大小,请使用 size64函数。 3、json支持unint64位长整数(非标准不规范的写法,JS是支持不了的) 4、buffer在不指定初始值时,仍然初始化内存,不然有时候会带来一些诡异的问题。 5、其他一些代码细节上的优化改进,不一一列举。 aardio v15.29 更新(2017/12/26): --------------------------------------------------------------------------- 1、WebSocket的readyState属性增加到所有套接字对象, 所有套接字对象增加 isConnected()用于判断是否连接并准备就绪, 增加 isClosed()函数用于判断套接字是否关闭. 整理优化一些代码细节,改进部分文档、范例。 aardio v15.28 更新(2017/12/26): --------------------------------------------------------------------------- 1、改进WebSocket服务端对客户端群发消息时,自动忽略不在连接状态的客户端 aardio v15.27 更新(2017/12/26): --------------------------------------------------------------------------- 1、gdip.graphics增加drawArc函数,并修正BUG,感谢popdes aardio v15.26 更新(2017/12/26): --------------------------------------------------------------------------- 1、electron又一波强劲的更新杀来了, electron主进程也可以与aardio方便的互调函数了,写法跟渲染进程的用法一模一样。 再也不用担心主进程、渲染进程搞不清楚,交互吃力了。 请查看新增范例:aardio范例->electron->主进程交互 不用多写一句代码,不用自己安装模块,所以事情,由aardio帮你一键搞定。 nodeJs扩展库更新 更新(2017/12/26): --------------------------------------------------------------------------- 1、nodeJs扩展库改进代码,改进库函数说明文档, 执行命令支持传统命令行参数格式(使用一个字符串,空格分格式个参数), 也可 以使用原来的多函数参数格式(推荐,可以更好的自动处理转义), 增加通过nodeJs.workDir设计node.js工作目录的属性。 aardio v15.25 更新(2017/12/26): --------------------------------------------------------------------------- 1、改进 console.log() 输出数据长度超出控制台内存限制时改用 io.print输出。 aardio v15.24 更新(2017/12/26): --------------------------------------------------------------------------- 1、 web.socket.chrome 已改进增强, electron,chrome连接远程调试接口都使用这个对象实现。 chrome远程调试的范例也已经更新,并移动到新位置:aardio范例->Web应用->WebSocket->chrome 2、 electron强劲更新, 现在打开一个网址只要一句代码: app.start("http://bbs.aardio.com") 启用远程调试接口,也只要一句代码:app.remoteDebuggingPort = 0 aardio范例里增加了electron分类,增加了更多electron范例。 现在可以非常方便的支持Chrome的WebSocket远程调试协议。 这比调用chrome还要方便,chrome的调试接口是全系统只能有一个端口开放调试。 但我们使用electron,每个进程都可以有自己私有的远程调试接口,aardio会自动为 每个进程分配不会冲突的空闲端口,并且我们只要调用一句代码就可以连接到electron并且控制他了: var ws = web.socket.chrome(); ws.waitForConnected() 上面的 ws.waitForConnected() 会等待electron打开调试接口, 即使 electron是随机分配的端口,该函数仍然能自动找到端口号,并且 自动检测electron开启的websocket服务地址,然后自动连接到指定id的页面。 这本来是好几十句代码的事,在aardio里只要一句!只要一句了! 3、所有WebSocket客户端增加waitForConnected()函数,可阻塞等待连接成功。 当然也可以在onOpen事件中异步等待连接成功。 4、增加table.keys() 可用于获取对象的自定义键名,支持 _keys,_defined等元方法,web.json使用该函数确定键名列表 5、改进table.eachName() 函数调用 table.keys() 获取字符串键名列表。 web.json使用该函数获取对象成员。 6、改进table.len() 函数,支持自动识别对象的length属性,支持 _length元方法。 web.json使用该函数确定数组长度。 7、增加 table.eachIndex() 迭代器用于遍历数组成员,此函数调用 table.len, 支持相关元方法。并支持在元属性中使用_startIndex自定义下标的对象 8、增加 table.type() 函数,用于获取表对象是aaray还是object。 web.json使用该函数确定对象的类型。 9、增加 web.json.strip() 函数,用于将一个对象转为JSON再转回来,可以用于web.kit里快速的将一个JS对象完全转换为普通的aardio对象。 10、web.kit扩展库改进(跟上面几个有关) web.kit扩展库已改进,web.kit的JS对象可使用 table.eachName 遍历。 而 web.kit的数组可使用 tahble.eachIndex 遍历所有成员,非常方便。 也可以调用 web.json.strip(js对象),将webkit返回的JS对象直接转换为普通的aardio对象。 import win.ui; /*DSG{{*/ var winform = win.form(text="webkit - aardio操作js对象";right=1123;bottom=570) winform.add( edit={cls="edit";left=898;top=26;right=1363;bottom=539;db=1;dr=1;dt=1;edge=1;multiline=1;vscroll=1;z=1} ) /*}}*/ import web.kit.form; var wb = web.kit.form(winform); //使用external接口定义网页脚本可调用的本地函数 wb.external = { aardioCall = function(object){ winform.edit.print("-----------------遍历JS对象的所有成员-----------------------"); for name,value in table.eachName(object){ winform.edit.print("对象",name,value); } winform.edit.print("-----------------遍历JS数组的所有成员-----------------------"); for i,v in table.eachIndex(object.array){ winform.edit.print("数组",i,v); } winform.edit.print("-----------------直接转换为普通的对象-----------------------"); var obj = web.json.strip(object); winform.edit.print(obj); }; } wb.html = /** <a href='javascript: external.aardioCall({ url:"服务端URL", param:{a:1,b:2,c:3}, array:[11,12,13,14,15] }); '>调用aardio函数external.aardioCall()操作JS对象、数组</a> **/ winform.edit.orphanWindow(); winform.show() win.loopMessage(); aardio v15.22 更新(2017/12/25): --------------------------------------------------------------------------- 1、修正WebSocket客户端数据量大时出现接收不完整的问题,感谢5e365反馈 2、修上access,sqlServer返回空记录集报错,感谢 yc51反馈 3、access,sqlServer增加stepQuery函数,用于快速返回结果记录集的第一行数据 aardio v15.21 更新(2017/12/24): --------------------------------------------------------------------------- 1、edit,richedit控件做了一个小改进(但很有用), print函数支持序列化对象,如果当前导入了web.json,则自动使用json字符串化(并添加缩进、美化输出效果) 这个功能可以方便我们使用对话框输出变量值,因为JSON我们使用的频率非常高, 使用了任何基于JSON的模块,例如JSON RPC这些,文本框就自动支持直接以JSON显示对象的值了。 edit控件并不会自动导入web.json, 在写库的时候,我会尽量会减少模块之间不必要的依赖。 这样的好处是可以写出体积更小的程序(虽然aardio的模块已经都很小了,但还可以更小), 其次是避免程序的代码错缩复杂,相互纠缠,大家写代码的时候,尽量也保持这个习惯会更好。 aardio v15.20 更新(2017/12/24): --------------------------------------------------------------------------- 1、改进 electron支持库,修正启动时偶尔出现的崩溃问题。 再次改进 electron启动闪烁的问题,更丝滑,更流畅! 注意:在太低配置机器上,electron启动会稍慢,启动偶尔会出现黑屏,但启动后还是可以的 aardio v15.18 更新(2017/12/24): --------------------------------------------------------------------------- 1、改进 web.json, time,buffer类型字符串化的结果与node.js生成一样的格式。 这些是JSON标准没有规定的对象,而JSON用得最多的就是JS,所以与JS保持一致。 aardio v15.17 更新(2017/12/24): --------------------------------------------------------------------------- 1、 electron 范例再改进, 范例位置:aardio范例->Web应用->electron 增加拖动边框、窗口阻影等演示。 修正拖动标题栏导致electron卡死,关门为了他把winform.hitCaption改成了异步拖动 基本上现在嵌入electron可能遇到的常见需求我都在范例里演示了。 aardio v15.16 更新(2017/12/24): --------------------------------------------------------------------------- 1、 electron 支持库改进: 修正 aardio.js 中一处导致JS调用aardio函数出错的小BUG。 范例增加更多 js/aardio 交互调用函数的演示代码。 范例位置:aardio范例->Web应用->electron aardio v15.15 更新(2017/12/24): --------------------------------------------------------------------------- 1、修正嵌入 electron不能输入文字的问题。 目前如果启用开发者工具只能输入英文,禁用开发者工具就没问题了。 这个没什么影响,只有你自己调试才会开启这个,暂时不深究了。 刚才发现,如果在aardio中导出external对象。 那么在electron的控制台输入 aardio 都有出现成员函数列表, 这相当于eletron自动支持aasdl接口,非常方便。 aardio v15.14 更新(2017/12/23): --------------------------------------------------------------------------- 1、修正 electron启动后窗口仍然会闪一下黑屏的问题。 目前更改为在 electron创建窗口时,强行将其隐藏,然后在 electron主进程的创建窗口代码后添加以下代码: win.once('ready-to-show', () => { win.show(); }) 测试了可以完美的解决问题,启动很流畅再也不会晃动一下了。 这里告诉大家一个技巧,electron的主进程调试麻烦, 默认弹出的JS错误信息,其中关键的js文件又把最关键的文件名显示为了省略号, 结果错误信息成了天书,其实,大家可以在这个错误对话框上按一下Ctrl+C就可以了, 完整的错误信息就会被复制到剪贴板。 aardio v15.13 更新(2017/12/23): --------------------------------------------------------------------------- 1、修正electron启动会显示一下窗口标题栏的问题。 electron创建无边框窗口本来是没有标题栏的,但创建后会突然显示一下标题栏,然后又隐藏掉。 这带来的体验不太好,今天改进了一下,首先将electron窗口隐藏,等他刷完标题栏再显示,效果好多了。 aardio v15.12 更新(2017/12/23): --------------------------------------------------------------------------- 1、标准库添加 string.lcid.用于将三字母区域语言代码缩写转换为LCID 2、time.ole改进,支持以2种语法格式化输出字符串,例: //OLE时间支持系统格式化语法 var str = tostring(tm,"yyyy-MM-dd HH:mm:ss") //也默认支持time对象的格式化语法 var str = tostring(tm,"%Y年%m月%d日 %H时%M分%S秒")) //还可以转换格式化语法 console.log( tm.toSystemFormat("%Y年%m月%d日 %H时%M分%S秒")) 3、access, sqlServer重点改良,并添加到标准库中, 新版用起来更方便了,例如使用sqlServer调用存储过程: import console; import sqlServer; //打开数据库 var db = sqlServer( ["Data Source"]= "IP地址,服务端口"; ["Database"]= "数据库名"; ["User ID"] = "用户名"; ["Password"]= "用户密码"; ) //创建存储过程 if( ! db.existsProcedure("proc_test") ){ db.exec(" CREATE PROC proc_test( @a INT,@b INT1 ) AS begin SELECT @a + @b end "); } //创建命令参数对象,用于执行存储过程 var cmd = db.createCommand( "proc_test" ); //绑定存储过程参数 cmd.bind( a = 2; b = 3; ) //执行并显示结果 console.dump(cmd.getTable()[1]) console.pause(); aardio v15.11 更新(2017/12/22): --------------------------------------------------------------------------- 1、修正electron在一些系统中启动报JSON错误 aardio v15.09 更新(2017/12/22): --------------------------------------------------------------------------- 1、修正electron自动下载时失败 aardio v15.08 更新(2017/12/22): --------------------------------------------------------------------------- 1、重量级更新,aardio支持几句代码就嵌入electron了, 可以方便的与electron交互调用函数,史上最长的更新说明猛戳此链接: http://mp.weixin.qq.com/s/h4KHenCb_tuU-iIOb1oY4Q aardio v15.07 更新(2017/12/21): --------------------------------------------------------------------------- 1、强劲更新WebSocekt/RPC 相关库。 web.socket.jsonServer添加survey函数, 支持以调查模式方便的批量调用客户端函数,并获取返回值。 web.socket.jsonServer添添加publish函数, 支持以发布订阅模式方便的推送消息给所有客户端。 nanomsg的消息模式非常诱人,但是他一是不支持XP,二是客户端发错一个数据包就能让服务端崩溃掉, 目前用起来是有点不省心的,所以我用纯aardio模仿了nanomsg的通信模式,整体上没用几句代码就实现了, 没有使用第三方组件,所以也不会不支持XP什么的,几句代码提上就可以到处跑,兼容性没问题,当然, 这只是WebSocekt通信,在机制上跟nanomsg有些区别,但我们用于桌面软件开发,足够用了。 相关范例已更新。 2、与RPC有关的库实现支持 aasdl, 因为js语言不能像aardio那样,把rest-rpc,json-rpc提供的远程函数方便的自动转换为JS中的函数对象, aardio制定出aasdl使我们可以用最简单的方法快速的使用JS编写RPC客户端,并可以基于aasdl提供的接口描述自动封装JS函数对象, 让我们可以更愉快、更简单的用js与aardio服务端交互。 关于aasdl的详细描述参考网址:http://bbs.aardio.com/doc/aasdl/ aardio v15.06 更新(2017/12/21): --------------------------------------------------------------------------- 1、反复测试WebSocket相关功能,修正发现的几处小问题 aardio v15.05 更新(2017/12/21): --------------------------------------------------------------------------- 改进 web.json 解析器支持更宽松的语法, 目前解析器在安全兼容JSON标准的基础之上,扩展了以下功能: 1、支持单行注释,多行注释 2、元素分隔符可使用分号或逗号,也可以省略 3、键值分隔符可使用冒号,也可以使用等号 4、键名可省略引号 5、值置于圆括号中可使用简单的表达式 6、字符串可以换行 7、数值支持16进制 8、单个字符串、数值都可以解析出来 9、兼容JSONP格式 10、解析成功的JSON后面如果还有多余的文本时忽略 完全兼容JSON/JSONP格式,除个别基本用不到的特性以外兼容JSON5 添加了 web.json.tryParse函数(遇到JSON错误不抛异常而是返回null,错误信息) aardio v15.04 更新(2017/12/20): --------------------------------------------------------------------------- 1、改进asynHttpServer的run函数允许自动调用 start函数, 能少写一句代码就少写一句代码,将偷懒进行到底。 2、增加aardio范例->Web应用->HTTP服务器->异步HTTP服务器, 其实写个HTTP服务器就几句代码了,别看几句代码实现,功能可不少。 import win.ui; /*DSG{{*/ var winform = win.form(text="单线程异步HTTP服务端演示";left=10;top=4;right=774;bottom=467) winform.add( txtMessage={cls="richedit";left=29;top=22;right=741;bottom=432;db=1;dl=1;dr=1;dt=1;edge=1;link=1;multiline=1;vscroll=1;z=1} ) /*}}*/ import wsock.tcp.asynHttpServer; var srvHttp = wsock.tcp.asynHttpServer(); //运行HTTP服务端,如果要指定IP,端口,请先调用 srvHttpr.start(); srvHttp.run( function(response,request){ ; winform.txtMessage.print("HTTP协议访问:",request.url,request.remoteAddr); if( ..io.exist(request.path) && (request.path !="/") ){ response.loadcode( request.path ); } response.contentType = "text/json" response.jsonPrettyPrint = true; response.write(request) } ); winform.txtMessage.print( "http服务端已启动 " + srvHttp.getUrl() ) winform.txtMessage.print( " asynHttpServer可以创建单线程异步模式的服务端, 可以支持保持连接(Keep Alive),分块传输协议,支持断点续传,支持304缓存, 支持文件表单上传.支持使用aardio编写的网站,提供的接口兼容IIS/FastCGI下的aardio/web应用。 可以实现同一个网站在IIS上可以跑,在几句代码就实现的asynHttpServer也可以跑起来。 并且最方便的是,可以与WebSocket服务端共存共享端口。" ) winform.show() win.loopMessage(); aardio v15.03 更新(2017/12/20): --------------------------------------------------------------------------- 1、 process进程启动参数使用environment属性指定环境变量时, 可自动继承父进程的其他环境变量,并添加 inheritEnvironment 属性禁用此特性。 用于解决指定环境变量启动进程时,某些进程因为丢失默认的系统环境变量而启动失败。 2、改进 HTTP,WebSocket 服务端,修正几个小问题 扩展库更新(2017/12/20): --------------------------------------------------------------------------- 1、nodeJs扩展库升级,与aardio新版交互调用更方便了。 增加了更多node.js与aardio交互的例子(支持aardio v15.03以上版本)。 aardio v15.02 更新(2017/12/19): --------------------------------------------------------------------------- 1、 标准库中新增 web.socket.jsonServer 可基于WebSocket服务端方便的创建 JSON-RPC 2.0 服务端。 现在只要几句代码,就可以轻松的写一个:HTTP/WebSocket/JSON-RPC 三合一体服务端。 演示已增加到了范例,位置:aardio范例->web应用->webSocket aardio v15.01 更新(2017/12/18): --------------------------------------------------------------------------- 1、 web.socket.server 增加 onUpgradeToWebsocket 事件, 可用于客户端HTTP协议请求切换到WebSocket协议期间阻止请求, 例如用来实现判断网址中的路径决定是否启动WebSocket,此事件的用法 演示已增加到了范例,位置:aardio范例->web应用->webSocket aardio v15 更新(2017/12/18): --------------------------------------------------------------------------- 1、已知BUG批量修复。 2、增加函数 raw.find, raw.match, raw.indexOf函数, 用于通过指针在内存中直接搜索字符串或使用模式匹配功能,用法与string库下同名函数类似。 3、wsock标准库更新: 基本重写wsock标准库,优化代码,提升效率,增加很多新函数和新库。 因为新增的函数非常多,这里不一一说明,请查看新版库函数文档。 标准库新增: wsock.tcp.asynServer 用于创建单线程异步服务端程序 wsock.tcp.asynHttpServer 用于创建单线程异步的HTTP服务器 单线程异步服务端可以非常方便的在一个线程内连接、收、发数据, 并且不用涉及到多线程编程,使用非常方便。但是单线程异步的编程是非常麻烦的, 但没有关系,aardio已经封装的非常简单,例如单线程异步服务器,你完全感觉不到复杂度, 就跟原来在 wsock.tcp.simpleHttpServer或者IIS里写网站是一模一样,完全兼容。 4、新增WebSocket服务端开发库,改进WebSocket客户端开发库。 原用于开发WebSocket客户端的 web.socket.client 已完全重写并大幅改良代码。 新增 web.socket.server 用于开发 WebSocket服务端。 现在几句代码就可以写一个WebSocket服务端了, 而且 web.socket.server 也是基于 wsock.tcp.asynHttpServer, 同时继承了 wsock.tcp.asynHttpServer的所有优势。 使用 web.socket.server 可以在一个端口 同时运行WebSocket服务端和HTTP服务端了,这个你用IIS都很难搞定的事情, 用aardio只要几句代码就可以轻松搞定。 这里要说明一下,这些库主要用于桌面软件,不是用于百万并发, 不要又把“百万并发”搬出来哦。这就好象我做个自行车,你跟我提达不到“光速穿越”一样无意义。 举个例子,例如chrome,aria2提供的基于WebSocket服务端的RPC接口就非常的方便, 很方便的在进程间交互,不同语言间交互,小而美的服务端也是很常见的需求。 不要做任何事上来就把话说的很大很空。 用法请查看新增的范例,位置: aardio范例程序\Web应用\WebSocket\异步服务端、异步客户端 扩展库 更新(2017/12/18): --------------------------------------------------------------------------- 1、web.kit 新增一系列管理cookie的函数: cookieData 用于获取所有网站cookie。 cookieSet 用于设置所有网站cookie。 cookieClearSession cookieClear 等清除cookie的函数。 cookieLoad,cookieSave 等cookie文件操作函数。 添加这些函数是为了与 web.blink的接口保持一致,降低大家掌握新扩展库的学习成本。 aardio v14.44 更新(2017/12/15): --------------------------------------------------------------------------- 1、标准库增加 JSON-RPC 2.0服务端实现 web.rpc.jsonServer。 这是基于HTTP协议的服务端,适用于HTTP服务器环境,可用于 IIS/FastCGI, wsock.tcp.simpleHttpServer等环境下, 2、重写 web.rpc.jsonClient (基于HTTP协议的JSON-RPC 2.0客户端)。 3、重写 web.socket.jsonClient 实现基于WebSocket协议的JSON-RPC 2.0客户端。 4、重写 web.socket.chrome,改为继承 web.socket.jsonClient对象, chrome远程调试接口实际上就是基于JSON-RPC 2.0,所以直接共享代码了。 5、范例新增【Web应用】目录,本次更新增加的范例请到这个目录下找 现在基于这种协议的软件挺多的,所以本次更新狠狠的改进了这方面的功能。 刚发的一个例子: 使用WebSocket/RPC协议调用aria2,据说比迅雷强10倍的下载工具 http://bbs.aardio.com/forum.php?mod=viewthread&tid=22045 扩展库 更新(2017/12/13): --------------------------------------------------------------------------- 1、web.sciter 更新sciter组件到官网当前最新版本。 2、web.blink 增加getEle,waitEle,queryEles,click,dispatchEvent,cookieData... 等一大堆实用函数,细节请查看库函数文档 3、mpvPlayer扩展库修正部分BUG,感谢cad反馈 4、修正libvlc扩展库笔误一处,感谢cad反馈 aardio v14.44 更新(2017/12/13): --------------------------------------------------------------------------- 1、标准库增加了 fsys.cookies , 这是一个 netscape/curl cookie文件格式解析器 aardio v14.43 更新(2017/12/13): --------------------------------------------------------------------------- 1、修正 win.ui.tracker 笔误 aardio v14.42 更新(2017/12/13): --------------------------------------------------------------------------- 1、修正 web.multipartFormData 报参数为空的bug 扩展库 更新(2017/12/13): --------------------------------------------------------------------------- 1、在网页上要点一下“登录”链接,发现JS中querySelector()函数不支持按文本查找, 于是把 web.form中的aardio函数queryEles()以及waitQueryEles() 移植到了web.kit里。 试了一下非常好用: import win.ui; /*DSG{{*/ var winform = win.form(text="web.kit queryEles演示";right=1308;bottom=754) winform.add() /*}}*/ import web.kit.form; var wb = web.kit.form( winform ); wb.go("http://www.baidu.com") winform.show(); var eles = wb.waitQueryEles("a",{innerText="登录"} ); eles.click(); winform.show() win.loopMessage(); 今天增加的新功能目标为了实现 inet.http / web.kit 共享会话 请升级到新版本后查看演示代码: http://bbs.aardio.com/forum.php?mod=viewthread&tid=22023 扩展库 更新(2017/12/12): --------------------------------------------------------------------------- 1、web.kit 取出的cookie有deleted值,防碍使用 inet.http 共享会话的美好愿望, 取cookie函数加代码 string.replace(ck,"[^;]+\s*\=\s*deleted\s*;","") 予以修正。 aardio v14.41 更新(2017/12/12): --------------------------------------------------------------------------- 1、改进 web.joinHeaders() 避免对UrlEnocde过的值重复做UrlEnocde编码。 2、修正 console.writeText() 对未转换为字符串的值做UTF8编码检测导致报错。 aardio v14.40 更新(2017/12/12): --------------------------------------------------------------------------- 1、 time.gmt() time.iso8601() 如果传入参数是包含本地时间的time对象,返回补偿时差后的标准时间。 2、 fastcgi.client,wsock.tcp.simpleHttpServer 等输出时间统一改为调用 time.gmt() 3、 inet.http, inet.whttp 分别增加 disableCookies() 函数,用于禁止cookie自动管理 4、 inet.setCookie() 改进可以更方便的设置持久化cookie、会话cookie aardio v14.38 更新(2017/12/12): --------------------------------------------------------------------------- 1、 修正 console.log() 输出ANSI字符串乱码问题。 aardio v14.37 更新(2017/12/10): --------------------------------------------------------------------------- 1、 fsys.codepage 改进编码识别功能。 2、 web.mshtml 改进编码识别功能。 aardio v14.36 更新(2017/12/09): --------------------------------------------------------------------------- 1、 web.socket.client 关闭事件增加发送、接收退出代码的功能 aardio v14.35 更新(2017/12/09): --------------------------------------------------------------------------- 1、修正 string.unescape() 的一处可能导致内存错误的BUG,感谢carl反馈该问题。 这个BUG会影响到所有直接或间接调用了这个函数的库,建议尽快更新以修复问题。 aardio v14.34 更新(2017/12/07): --------------------------------------------------------------------------- 1、 wsock.tcp.client 的readTo()函数, 如果服务端输出内容后,未输出结束标记而是立即关闭连接, 这时候返回接收的字符串,以及错误信息。 之前版本是丢弃接收的数据,这个在有些时候是不合适的。 扩展库更新 更新(2017/12/07): --------------------------------------------------------------------------- 今天狠狠的改进了下 nanomsg 扩展库, 详细的写了函数文档( 工具-> 库函数文档 里打开) 此扩展库的名字改为 nnmsg, 因为是改名,所以不影响原来的库继续使用, 之所以改名,是因为每次我按namespace的时候他都跳出来。 增加了nnmsg范例,在扩展库管理器中双击下载, 等一会我会在论坛发一个 nnmsg扩展库 的教程。 aardio v14.33 更新(2017/12/05): --------------------------------------------------------------------------- 1、改动了一下 file.seek() 放宽了指针位数的限制, 已经支持PB级了,所以肯定够用了。 aardio v14.31 更新(2017/12/05): --------------------------------------------------------------------------- 1、修正treeview范例错误,感谢 xauto反馈 扩展库(2017/12/05): --------------------------------------------------------------------------- 1、更新web.blink(miniblink)扩展库,修正一些BUG,增加一些回调, 所有回调函数分离到 web.blink.callback模块,重新编写了范例(扩展库管理器中双击下载), 感谢 znkee提供的部分代码。http://bbs.aardio.com/forum.php?mod=viewthread&tid=21980 aardio v14.30 更新(2017/12/05): --------------------------------------------------------------------------- 1、修正inet.url.split函数解析URL返回结果不正确 aardio v14.29 更新(2017/12/04): --------------------------------------------------------------------------- 1、小改进 web.socket.chrome 范例, 在连接chrome以前,先禁用发送数据的按钮,避免误操作。 增加判断pages是否为空的代码。 aardio v14.28 更新(2017/12/04): --------------------------------------------------------------------------- 1、在 web.socket.client 基础上进一步封装并增加了两个库 web.socket.jsonClient, web.socket.chrome web.socket.chrome 可用于Chrome远程调试接口控制Chrome浏览器, 参考新增范例:aardio范例->模拟自动化->Chrome远程调试接口 关于Chrome远程调试接口: https://chromedevtools.github.io/devtools-protocol/ aardio v14.27 更新(2017/12/03): --------------------------------------------------------------------------- 1、web.socket.client 增加关闭心跳设置、自定义心跳数据帧等功能 aardio v14.26 更新(2017/12/03): --------------------------------------------------------------------------- 今天写了一个WebSocket客户端支持库:web.socket.client 用过其他组件都觉得麻烦,干脆自己写了一个,这个库纯aardio代码实现,小、轻、快! 这个WebSocket客户端基于单线程异步套接字 只要监听事件就可以方便的收发数据,不卡界面,不需要用到多线程!一切都变得非常简单。 对于WebSocket客户端来说,去弄什么多线程只会把简单的事不必要的搞复杂。 支持双向心跳,单向心跳,可以断线重连,下面是一个简单的例子(可以在"aardio范例->网络应用->WebSocket"找到下面的代码): import win.ui; /*DSG{{*/ var winform = win.form(text="WebSocket客户端演示";right=770;bottom=467) winform.add( btnClose={cls="button";text="断开";left=556;top=293;right=710;bottom=331;db=1;dr=1;z=6}; btnOpen={cls="button";text="连接WebSocket服务端";left=381;top=293;right=535;bottom=331;db=1;dr=1;z=2}; btnSend={cls="button";text="发送数据";left=569;top=346;right=711;bottom=426;db=1;dr=1;z=4}; txtMessage={cls="edit";left=29;top=22;right=741;bottom=285;db=1;dl=1;dr=1;dt=1;edge=1;multiline=1;z=1}; txtSend={cls="edit";text="WebSocket测试";left=29;top=348;right=558;bottom=423;db=1;dl=1;dr=1;edge=1;multiline=1;z=3}; txtUrl={cls="edit";text="ws://121.40.165.18:8088";left=29;top=295;right=368;bottom=331;db=1;dl=1;dr=1;edge=1;z=5} ) /*}}*/ import web.socket.client; var ws = web.socket.client(); ws.onOpen = function(){ ws.send("服务端你好吗?!") } ws.onClose = function(){ winform.txtMessage.print("onClose"); } ws.onError = function(err){ winform.txtMessage.print("onError",err); } ws.onMessage = function(msg){ winform.txtMessage.print(msg.data); } winform.btnSend.oncommand = function(id,event){ ws.send(winform.txtSend.text) } winform.btnOpen.oncommand = function(id,event){ ws.connect(winform.txtUrl.text); } winform.btnClose.oncommand = function(id,event){ ws.close(); } winform.txtUrl.text = "ws://121.40.165.18:8088"; ws.originUrl = "http://www.blue-zero.com"; winform.show() win.loopMessage(); aardio v14.25 更新(2017/12/02): --------------------------------------------------------------------------- 1、添加table.shuffle() 函数, 这个函数原来是范例里的洗牌算法(乱序),看了下代码没几句决定加到标准库里。 2、web.mshtml 修正打开网址时未调用 document.close()导致 waitDoc卡住的问题。 3、继续改进文档 扩展库 更新(2017/12/01): --------------------------------------------------------------------------- web.blink(miniblink) 支持完美调用JS对象, 因为miniblink本身无法调用dom函数,加了一个aardioCallObject函数来封装了一下。 基本所有的web.kit示例都能正常在miniblink上运行了。 例: import win.ui; /*DSG{{*/ var winform = win.form(text="Web Kit";right=848;bottom=585) winform.add() /*}}*/ import web.blink.form; wbKitView = web.blink.form(winform) wbKitView.go("http://www.so.com") winform.show(); wbKitView.wait(); wbKitView.querySelector("#input").value = "aardio webkit"; wbKitView.querySelector("#search-button").click(); wbKitView.wait(); winform.text = wbKitView.eval("document").location.href win.loopMessage(); aardio v14.24 更新(2017/12/01): --------------------------------------------------------------------------- 1、string.xml 的queryEle(),queryEles()函数, 以及 web.form的queryEles(),waitQueryEles() 作以下改进: 当搜索tagName,id,name等属性时,如果搜索的属性值不含标点符号, 则仅使用忽略大小写的完全匹配方式进行比对, 如果属性值含有标点(使用了模式匹配), 仍然会使用原来的规则进行比对(模式匹配,以及部分匹配) 这个规则主要用于兼容旧的代码,实际上这几个属性用模式匹配只会添乱。 2、string.xml 增加 getEle() getEles() 函数,用法参考函数说明。 aardio v14.23 更新(2017/11/30): --------------------------------------------------------------------------- 1、更新文档 aardio v14.22 更新(2017/11/28): --------------------------------------------------------------------------- 1、winform.treeview 增加 checkAll() 函数,用于全选子节点(并更新父节点), 增加enumParent函数,增加expandAll()函数。演示: import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=349;bottom=249) winform.add( treeview={cls="treeview";left=10;top=11;right=336;bottom=233;asel=false;bgcolor=16777215;chkBox=1;edge=1;z=1} ) /*}}*/ var hitem = winform.treeview.insertItem( text="程序目录" ); var hSubItem = winform.treeview.insertItem( { text="子目录" },hitem/*父节点*/); var hitem = winform.treeview.insertItem( { text = "下面用一个数组指定子节点"; { { text = "子节点1" }; { text = "子节点2" }; { text = "下面用一个数组指定子节点"; { "a";"b";"c";{ text = "d" } } }; } } ) //对目录树的选择操作 winform.treeview.onnotify = function(id,code,ptr){ //用户勾选、取消勾选复选框 if(code = 0xFFFFFFE8/*_NM_TVSTATEIMAGECHANGING*/){ var hItem = winform.treeview.hitTest(); //这里一定要取反,因为是选中状态更新以前触发这个事件 var checked = !winform.treeview.getChecked(hItem); winform.treeview.checkAll(hItem,checked); winform.treeview.expandAll(hItem); } } winform.show() win.loopMessage(); aardio v14.21 更新(2017/11/28): --------------------------------------------------------------------------- 1、......本版修改已被废弃 aardio v14.20 更新(2017/11/27): --------------------------------------------------------------------------- 1、com.flash改进,调用flash函数可以简化写法, 例如 flash.xcall("callMe",1,2) 可以直接写为 flash.callMe(1,2); aardio v14.19 更新(2017/11/26): --------------------------------------------------------------------------- 1、添加 wsock.tcp.asynClient 可以使用更少的代码创建TCP异步客户端,例如: import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=660;bottom=381) winform.add( edit={cls="edit";left=19;top=14;right=641;bottom=363;edge=1;multiline=1;z=1} ) /*}}*/ import wsock.tcp.asynClient; var tcpClient = wsock.tcp.asynClient(); var file = io.open("/test.zip","w+b");//注意io.open默认是文本方式写入的,b指定二进制模式 tcpClient.onReceive = function(err){ var recvbuf = tcpClient.recv(0x100000); //如果recv每次读取长度设的太小,会导致关闭事件可能在读取数据完成以前触发 if( #recvbuf ) { file.write( recvbuf ); winform.edit.log("已下载",math.size64( file.seek() ).format(),'\r\n') } } tcpClient.onClose = function(err){ winform.edit.log("服务端已断开",err); } tcpClient.connect("127.0.0.1",7510) //因为是异步套接字,这里不需要检查返回值 winform.show(); win.loopMessage(); aardio v14.18 更新(2017/11/26): --------------------------------------------------------------------------- 1、web.rest.client 修正无提交参数时,extraParameters设置无效的问题 2、fsys.localfile 移除对fsys相关函数的依赖,使用io库函数替代。 aardio v14.17 更新(2017/11/25): --------------------------------------------------------------------------- 1、web.rest.client 增加 addHeaders,referer等属性。 web.rest名字空间下其他基于web.rest.client的对象也都增加了这两个属性。 这几个属性原来也可以通过_http对象设置,改进后可以少打几个字。 2、inet.http,inet.whttp的post函数的post数据可以指定为一个表, 如果post数据是表会自动调用 inet.url.stringifyParameters 转化为字符串, 可使用 codepage属性指定转换时UrlEncode编码使用的输出代码页,默认使用UTF8编码。 aardio v14.16 更新(2017/11/23): --------------------------------------------------------------------------- 1、小改进[字符集/代码页 查询工具],可显示更多代码页。 aardio v14.15 更新(2017/11/23): --------------------------------------------------------------------------- 1、增加[字符集/代码页 查询工具] 位置:aardio工具->文本文件->字符集/代码页 2、标准库增加 com.interface.IMultiLanguage2 接口 [字符集/代码页 查询工具] 即使用此接口的示例,使用此接口可自动检测数据的编码。 例如: import com.interface.IMultiLanguage2; var multiLanguage = com.interface.IMultiLanguage2.Create(); var codepage = multiLanguage.detectInputCodepageEx("测试字符串"); aardio v14.14 更新(2017/11/22): --------------------------------------------------------------------------- 1、string.unescape()函数改进,允许传入的转义字符串包含单引号。 2、转义字符串的Unicode转义增加两种表示方法: 2.1 大写的\U后可选使用4个或6个16进制字符表示Unicode编码,使用6个16进制字符可直接支持UCS-4的4字节Unicode编码,例如'\U02b81c'。 2.2 小写的\u因为考虑到兼容JSON必须使用4个16进制字符,但可以与JS一样使用2个字符编码表示一个4字节Unicode字符,例如:'\uDC1C\u4F60ff' 3、raw.str支持传入结构体参数,可用于方便的将WORD数组转换为Unicode字符串。 4、table.append() 改进:允许忽略null参数 5、增加 ustring.pack, ustring.unpack, ustring.charCodeAt 等函数 aardio v14.13 更新(2017/11/19): --------------------------------------------------------------------------- 增加 inet.stat 用于列出网络连接, 例如列出所有80端口的TCP连接,并按连接数排序: import console; import inet.stat; console.dump(inet.stat(80).tcp) console.pause(true); 今天晚上被某个无聊的家伙CC攻击,于是写了这个库, 昨天灌了上万个垃圾帖子,今天又CC攻击,每天吃饱了干这事你的时间是多不值钱哦?! 附:调用IIS接口自动拉黑IP的代码: import dotNet; var appDomain = dotNet.clr().createAppDomain(); var serverManager = appDomain.load("Microsoft.Web.Administration").createInstance("ServerManager"); var config = serverManager.GetApplicationHostConfiguration(); var ipSecuritySection = config.GetSection("system.webServer/security/ipSecurity","bbs.aardio.com"); var ipSecurityCollection = ipSecuritySection.GetCollection(); var addElement = ipSecurityCollection.CreateElement("add"); addElement.Item["ipAddress"] = "197.197.197.197"; addElement.Item["subnetMask"] = "255.255.255.255"; addElement.Item["allowed"] = false; ipSecurityCollection.Add(addElement); serverManager.CommitChanges(); aardio v14.12 更新(2017/11/15): --------------------------------------------------------------------------- 1、标准库新增 crypt.aes,用于实现AES加密算法,示例代码: import console; import crypt.bin; import crypt.aes; var aes = crypt.aes(); aes.setPassword("12345678"); var str = aes.encrypt("Test String"); console.log( crypt.bin.encodeBase64( str ) ); console.pause(true); 2、增加以下函数 crypt.hmac.sha256(); crypt.hmac.sha384(); crypt.hmac.sha512(); crypt.sha256(); crypt.sha384(); crypt.sha512(); 3、web.joinHeaders() 改进如果参数是键值对列表,自动对值中包含的宽字符(汉字)进行UrlEncode编码 4、修正 win.taskScheduler 任务延时间隔很小时导致任务不触发的BUG aardio v14.11 更新(2017/11/14): --------------------------------------------------------------------------- 1、com.flash改进,创建控件时自动启用控件窗口的内部裁剪样式。 2、web.ui改进,避免拖动标题栏时双击事件失效。 扩展库更新(2017/11/14): --------------------------------------------------------------------------- 添加 libpq 扩展库,用于调用PostgreSQL数据库,示例: import console; import libpq; //PostgreSQL 服务端: https://get.enterprisedb.com/postgresql/postgresql-10.0-1-windows-binaries.zip var db =libpq( dbname = "postgres"; port = 5432 ; user = "postgres"; password = "密码"; ) var rs = db.exec(`SELECT 123,'{"a": "abc","b":false}'::json`); for(a,b in rs.each() ){ console.log(a,b); } var t = rs.getTable(); console.dumpJson(t); console.pause(); aardio v14.10 更新(2017/11/12): --------------------------------------------------------------------------- 1、gdip.bitmap,gdip.image 增加 saveToBuffer()函数,用于直接保存图像到内存缓冲区。 2、增加数组去重函数 table.unique,返回新数组不修改原数组。 3、table.append改进拼接数组效率,连接有序数组(忽略其他键值对成员),返回参数1 4、动态指针支持使用raw.concat函数直接追加结构体,示例: var p = raw.realloc(12); p = raw.concat(p,{BYTE x[] = "abcd"}) p = raw.realloc(0,p); 使用动态指针实现的string.builder 则通过重载操作符可如下与结构体连接: var p = string.builder() p += {BYTE x[] = "abcd"} 5、raw.buffer的参数2允许使用指针类型,方便快速复制内存到缓冲区。 6、增加 raw.copy(目标指针,源数据,复制长度) 这个函数基本类似 ::CopyMemory,::Kernel32.RtlMoveMemory 区别是可以自动检测长度(除指针以外) 参数@1允许指针,buffer类型参数, 参数@2允许使用buffer,字符串,或结构体参数, 此函数不允许其他可自动转换为指针的非指针类型参数。 如果复制源或目标是buffer,字符串,或结构体等可获取内存长度的类型, 复制长度可以省略,如果未指定复制长度,并且源数据是buffer,或字符串时, 复制全部数据并且复制尾部隐藏的'\u0000'到目标内存。 如果aardio能获取复制源或目标的内存长度, 那么复制长度不会超过实际检测到的内存长度, 但如果参数是指针将无法自动检测到内存长度。 7、fsys.stream 添加 lockPointer,unlockPointer函数 8、修正plus控件实现滑块控件时拖动到左侧留有边距问题。 9、修正plus控件在显示后调用skin函数未及时刷新的问题。 aardio v14.09 更新(2017/11/10): --------------------------------------------------------------------------- 1、API尾标语法改进,对于已存在W尾标的API函数, 可在调用API时使用其他尾标,并且仍然可以正确检测并切换到API函数的Unicode版本 2、time对象改进,文本解析为时间支持省略分隔符, 省略分隔符时aardio将自动检测数值的长度,并努力解析出正确的结果, 例如以下时间可正确识别: time("20170822 123623") 年月日8位,时分秒6位 time("170822 123623") 年月日6位,时分秒6位 文本转换为时间,对于格式标记的%y,%Y改进为在解析年份时兼容2位,4位年份。 文本转换为时间,改进为忽略星期字段的错误(并不影响正确的输出) 在解析文本为时间时,对于最后一个匹配格式串成功之后的剩余字符串, aardio在跳过空白字符以后,将连续非空字符录入 endstr 属性(用于更准确的检测iso8601等格式的时区) 根据以上特性改进time.gmt,time.iso8601,更强大的解析能力演示: //HTTP时间RFC 1123格式,格式写错的这么离谱仍然可以自动修正 console.log(time.gmt("Sun,07Feb2016 081122 +7")) //兼容HTTP时间RFC 850格式,星期写错了自动修正 console.log(time.gmt("Sunddddday, 07-Feb-16 08:11:22 +0700")) //支持iso8601省略分隔符的格式 console.log(time.iso8601("20170822 123623 +0700")) //支持iso8601省略分隔符的格式 console.log(time.iso8601("20170822 123623 +7")) //兼容iso8601省略分隔符的写法 console.log(time("20170822 123623")) 3、math.size64添加swap函数用于转换大小端字节序 aardio v14.08 更新(2017/11/9): --------------------------------------------------------------------------- 1、inet.url.ecnode 等一系列UrlEncode编解码函数支持指定代码页(codepage), 旧版本仅简单的指定是否UTF8编码,目前可指定具体的codepage,但仍然兼容旧版的写法。 2、web.rest.clinet 以及基于该类的客户端组件支持更准确的识别charset并自动进行编码转换, 如果自行重写了stringifyRequestParameters等接口要注意原来指定utf8编码的参数已改为指定具体codepage, 因为对请求参数进行实际编解码的inet.url.stringifyParameters等函数已自动支持新的写法,所以可以自动兼容旧的写法。 对于web.rest.jsonClient因为使用JSON编码时已经转换为Unicode格式,所以提交请求数据时并不需要考虑编码相关的参数。 3、string.encoding代码优化,对于注册表获取的结果会进行缓存,避免重复查询编码。 4、其他BUG修正,参考BUG提交页 aardio v14.07 更新(2017/11/6): --------------------------------------------------------------------------- 1、改进 process.getPath() 支持获取64位进程路径 aardio v14.06 更新(2017/11/4): --------------------------------------------------------------------------- 1、库函数文档取消显示在IDE前面的设置,方便切换窗口。 2、fsys.mmap 改进以"r+b"模式打开已存在的文件,并支持传入fsys.file对象作为参数, 需要注意 fsys.mmap 主要用于进程间通信共享内存(例如 process.command ),不适合一般的文件读写, 文件读写应使用文件流对象。 扩展库 更新(2017/11/3): --------------------------------------------------------------------------- 1、更新 soImage库,修正getBytes函数报错等,感谢匿名反馈。 改进 capture() 函数可能导致的窗口卡住问题。 aardio v14.05 更新(2017/11/3): --------------------------------------------------------------------------- 1、改进了调试进程管理器,加上了多线程(以前这个工具是单线程的,有时候会有些卡) 调试的时候,也可以打开系统任务管理器看aardio.exe进程,一般占内存最大的那个是IDE aardio v14.04 更新(2017/11/2): --------------------------------------------------------------------------- 标准库增加 win.ui.layered,可用于方便的创建分层透明窗口, 我们知道可以透明显示的分层窗口,是无法显示窗口上的控件子窗口的, 但是使用标准库提供的win.ui.layered,我们可以让分层窗口透明显示,并且还可以正常的显示窗口上的plus控件。 以下是一个简单的演示: import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( plus={cls="plus";left=264;top=208;right=528;bottom=296;notify=1;repeat="center";z=1} ) /*}}*/ import win.ui.layered; win.ui.layered(winform); import inet.http; winform.plus.skin( background = { default = inet.http().get("http://bbs.aardio.com/static/image/common/aardio.png"); hover = 0xFF00FF33; } ) winform.plus.oncommand = function(id,event){ winform.close(); } winform.show() win.loopMessage(); 扩展库更新(2017/11/2): --------------------------------------------------------------------------- 1、web.blink.form,web.kit.form 的打印函数 print() 支持指定缩放比例,正数缩放文档,负数缩放页面,缩放会保持比例,并保持不超出页面 2、soImage更新支持自动修正常见图像格式错误的后缀名, 添加 soImage.gifFile 用于生成GIF格式图像(可用于录屏等操作),演示: import console; import soImage; console.open() var gifFile = soImage.gifFile("/test.gif"); var img = soImage(); for(i=1;20;1){ img.capture(); //截屏 gifFile.write(img ); //写入GIF文件 console.log("已录制",gifFile.count() ) sleep(10) } gifFile.close(); console.pause(); 扩展库更新(2017/11/1): --------------------------------------------------------------------------- 1、web.blink.form,web.kit.form 各增加一个用于GDI打印的print函数 2、修正调用 web.kit.view() web.blink.view()方式 调用组件自带默认控件窗口时,输入框不能输入任何字符的问题 3、修正 web.blink 鼠标指针始终是默认光标的问题。 aardio v14.03 更新(2017/10/31): --------------------------------------------------------------------------- 1、string.list支持在第三个参数设置引号(值包含行分隔符时使用引号生成字符串),这个比原来配置引号等设置的代码更简单一些。 2、math.size64 对象,支持与字符串做连接操作,不需要事先tostring()。 3、wsock.tcp.simpleHttpServer 狠狠的改进了一下, 支持使用threadGlobal属性添加服务线程可用的全局变量,这样就可以在网页服务端代码里调用窗体控件什么的了,很好玩的! 支持自定义onThreadCreated事件,可以用于只需要HTTP服务线程执行只需要执行一次的初始化代码。 支持自定义documentRoot属性设置网站所在目录,例如: import console; import wsock.tcp.simpleHttpServer; var srvHttp = wsock.tcp.simpleHttpServer() srvHttp.threadGlobal = { test = "value"; //可以指定HTTP监听线程可以使用的全局变量 } srvHttp.onThreadCreated = function(documentRoot,urlRoot){ } srvHttp.documentRoot = "d:\website\" console.log(srvHttp.getUrl()) srvHttp.run( function(response,request){ } ); 这里有一个用上面的功能实现的HTTP文件浏览器例子 扩展库更新(2017/10/31): --------------------------------------------------------------------------- 1、web.sciter 组件升级到最新版,修正 documentElement.outerHTML 赋值导致崩溃,并支持生成独立EXE文件。 2、web.blink 移除 web.blink.fileSystem(不稳定,会导致崩溃) 3、修正py,py2扩展库eval函数报错。 aardio v14.02 更新 --------------------------------------------------------------------------- 1、增加库 fsys.fileInfo 用于获取文件唯一ID,更可靠的校验文件路径是否指向同一文件。 2、改进 gdip.bitmap 支持传入 buffer类型参数直接创建图像(可以减少一次不必要的tostring转换)。 3、修正 process.temp 一处严重 BUG, 建议使用了这个库的程序尽快升级,感谢siam193反馈。 4、其他 BUG 修正,参考BUG反馈页面。 aardio v14.01 更新 --------------------------------------------------------------------------- 1、增加 string.html.ncr(), string.xml.ncr() 函数,用于转换HTML NCR/HTML Entities编码 2、修正 xauto反馈的几处笔误,感谢 xauto 3、修正 一个控件被设置为另一个控件的子窗口(用于重叠)时,控件的自动锁定右边距失效的问题,感谢 popdes 反馈 4、修正plus控件在不同状态下分别指定背景色,图像(不是都用图像)时会出现切换图像不变的问题,感谢“匿名”反馈 5、修正v14 库目录下包含失效的软链接出错,感谢 lacker 反馈 6、窗口控件设计属性增加width,heigth选项(控件属性->大小->width,height) v14 更新 --------------------------------------------------------------------------- 不声明直接调用API函数时新增一系列API尾标语法, 即API函数名最后一个字符不是大写字符,就可以使用在后面添加一个大写的特定字符声明一个调用设置。 目前支持的语法如下: dll.ApiNameW() 强制切换到Unicode版本(负责UTF8-UTF16自动转换) dll.ApiNameA() 强制切换到ANSI版本(不负责ANSI编码自动转换) dll.ApiNameL() 使返回值为64位LONG类型 dll.ApiNameP() 使返回值为指针类型 dll.ApiNameD() 使返回值为64位double类型浮点数 dll.ApiNameF() 使返回值为32位float类型浮点数 dll.ApiNameB() 使返回值为8位字节型,兼容C++中的bool类型 注意,不使用后缀声明语法时,默认返回值为int 32位整数。 在API函数名后添加声明后缀,不会影响到自DLL查找API函数的结果,无论真实的API带不带该声明后缀 - aardio都能找到。 详细的说明请查看帮助文档:http://bbs.aardio.com/doc/reference/libraries/kernel/raw/callapi.html dll.api() 新增一种用法,在仅指定一个参数时,直接返回导出符号指针而非返回函数。 允许DLL对象在API参数中直接转换为句柄,而不需要调取函数获取句柄,以前限制了这个操作是为了避免误把DLL传到错误的API里去使用,不过现在看来这个限制没什么必要,还会导致多写一些不必要的代码。 禁止aardio检测结构体声明时触发元方法 @._get("_struct"),这个操作非常频繁而且毫无必要并且一不小心就会踩到坑里,而且一般人很难想到错误的原因,新版已经把这个坑人的功能去掉了。 窗体设计器中拖放控件不再默认设为上一个控件的大小,本来这是为了方便连续创建相同大小的控件,但实际上这个功能多此一举,而且致使拖放控件时不好控制,新版已去掉这个坑人功能。 本版完全重写了py2(python2.x),py(python3.x)的扩展库,增强了与python互动的能力, 并在aardio v14中增加了很多与python交互的范例,以及添加了大量python,aardio语法对比的文档和例子。 下面附上一个在aardio中实现python模块,并且可以在python中import导入该模块并调用成员函数的示例(使用python3)

import console;
import py;
/*
导出一个名字为"aardio"的模块,
在python中可以使用 import aardio导入。

可以使用此方法导出任何其他的aardio表,Python中可以访问导出表中的成员函数,
除函数以外的成员不导出,但是可以在被调用函数中用owner对象访问自身的其他成员变量。
*/

py.export.aardio ={
    
    c = 456;
    test = 
function(a,b){
        ..console.log(
"aardio函数被python调用了");
        
return a + b + owner.c;
    } 

}

var pyCode = /**
import aardio
def testPy():
    return aardio.test(12,2)
**/


py.exec( pyCode )
console.log( py.main.testPy() );

console.pause()