//窗口程序 - 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}; richedit={cls="richedit";text="RichEdit";left=473;top=20;right=968;bottom=145;edge=1;multiline=1;z=2} ) /*}}*/ winform.richedit.orphanWindow(); /* orphanWindow 是 aardio 实现的一种全新的窗口模式, orphanWindow 即悬浮窗口,指的是普通的控件窗口孤立出来成为独立窗口, 但是仍然可以显示在原来的位置,如影随形的跟随父窗口移动、显示、隐藏。 在外观上用户仍然以为这是父窗口上的子窗口,感觉不到这是一个独立的窗口。 orphanWindow 与子窗口不同的是可以显示在父窗口的显式区域之外。 我们还可以这样写: winform.custom.orphanWindow(,hwndBuddy) 上面的 winform.custom 是 custom 控件,hwndBuddy 可以指定一个外部进程创建的窗口句柄。 winform.custom.orphanWindow(,hwndBuddy) 将外部进程窗口转化为 aardio 中独有的 orphanWindow,成为吸附在 aardio 窗口上的伪子窗口。 某些独立窗口转换为子窗口存在问题时,可以使用此方法实现伪子窗口效果。 */ //orphanWindow 可以轻松的实现原来很复杂的功能,例如下面演示的智能提示列表 import web.rest.jsonLiteClient; var http = web.rest.jsonLiteClient(); var suggestion = http.api("http://suggestion.baidu.com/su?cb=&wd={0}"); //{0}会替换为请求关键字并以UTF8编码,这个API返回数据是GBK编码 /* listbox 以 orphanWindow 模式显示时不能再响应事件, 这时候我们把 listbox 放在一个 custom 控件里,再把custom控件显示为 orphanWindow, 因为 custom 是一个 win.form 对象,所以 listbox 可以响应事件了。 细节请查看 win.ui.listPopup 源码, */ import win.ui.listPopup; var listPopup = win.ui.listPopup(winform.edit); listPopup.onGetItems = function(){ var items = suggestion[ winform.edit.text ].get().s; if(!#items) return; var selIndex = 1; reduce(items,function(prev,next,index){ if( #next < #prev ) { selIndex = index; return next }; return prev }) return items,selIndex; } winform.show(true); win.loopMessage();