# aardio 范例: web.form 入门



```aardio
//入门
import win.ui;
/*DSG{{*/
var winform = win.form(text="web.form 入门";right=892;bottom=566;scroll=1)
winform.add()
/*}}*/

/*。
web.form 基于任何 Windows 系统都自带的内核，生成的 EXE 体积很小。
即使现在的新系统删除 IE 浏览器，IE 内核浏览器的控件仍作为操作系统组件被保留
（这是因为 IE 内核网页控件因其接口简洁，曾像 static 控件一样普及并被广泛用于桌面程序）。
Win10/11 自带 IE11，不自带 IE11 的旧系统已经很罕见。

改用 web.view 库可支持系统自带的 Edge Chromium 内核。
相比 web.form ，web.view 更强大、更现代化、速度更快、内核更新。
但 web.form 属于进程内控件，COM 接口交互更为简单直接，
例如 JS 与 aardio 可以更直接方便的互调。
但 web.view 则只能以异步的方式实现跨进程调用。
*/
import web.form;
var wb = web.form( winform );//参数 @1 指定嵌入窗口（可以是 winform 或 static,custom 等控件对象）。

import console;
wb.external={
	tab = {abc=1;b=2};
	aardioArray = function(){
		return wb.jsArray({12;23;34}); 
	};
	log = function(...){
		console.log(...)
		
		/*
		如果不需要返回值，
		并且执行一些耗时操作时觉得有点慢，
		改用异步调用 aardio 函数（让 JS 先返回）响应速度通常更快。
		
		例如：
		winform.setTimeout(func,1,其他参数）
		
		阻塞消息循环的耗时调用则可以改用 thread.invoke 等创建线程去执行。
		*/
	}; 
} 
import console;

wb.html = /**
<!doctype html>
<html>
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<script type="text/javascript">

	$enum = function(obj,callback,thisObj){
	 
		if( obj instanceof Array ){
			for(var i=0;i<obj.length;i++){
				callback.call(thisObj||window,i,obj[i],obj);  
			}
		}
		else if( obj instanceof Object ){
			for( k in obj){
				callback.call(thisObj||window,k,obj[k],obj); 
			}
		}
		else{
			if(typeof(obj)=="unknown"){
				
				/*
				注意多维 aardio 数组转换为 JScript 会转换为单维数组，
				改用 JSON 传输参数可支持更多 JS 对象。
				
				先转换为 VB 数组，再转换为 JS 数组IE 11 仍然可用此方法
				*/
				var array = new VBArray(obj).toArray();
				for (var i = 0; i < array.length; i++) {
					callback.call(thisObj||window,i,array[i],array );
				}
			}
			else if( obj ) { 
				var e = new Enumerator(obj);  
				var k;
				if(!e) return;
				
				for   (;!e.atEnd();e.moveNext()){ 
					k = e.item(); 
					callback.call(thisObj||window,k,obj[k],obj); 
				} 
			}
		} 
	}  
	</script>
	
	<script type="text/javascript">
	//其他Js代码
	
	</script>
	
	<style type="text/css">
    body { 
        font: 10.5pt/1.3;
    }
    </style> 
</head>
<body style="margin:20px;font-size:14px">
	<button id="myId">  
		点这里试一试
	</button>
<br><br>
web.form 基于任何 Windows 系统都自带的内核，生成的 EXE 体积很小。
即使现在的新系统删除 IE 浏览器，IE 内核浏览器的控件仍作为操作系统组件被保留
（这是因为 IE 内核网页控件因其接口简洁，曾像 static 控件一样普及并被广泛用于桌面程序）。
Win10/11 自带 IE11，不自带 IE11 的旧系统已经很罕见。
<br><br>
改用 web.view 库可支持系统自带的 Edge Chromium 内核。
相比 web.form ，web.view 更强大、更现代化、速度更快、内核更新。
但 web.form 属于进程内控件，COM 接口交互更为简单直接，
例如 JS 与 aardio 可以更直接方便的互调。
但 web.view 则只能以异步的方式实现跨进程调用。
</body>
</html>
**/
  
var js = /**
	external.log( "Hello, aardio!" )
	external.log( "Welcome to aardio!",event.srcElement.id );
	
	//枚举js数组
	$enum(
		[1,2,3],
		function(v,i){
			external.log(v,i)
		}
	)
	//枚举js对象
	$enum(
		{a:123,b:456},
		function(k,v){
			external.log(k,v)
		}
	)
	//枚举aardio数组
	$enum(
		external.aardioArray(),
		function(k,v){
			external.log(k,v)
		}
	)
	//枚举aardio对象
	$enum(
		external.tab,
		function(k,v){
			external.log(k,v)
		}
	)
**/
wb.eventScript(js,"myId","onclick")

winform.show();
win.loopMessage(); 
```

