import win.ui; import win.ui.atom; import win.ui.explorer; import fonts.fontAwesome; import web.form; import wsock.tcp.simpleHttpServer; /*DSG{{*/ var winform = win.form(text="aardio 文档";right=903;bottom=569;bgcolor=0xF9F9F9;exmode="none";mode="popup") winform.add( bk2={cls="bk";left=-17;top=-5;right=906;bottom=36;bgcolor=0xFCFBFA;dl=1;dr=1;dt=1;z=1}; bk3={cls="bk";left=3;top=30;right=267;bottom=31;bgcolor=0xEBEBEB;dl=1;dt=1;forecolor=0xB4B4B4;z=2}; btnBack={cls="plus";text='\uF060';left=783;top=8;right=810;bottom=31;color=0x808000;dr=1;dt=1;font=LOGFONT(h=-21;name='FontAwesome');notify=1;z=8}; btnForward={cls="plus";text='\uF061';left=824;top=8;right=851;bottom=31;color=0x808000;dr=1;dt=1;font=LOGFONT(h=-21;name='FontAwesome');notify=1;z=9}; btnSearch={cls="plus";text="搜索";left=276;top=3;right=337;bottom=33;align="left";color=0x333333;dl=1;dt=1;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-13;name='FontAwesome');padding={left=8}};iconText='\uF002';notify=1;textPadding={left=25};z=4}; btnSearchOnline={cls="plus";text="在线检索";left=342;top=3;right=435;bottom=33;align="left";color=0x333333;dl=1;dt=1;font=LOGFONT(h=-13);hide=1;iconColor=0x5757FF;iconStyle={align="left";font=LOGFONT(h=-14;name='FontAwesome');padding={left=8}};iconText='\uF059 ';notify=1;textPadding={left=25};z=10}; btnWebDoc={cls="plus";text='\uF268';left=866;top=8;right=893;bottom=31;color=0x808000;dr=1;dt=1;font=LOGFONT(h=-21;name='FontAwesome');notify=1;z=11}; custom={cls="custom";text="自定义控件";left=231;top=39;right=902;bottom=567;bgcolor=0xFFFFFF;db=1;dl=1;dr=1;dt=1;z=6}; editKeyWord={cls="edit";left=3;top=8;right=267;bottom=30;align="right";bgcolor=0xFCFBFA;color=0x333333;dl=1;dt=1;z=5}; editUrl={cls="edit";left=436;top=9;right=767;bottom=36;align="right";bgcolor=0xFCFBFA;color=0x333333;dl=1;dr=1;dt=1;z=7}; treeview={cls="treeview";left=3;top=47;right=228;bottom=567;asel=false;bgcolor=0xFCFBFA;db=1;dl=1;dt=1;z=3} ) /*}}*/ if(!____search_doc__path){ var atom,hwnd = winform.atom("0B839EBF-903D-4818-9C70-CCBE1A8ABEEA.doc"); if(!atom){ win.quitMessage(); return; } } var explorer = win.ui.explorer( winform.treeview );//自动检测顶部的 combobox 并转换为驱动器下拉列表 explorer.dirFirst = false; var wb = web.form(winform.custom); wsock.tcp.simpleHttpServer.documentRoot = "~/doc" var startUrl = wsock.tcp.simpleHttpServer.startUrl(function(response,request){ if( string.endsWith(request.path,".md") || string.endsWith(request.path,".html") || string.startsWith(request.path,"/example/") ){ response.loadcode("/template.aardio"); } else { response.loadcode(request.path); } }); import string.list; var langList = string.list(); langList.load("~\config\lang\lib.txt"); explorer.translatePath = function(dirPath,files,dirs){ if(fsys.path.ischild("~/lib",dirPath)){ var itemPath = ..fsys.path.relative(dirPath,"~/lib",false) if(itemPath==".")itemPath=""; if( files && dirs){ var newFiles = {} for(i=1;#files;1){ var name = files[i]; var path = files[name]; if(name == "_.aardio"){ ..table.push(newFiles,"默认库"); newFiles["默认库"] = path; continue; } if(name == "form.aardio" && itemPath == "win\"){ continue; } var newName = name; var file = io.file(path,"rt"); if(file){ var line = file.read(); if(line){ line = string.removeBom(line);//清除所有 aardio 文件 bom 后去掉这句 newName = string.match(line,"^//(\N+\S)") || name; } file.close(); } ..table.push(newFiles,newName); newFiles[newName] = path; } var newDirs = {} for(i=1;#dirs;1){ var name = dirs[i]; var path = dirs[name]; if(name==".res"){ continue; } if(name[1]=='.'#){ continue; } if(name=='fs' && !#itemPath){ continue; } var newName = langList[itemPath ++ name] : name; ..table.push(newDirs,newName); newDirs[newName] = path; } return newFiles,newDirs; } return files,dirs; } var str = ..string.load(dirPath + "\.aar"); if(!str) return files,dirs; var files1 = {}; var dirs1 = {}; var push = ..table.push; for(k,v,f in string.each(str,"(.+)\=(.+?)(<<.md>|<.aardio>|<.url>>?)$") ){ v = string.trim(v); if(#f){ push(files1,k); files1[k] = v[1]!='~'#?..io.joinpath(dirPath,v++f):v++f; } else { push(dirs1,k); dirs1[k] = v[1]!='~'#?..io.joinpath(dirPath,v):v; } } return files1,dirs1; if( files && dirs){ var newFiles = {} for(i=1;#files;1){ var name = files[i]; var path = files[name]; var newName = map[name] : name; newFiles[i] = newName; newFiles[newName] = path; } var newDirs = {} for(i=1;#dirs;1){ var name = dirs[i]; var path = dirs[name]; var newName = map[name] : name; newDirs[i] = newName; newDirs[newName] = path; } return newFiles,newDirs; } } import string.markdown; var markdown = string.markdown() explorer.onClick = function(filePath,hItem ){ if( !fsys.isDir( filePath ) ) { if(string.endsWith(filePath,".url",true)){ raw.execute(filePath); return; } if(fsys.path.ischild("~/lib/",filePath)){ var path = fsys.path.relative(filePath,"~/lib/"); path = fsys.path.replaceExt(path,".html"); path = io.joinpath("library-reference",path); var url = wsock.tcp.simpleHttpServer.startUrl(path); wb.go(url); return; } var path = fsys.path.relative(filePath,"/"); path = fsys.path.replaceExt(path,".html"); var url = wsock.tcp.simpleHttpServer.startUrl(path) wb.go(url); } } import ide; import process; import win.ui.menu; import fsys.remove; import win.clip; import win.clip.file; explorer.onRightClick = function(filePath,hItem,x,y){ var hItem,tvht = winform.treeview.hitTest(x,y,true); var menu = win.ui.popmenu(winform) var isDir = fsys.isDir(filePath); if(!isDir){ if(string.endsWith(filePath,".aardio",true)){ menu.add("打开源代码 ", function(){ ide.openDocument(filePath); win.setForeground(ide.getMainHwnd()); winform.show(6/*_SW_MINIMIZE*/); } ) } menu.add(); menu.add("浏览文件...", function(){ process.exploreSelect(filePath); } ) menu.add("用外部编辑器打开 ...", function(){ var path = io.exist("~\extensions\trigger\edit.aardio") if(!path) io.rename("~\extensions\trigger\editDefault.aardio","~\extensions\trigger\edit.aardio"); path = io.exist("~\extensions\trigger\edit.aardio") if(path){ loadcodex(path,filePath); } else { import fsys.openWith; fsys.openWith(filePath); } } ) menu.add("复制 markdown(用于 AI 对话)", function(){ if(fsys.path.ischild("~/lib/",filePath)){ import ide.doc.libraryMd; var md = ide.doc.libraryMd(filePath) win.clip.write(md) } elseif(string.endsWith(filePath,".md",true)){ var md = string.load(filePath); win.clip.write(md) } } ) menu.add("复制文件到 ...", function(){ win.clip.file.write(filePath,"copy"); } ) menu.add(); } else{ menu.add("浏览目录...", function(){ process.exploreSelect(filePath); } ) menu.add("用外部编辑器打开 ...", function(){ var path = io.exist("~\extensions\trigger\edit.aardio") if(!path) io.rename("~\extensions\trigger\editDefault.aardio","~\extensions\trigger\edit.aardio"); path = io.exist("~\extensions\trigger\edit.aardio") if(path){ loadcodex(path,filePath); } else { import fsys.openWith; fsys.openWith(filePath); } } ) menu.add("复制目录到 ...", function(){ win.clip.file.write(filePath,"copy"); } ) menu.add(); } if(isDir){ menu.add(); menu.add("同步本地目录", function(){ if(!winform.treeview.isExpandedOnce(hItem)){ winform.treeview.setSelected(hItem); winform.treeview.expand(hItem); } else { explorer.reloadFile(filePath,hItem); winform.treeview.setSelected(hItem); } } ) } menu.popup(x,y,true); } wb.preTranslateAccelerator = function(msg){ accelerator.translate(msg); } wb.translate = function( url ){ if(..string.startsWith(url,"doc://",true)){ url = wsock.tcp.simpleHttpServer.startUrl(string.right(url,-6)); } return url; } winform.editUrl.onOk = function(){ var url = winform.editUrl.text; if(..string.startsWith(url,"doc://",true)){ url = wsock.tcp.simpleHttpServer.startUrl(string.right(url,-6)); } if(url != wb.location){ wb.go(url); } } wb.BeforeNavigate2=function( pDisp, url, Flags, TargetFrameName, PostData, Headers, Cancel ) { if( ..string.startsWith(url,"javascript:",true) ) return; if(..string.startsWith(url,"http://127.0.0.1:",true)){ return url, Flags, TargetFrameName, PostData, Headers,false; } if( ..string.endsWith(url,".mp3") ) { ..wmPlayer := com.CreateObject("WMPlayer.OCX"); ..wmPlayer.url = url; } else{ process.execute(url); } return url, Flags, TargetFrameName, PostData, Headers,true; } //打开指定目录 explorer.loadFile("/",{"*.md","*.aardio"}); import inet.url; winform.btnSearch.oncommand = function(id,event){ var keyWord = string.trim(winform.editKeyWord.text); if(!#keyWord){ winform.editKeyWord.showWarningTip("请输入要搜索的关键词"); return; } if(string.startsWith(keyWord,"doc://",true)){ winform.editKeyWord.text = ""; var url = wsock.tcp.simpleHttpServer.startUrl(string.right(keyWord,-6)); wb.go(url); return; } if(::GetKeyState(0x11/*_VK_CTRL*/) & 0x8000 ){ var url = "https://www.aardio.com/zh-cn/doc/"; var kw = winform.editKeyWord.text; if(#kw){ url = inet.url.appendExtraInfo(url,{ q = kw; }) } import process; process.openUrl(url); return ; } if(!..string.find(keyWord,"\p") && string.find(keyWord,"\s") ){ keyWord = string.replace(keyWord,"\S+","<\0>"); keyWord = string.replace(keyWord,"\s+","|"); } var err; try{ string.find("",keyWord) } catch(e){ err = e; } if(err){ err = string.match(err,"\{Error\}\:(.+)") : err; winform.editKeyWord.showErrorTip("模式匹配语法错误",err); winform.btnSearchOnline.hide = false; winform.btnSearchOnline.webSelectedText = `string.find("`+keyWord+`") //函数报模式匹配语法错误:` + err; return; } ..thread.set("doc://search-results.html","正在搜索文档、库、范例,请稍候 ……"); var url = wsock.tcp.simpleHttpServer.startUrl("/search-results.md"); wb.go(url); winform.btnSearch.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250';text=''} win.ui.waitCursor(true) thread.delay(500); var searchResultMd = `没有找到相要的内容吗? [继续必应搜索](`+ inet.url.appendExtraInfo("https://www.bing.com/search?form=DEEPSH&mkt=en-us&lang=zh&cc=US",{ q = string.trim(winform.editKeyWord.text) + " site:www.aardio.com"; }) + `) | [继续在线检索](`+ inet.url.appendExtraInfo("https://www.aardio.com/zh-cn/doc/",{ q = string.trim(winform.editKeyWord.text); }) + `) | 问 AI - 接入专业版知识库 ` fsys.enum( "~/doc", "*.md", function(dir,filename,fullpath,findData){ if(filename){ var text = string.load(fullpath); var i,j = string.find(text,keyWord) if( i ){ var startChr = string.len(text,1,i-1); startChr = math.max(1,startChr-10); var preview = string.slice(text,startChr,startChr+200,true); var filename = fsys.getFileName(fullpath); var docPath = ..fsys.path.relative(fullpath,"~/doc",false); var url = string.replace(docPath,"\\","/"); url = string.left(url,-4) + ".html" if( string.endsWith(docPath,"_.md") ) { docPath = string.left(docPath,-6); } if( string.endsWith(docPath,".md") ) { docPath = string.left(docPath,-4); } docPath = ..string.replace(docPath,"[\\]","/") ; var str = ..string.load(fsys.path.replaceFile(fullpath,".aar")); if(#str){ for(title in string.each(str,"(.+)\=<@"+filename+"@>$") ){ docPath = docPath + " " + title break; } } searchResultMd = searchResultMd ++ "### 文档: [" + docPath + ']('+url+')\n' + '\n```\n' + string.replace(preview,"```","```") + '\n```\n\n'; } } }, function(dirPath,dirName){ if(dirName=="README") return false; return true; } ); import string.markdown; var markdown = string.markdown(); ..thread.set("doc://search-results.html",searchResultMd); if(url == wb.location){ wb.body.innerHTML = markdown.render(searchResultMd); thread.delay(100); } var text = string.load("~\config\intellisense\kernel.txt"); var i,j = string.find(text,keyWord+ "\s*=") ||string.find(text,keyWord+ "\(") ||string.find(text,keyWord) if(i){ var startChr = string.len(text,1,i-1); startChr = math.max(1,startChr-10); var preview = string.slice(text,startChr,startChr+200,true); var libPath = "global 全局表与内置库"; var url = "/library-reference/builtin/_.html" var libName = string.match(keyWord,"^\s*\.*(\w+)"); if(libName){ var builtin = {table=1;string=1;raw=1;io=1;com=1;math=1;time=1;thread=1;fiber=1;global=1 }; if(builtin[libName]){ libPath = libName + " 内置库"; url = "/library-reference/"+libName+"/_.html" } } searchResultMd = searchResultMd ++ "### 库参考: [" + libPath + ']('+url+')\n' + '\n```\n' + string.replace(preview,"```","```") + '\n```\n\n'; } var libPath,libMember; if(io.libpath(keyWord)){ libPath = keyWord; } else { var builtin = {table=1;string=1;raw=1;io=1;com=1;math=1;time=1;thread=1;fiber=1;global=1 }; var libPath1,libMember1 = string.match(keyWord,"^\s*\.*(.+)\.(\w+)!\W"); if(libPath1 && io.libpath(libPath1) ||builtin[libPath1]){ libPath = libPath1; libMember = libMember1; } } if(libPath){ var builtin = {table=1;string=1;raw=1;io=1;com=1;math=1;time=1;thread=1;fiber=1;global=1 }; import ide.doc.libraryMd; var text = tostring( ide.doc.libraryMd(libPath) ); if(text){ var i,j = string.find(text,keyWord+ "\s*=") ||string.find(text,keyWord+ "\(") ||string.find(text,keyWord) if(!i && libMember){ i,j = string.find(text,libMember+ "\s*=") ||string.find(text,libMember+ "\(") ||string.find(text,libMember) } if(!i ){ i,j = string.find(text,libPath+ "\s*=") ||string.find(text,libPath+ "\(") ||string.find(text,libPath) } if(i){ var startChr = string.len(text,1,i-1); startChr = math.max(1,startChr-10); var preview = string.slice(text,startChr,startChr+200,true); var libTitle; var url; if(builtin[libPath]){ libTitle = libPath + " 内置库"; url = "/library-reference/"+libPath+"/_.html" } else { libTitle = libPath + " 库"; var libFilePath = io.libpath(libPath); libFilePath = ..fsys.path.relative(libFilePath,"~/lib",false); url = io.joinpath("/library-reference",fsys.path.replaceExt(libFilePath,".html")); url = string.replace(url,"\\","/"); } searchResultMd = searchResultMd ++ "### 库参考: [" + libTitle + ']('+url+')\n' + '\n```\n' + string.replace(preview,"```","```") + '\n```\n\n'; } } } fsys.enum( "~/lib", "*.aardio", function(dir,filename,fullpath,findData){ if(filename){ var text = string.load(fullpath); text = string.removeBom(text);//清除所有 aardio 文件 bom 后去掉这句 var i,j = string.find(text,keyWord) if(i){ var startChr = string.len(text,1,i-1); startChr = math.max(1,startChr-10); var preview = string.slice(text,startChr,startChr+200,true); var libPath = ..fsys.path.relative(fullpath,"~/lib",false); var url = io.joinpath("/library-reference",fsys.path.replaceExt(libPath,".html")); var url = string.replace(url,"\\","/"); if( string.endsWith(libPath,"_.aardio") ) { libPath = string.left(libPath,-10); } if( string.endsWith(libPath,".aardio") ) { libPath = string.left(libPath,-8); } libPath = ..string.replace(libPath,"[/\\]",".") ; var title = string.match(text,"^//\S+\s+(\N+\S)"); if(#title){ libPath = libPath + " " + title; } searchResultMd = searchResultMd ++ "### 库参考: [" + libPath + ']('+url+')\n' + '\n```\n' + string.replace(preview,"```","```") + '\n```\n\n'; } } }, ); import string.markdown; var markdown = string.markdown(); ..thread.set("doc://search-results.html",searchResultMd); if(url == wb.location){ wb.body.innerHTML = markdown.render(searchResultMd); thread.delay(100); } fsys.enum( "~/example", "*.aardio", function(dir,filename,fullpath,findData){ if(filename){ var text = string.load(fullpath); text = string.removeBom(text);//清除所有 aardio 文件 bom 后去掉这句 var i,j = string.find(text,keyWord) if(i){ var startChr = string.len(text,1,i-1); startChr = math.max(1,startChr-10); var preview = string.slice(text,startChr,startChr+200,true); var path = fsys.path.relative(fullpath,"~/") path = string.replace(path,"\\","/"); searchResultMd = searchResultMd ++ "### 范例: [" + path + ']('+path+')\n' + '\n```\n' + string.replace(preview,"```","```") + '\n```\n\n'; } } }, ); import string.markdown; var markdown = string.markdown(); ..thread.set("doc://search-results.html",searchResultMd); if(url == wb.location){ wb.refresh3(); } winform.btnSearch.disabledText = null; win.ui.waitCursor(false); } winform.editKeyWord.onOk = function(){ winform.btnSearch.oncommand(); return true; } winform.btnSearch.skin({ color={ active=0xFF00FF00; default=0xFF3C3C3C; disabled=0xFF6D6D6D; hover=0xFFFF0000 } }) winform.btnSearchOnline.skin({ color={ active=0xFF00FF00; default=0xFF3C3C3C; disabled=0xFF6D6D6D; hover=0xFFFF0000 } }) import inet.url; wb.DocumentComplete = function(pDisp,url) { if( pDisp == wb.application ){ winform.editUrl.text = string.replace(url,"^http\://[^/]+/","doc://"); var hash = string.match(url,"\#.+") if(hash) return; var keyWord = winform.editKeyWord.text; if(!#keyWord) return; var rng = wb.body.createTextRange(); if (rng.findText(keyWord)==true) { rng.select(); rng.scrollIntoView(); } } } wb.external = { onSelectedText = function(text){ winform.btnSearchOnline.hide = !text; winform.btnSearchOnline.webSelectedText = text; } openExample = function(path){ winform.hitMin(); ide.openDocument(path); } askAi = function(){ import fsys.table; var aiConfig = fsys.table(io.appData("aardio/ide/aiChat/~")) aiConfig.save = function(){}//只读 if(aiConfig.url && inet.url.split(aiConfig.url).host=="ai.aardio.com"){ ide.createProcess("~/example/AI/aardioAgent.aardio",{ _ASK_AI_USER_PROMPT = `请帮我查找与 """`+string.trim(winform.editKeyWord.text)+`""" 有关的 aardio 文档与范例,请根据最佳实践择优选择查询结果,精确匹配与使用频率更高的查询结果应当放在最前面,排除不常用或匹配度不高的结果。你应当先返回所有查询结果的简单列表与简单介绍,并与我进一步沟通以决定是否需要调整查询方向或者是否需要详细解释某个查询结果。`; }) } else { winform.msgboxErr('很抱歉您未切换到 aardio 专业版 AI 接口,\n无法使用 AI 搜索 aardio 专业版知识库!') import process; process.openUrl("https://aardio.com/vip/") } } } import process; winform.btnSearchOnline.oncommand = function(id,event){ if(!#winform.btnSearchOnline.webSelectedText){ return; } var url = inet.url.appendExtraInfo("https://www.aardio.com/zh-cn/doc/?",{ q = winform.btnSearchOnline.webSelectedText ; }) process.openUrl(url,"","open",5/*_SW_SHOW*/,"~/",hwnd,wait,waitTimeout,ide.getMainHwnd() ) } winform.editKeyWord.setCueBannerText("按回车键输入搜索词,支持模式匹配语法"); wb.noScriptErr = true; var url; import inet.url; if(____search_doc__path){ if(string.startsWith(____search_doc__path,"doc://")){ var tUrl = inet.url.split(____search_doc__path) if(#tUrl.extraInfo){ var param = inet.url.splitParameters(tUrl.extraInfo) if(param[["q"]]){ winform.editKeyWord.text = param[["q"]]; } } url = wsock.tcp.simpleHttpServer.startUrl( string.right(____search_doc__path,-7) ) } else { var path2 = fsys.path.relative(____search_doc__path,"~\doc\"); if(#path2){ url = wsock.tcp.simpleHttpServer.startUrl(path2) } else { path2 = fsys.path.relative(____search_doc__path,"~\lib\"); if(#path2){ path2 = "\library-reference" + path2; url = wsock.tcp.simpleHttpServer.startUrl(path2) } } } } else { url = wsock.tcp.simpleHttpServer.startUrl("/main.md") } wb.go(url); import inet.url; winform.btnWebDoc.oncommand = function(id,event){ var url = winform.editUrl.text; var path = string.match(url,"doc\://(.+)"); if( path && path!="main.md" && path!="search-results.md" && path!="main.html" && path!="search-results.html"){ var hash = string.match(path,"\#.+") var kw = winform.editKeyWord.text; if(#kw && !#hash){ hash = "#:~:text=" + inet.url.encode(kw); } path = fsys.path.replaceExt(path,".html"); path = string.replace(path,"\\","/"); if(hash){ path = path ++ hash; url = "https://www.aardio.com/zh-cn/doc/" + path; } else { url = "https://www.aardio.com/zh-cn/doc/?q=" + inet.url.encode(path); } } else { url = "https://www.aardio.com/zh-cn/doc/"; var kw = winform.editKeyWord.text; if(#kw){ url = inet.url.appendExtraInfo(url,{ q = kw; }) } } import process; process.openUrl(url); } import web.form.menu; //自动启用禁用 前进、后退等按钮 wb.CommandStateChange=function(cmd,enable) { select(cmd) { case 0x2/*_CSC_NAVIGATEBACK*/ { winform.btnBack.disabled = !enable } case 0x1/*_CSC_NAVIGATEFORWARD*/ { winform.btnForward.disabled = !enable } } } wb.showMenu = function(x,y,id,ele){ var menu = web.form.menu( wb, { [0/*_CONTEXT_MENU_DEFAULT*/] = { { "后退";lambda() wb.goBack(); winform.btnBack.disabled? 1/*_MF_GRAYED*/:0}; { "前进";lambda() wb.goForward(); winform.btnForward.disabled ? 1/*_MF_GRAYED*/:0 }; { "刷新";lambda() wb.reload(); }; { /*-----*/}; { "打印";lambda() wb.script.print()} { "全选";"SelectAll"}; { /*-----*/}; { "本文档在线版";winform.btnWebDoc.oncommand} } [2/*_CONTEXT_MENU_CONTROL*/] = { { "撤消";"Undo" }; { /*-----*/}; { "剪切";"Cut"}; { "复制";"Copy"}; { "粘贴";"Paste"}; { "删除";"Delete"}; { /*-----*/}; { "全选";"SelectAll"}; }; [4/*_CONTEXT_MENU_TEXTSELECT */] = { { "复制";"Copy" }; { /*-----*/}; { "打印";lambda() wb.script.print()} { "全选";"SelectAll"}; { /*-----*/}; { "在线检索";winform.btnSearchOnline.oncommand}; }; } ); return menu.popup(x,y,id,ele); } ide.show(winform,3/*_SW_MAXIMIZE*/); winform.setTimeout( function(){ win.setOwner(winform.hwnd,0) },1000) winform.onOk = function(){ winform.editKeyWord.setFocus(); } fullscreen =function(id,event,shift){ winform.fullscreen() } import win.ui.accelerator; var accelerator = win.ui.accelerator( { { vkey = 0x7A/*_VK_F11*/; oncommand = fullscreen } { vkey = 0x1B/*_VK_ESC*/; oncommand = function(){ if( winform.restoreFullScreen ) fullscreen() } } },winform); winform.btnBack.oncommand = function(id,event){ wb.goBack(); } winform.btnForward.oncommand = function(id,event){ wb.goForward(); } winform.btnWebDoc.skin( color = { hover = 0xFFFF0000; active = 0xFF00FF00; disabled = 0xFFCCCCCC; } ) winform.btnForward.skin( color = { hover = 0xFFFF0000; active = 0xFF00FF00; disabled = 0xFF999999; } ) winform.btnBack.skin( color = { hover = 0xFFFF0000; active = 0xFF00FF00; disabled = 0xFF999999; } ) win.loopMessage();