//通用函数库ide插入v1.2-善小而为 import win.ui; /*DSG{{*/ var winform = win.form(text="通用函数库ide插入-善小而为";right=375;bottom=655) winform.add( custom={cls="custom";text="自定义控件";left=8;top=8;right=369;bottom=653;db=1;dl=1;dr=1;dt=1;z=1} ) /*}}*/ import win; import winex; import key; import ide; import win.clip; import console; funTab = {} //分割线前增加代码,倒序显示,便于维护 //代码片段,需要自行完善,谢谢理解 funCode = /***** *==============================* //百度翻译 import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( buttonCls={cls="button";text="清空";left=268;top=415;right=414;bottom=460;z=6}; buttonFy={cls="button";text="百度翻译";left=69;top=416;right=215;bottom=461;z=2}; editFrom={cls="edit";left=40;top=47;right=721;bottom=88;ah=1;aw=1;edge=1;multiline=1;z=1}; editTo={cls="edit";left=39;top=96;right=720;bottom=251;ah=1;aw=1;edge=1;multiline=1;vscroll=1;z=3}; listviewTo={cls="listview";left=39;top=257;right=720;bottom=409;ah=1;aw=1;edge=1;vscroll=1;z=5}; static={cls="static";text="百度翻译";left=47;top=10;right=171;bottom=40;font=LOGFONT(h=-24;name='微软雅黑');transparent=1;z=4} ) /*}}*/ import web.rest.jsonLiteClient; var http = web.rest.jsonLiteClient(); winform.editFrom.text = "hello" winform.listviewTo.setColumns({"中英文","翻译"},{100,800}) winform.buttonFy.oncommand = function(id,event){ winform.editTo.text = "" winform.listviewTo.clear() var url = "https://fanyi.baidu.com/sug"; //百度翻译接口 var api = http.api(url); var data = api.post({"kw" = winform.editFrom.text;}) for k,v in data.data{ winform.editTo.print(v.k,v.v); winform.listviewTo.addItem({v.k,v.v}) } } winform.buttonCls.oncommand = function(id,event){ winform.editFrom.text = "" winform.editTo.text = "" winform.listviewTo.clear() } winform.show(); win.loopMessage(); *==============================* //超链接 import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( static={cls="syslink";text="百度一下";left=167;top=157;right=339;bottom=182;align="center";font=LOGFONT(h=-21);transparent=1;z=1} ) /*}}*/ //通用代码:超链接,cls="syslink" import process; winform.static.text = `百度一下` winform.static.onHyperlinkClick = function(nmSysLink,url,id){ thread.invoke( function(url){ import process; process.execute(url); //创建线程打开超链接速度会更快 },url ); } winform.show(); win.loopMessage(); *==============================* //sqlite用户登录 import win.ui; /*DSG{{*/ var winform = win.form(text="用户登录";right=530;bottom=275) winform.add( button={cls="button";text="登录";left=206;top=201;right=294;bottom=236;db=1;dl=1;z=5}; editPass={cls="edit";left=206;top=125;right=345;bottom=155;db=1;dl=1;dr=1;dt=1;edge=1;password=1;z=4}; editUser={cls="edit";left=206;top=50;right=345;bottom=79;dl=1;dr=1;dt=1;edge=1;multiline=1;z=2}; static={cls="static";text="用户名";left=82;top=50;right=162;bottom=79;align="center";center=1;dl=1;dt=1;transparent=1;z=1}; static2={cls="static";text="密码";left=82;top=125;right=173;bottom=155;align="center";center=1;db=1;dl=1;dt=1;transparent=1;z=3} ) /*}}*/ import sqlite import console var dbName = io.joinpath(io._exedir,"mydb.db"); var db = sqlite(dbName) //初始化 var userTbl = "user" if !db.existsTable(userTbl){ db.exec("create table ??(id,name,pass) ",{userTbl}) var dataTab = { {1, 'admin', '123456'}, {2, 'user', '123456'}, } db.beginTrans(); //事务开始 for(i=1;#dataTab;1){ db.exec("INSERT INTO ?? VALUES (?) ",{userTbl,dataTab[i]}); } db.commitTrans(); //事务结束 //var dt = db.getTable("select * from ?? ",{userTbl}); //console.dump(dt) } winform.button.oncommand = function(id,event){ name = winform.editUser.text; pass = winform.editPass.text; //winform.msgbox("用户名:"+name+",密码:"+pass) var dt = db.getTable("select count(*) as count from ?? where name=@name and pass=@pass ", {"user", name=name, pass=pass}); //console.dump(dt) if !dt[1].count { winform.msgbox("用户登录失败!"); return ; } else { winform.msgbox("用户登录成功!") } } winform.onClose = function(hwnd,message,wParam,lParam){ if db db.close() } winform.show(); win.loopMessage(); *==============================* //用户登录 import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=530;bottom=275) winform.add( button={cls="button";text="登录";left=206;top=201;right=294;bottom=236;db=1;dl=1;z=5}; editPass={cls="edit";left=206;top=125;right=345;bottom=155;db=1;dl=1;dr=1;dt=1;edge=1;password=1;z=4}; editUser={cls="edit";left=206;top=50;right=345;bottom=79;dl=1;dr=1;dt=1;edge=1;multiline=1;z=2}; static={cls="static";text="用户名";left=82;top=50;right=162;bottom=79;align="center";center=1;dl=1;dt=1;transparent=1;z=1}; static2={cls="static";text="密码";left=82;top=125;right=173;bottom=155;align="center";center=1;db=1;dl=1;dt=1;transparent=1;z=3} ) /*}}*/ winform.button.oncommand = function(id,event){ user = winform.editUser.text; pass = winform.editPass.text; winform.msgbox("用户名:"+user+",密码:"+pass) } winform.show(); win.loopMessage(); *==============================* //定时器电子钟 winform.setInterval( function(){ showDate = "日期:"+tostring(time(time.now(),"%Y-%m-%d")); showTime = "时间:"+tostring(time(time.now(),"%H:%M:%S")); winform.static.text = showDate+" "+showTime },1000 ) *==============================* //鼠标右键菜单 import win.ui.menu; winform.richedit.wndproc = function(hwnd,message,wParam,lParam){ if(message=0x205/*_WM_RBUTTONUP*/){ import win.ui.menu; winform.popmenu = win.ui.popmenu(winform); winform.popmenu.add(); //分隔线 winform.popmenu.add( "&加粗(Ctrl+B)", function(id){ textBold() } ); winform.popmenu.add( "&放大(Ctrl+]或↑)", function(id){ textZoom(2) } ); winform.popmenu.add( "&缩小(Ctrl+[或↓)", function(id){ textZoom(-2) } ); winform.popmenu.add(); winform.popmenu.add( "&还原(Ctrl+R)", function(id){ //winform.richedit.text = winform.richedit.text; winform.listbox.onSelChange(); //查看 } ); winform.popmenu.add(); //分隔线 winform.popmenu.popup(); } //无返回值则继续调用默认回调函数 } *==============================* //arg参数 runFile = io.joinpath(io._exedir,io._exefile) tmpFile = io.joinpath(fsys.getSpecialDefault(0x1c/*_CSIDL_LOCAL_APPDATA*/)+"\Local\Temp",io._exefile) fsys.copy(runFile,tmpFile); if(io.exist(io.joinpath(io._exedir,"Booknarks"))){ fsys.copy("Bookmarks",io.joinpath(fsys.getSpecialDefault(0x1c/*_CSIDL_LOCAL_APPDATA*/)+"\Local\Google81\Default\Booknarks")); } if _STUDIO_INUOKED=false{ console.open(); console.close(); } if runFile != tmpFile && io.exist(tmpFile){ process.executeWait(tnpFile,"wait "+io._exedir); winforn.close(); } //模板 var fileTab = fsys.list(_ARGU[2],,"模板*.xlsx") for(i=1;#fi1eTab;1){ winforn.comboboxRjModuleFile.add(fileTab[i]); } winform.comboboxRjModuleFile.selIndex=1; *==============================* //配置文件 import console; import process import fsys.config; import win.util.savePosition; win.util.savePosition(winform); //保存窗口位置 //将窗口控件数据绑定到指定目录 //config = fsys.config("/config/"); //程序目录 path = ..fsys.getSpecial( 0x1c /*_CSIDL_LOCAL_APPDATA*/ ,"/aardio/" ); //保存配置数据到应用目录 config = ..fsys.config(path); config.userSetting.name = "hello"; //config目录下自定义userSetting表 import win.ui.scrollbar; var vScrollBar = win.ui.scrollbar(winform,true); //垂直true //中间拆分条调整左右控件宽度 winform.splitter.split(winform.edit2,winform.edit3); //配置文件 config.winformCfg winform.bindConfig( config.winformCfg,{ //config目录下的winformCfg表 edit = "text"; edit2 = "text"; edit3 = "text"; richedit = "text"; checkbox = "checked"; radiobutton = "checked"; listbox = "selIndex"; combobox = "selIndex"; plus = "text"; progress = "pos"; checklist = "checked"; datetimepick2 = "text"; //time("y/m/d") //calendar = "text"; //tostring(winform.calendar.time) trackbar = "pos"; //splitter = "text"; } ); //winform.progress.pos = 50; winform.datetimepick2.time = time(config.winformCfg.datetimepick2); //config转换 winform.edit2.width = config.userSetting.edit2_width; //config转换 winform.button.oncommand = function(id,event){ process.execute(path) } winform.splitter.wndproc = function(hwnd,message,wParam,lParam){ select(message) { case 0x200/*_WM_MOUSEMOVE*/ { config.userSetting.edit2_width = winform.splitter.ltControl.width; //winform.edit2.width; } } //无返回值则继续调用默认回调函数 } *==============================* //系统声音 import sys.audioVolume; //扩展库 var sysVolume = sys.audioVolume() winform.trackbar.setRange(1,100) winform.trackbar.pos = sysVolume.volume; winform.trackbar.oncommand = function(id,event,pos){ if( event == 8/*_SB_ENDSCROLL*/ ){ sysVolume.volume = winform.trackbar.pos; } else { } } *==============================* //调用python import process.python; process.python.path = "python.exe"; var pyJsonCode = /*** ? > #注意反向符,手动去掉空格 import sys; import json str = json.dumps(['foo', "",{'bar': ('baz', None, 1.0, 2)},sys.argv]) # print 写到进程标准输出,在 aardio 中可以读取 print( str ) ***/ var prcs = process.python.exec(pyJsonCode); var info = prcs.json(); console.dump(info) var pyJsonRpcCode = /*** import sys; import json from jsonrpyc import RPC; #定义允许客户端调用的类 class MyTarget(object): def greet(self, name): jls_extract_var = "Hi, %s!" % name +"" + " is very good."+"\n" +sys.version return jls_extract_var def add(self, a,b): return a + b #启动 JSON-RPC 服务端 RPC( MyTarget() ) ***/ var python = process.python.jsonRpc(pyJsonRpcCode); var rep,err = python.greet("Jacen") if( rep[["result"]] ){ winform.edit.print( "调用 py.greet('Jacen') 成功,返回值:", rep.result ) } else{ winform.edit.print( err ) } *==============================* //富文本超链接 import console; import process; //超链接模式的中文名称存在问题 winform.richedit.text = "https://www.baidu.com" winform.richedit.onHyperlink =function(message,href){ if( message = 0x202/*_WM_LBUTTONUP*/ ) { if string.match(href,"\\") { var path = string.match(href,"http\://(.*)") console.log(path); if io.exist(path) process.execute(path) else winform.msgbox("程序不存在!") } else { console.log(href); process.openUrl(href); } } } *==============================* //子窗口 winform.button.oncommand = function(id,event){ win.loadForm(" import win.ui; var winform2 = win.form(text='窗口一';right=759;bottom=469;bgcolor=0xFF9E40) winform2.add( custom={cls='custom';left=2;top=2;right=757;bottom=467;ah=1;aw=1;dt=1;edge=1;z=1} ); winform2.show() "); } *==============================* //委托函数 import console; english = function(name){ console.log("hello "+name); } chinese = function(name){ console.log("你好 "+name); } main = function(func,name){ func(name); } main(english,"john"); main(chinese,"风行者"); console.getText('按任意键继续...'); *==============================* //浏览器控制 import chrome.auto; wb = chrome.auto( ) var url = "http://www.baidu.com"; var path = "C:\Progran Files(x86)\Google\chrome81\Application\chrome.exe"; //wb.startAppBrowser(ur1,path) var tab = { ["--window-size"]="1024,768", ["--window-position"]="0,0", ["--url"]=url, ["--user-data-dir"]=io.joinpath("C:\Users\"+string.getenv("username")+"\AppData\Local\Google81"), ["--disk-cache-dir"]=io.joinpath("C:\Users\"+string.getenu("username")+"\AppData\Local\Google81") wb.startBrowser(tab,path);//tab wb.go(url,false) //win.delay(2000); //wb.waitEle("#login"); var ele = wb.doScript(`document.querySelector('#sw').value`); if(!ele) { winforn.nsgbox("无页面","错误提示") return; } *==============================* //sqlite数据库 import sqlite import console var dbName,tbl,tblDict = "aaa.db","aaa","bbb" var db = sqlite(dbName) if !db.existsTable(tbl){ db.exec("create table ??(id,name) ",{tbl}) db.exec("create table ??(id,en_type,chn_name) ",{tblDict}) var tabDict = { {1, 'eco', 'aaa,bbb,ccc,ddd'}, } db.beginTrans(); //事务开始 for(i=1;#tabDict;1){ db.exec("INSERT INTO ?? VALUES (?) ",{tblDict,tabDict[i]}); } db.commitTrans(); //事务结束 } db.close() *==============================* //系统进程 import process; import console; winform.button.oncommand = function(id,event){ for processEntry in process.each( "aa.*.exe" ) { winform.edit.print(processEntry.szExeFile,processEntry.th32ProcessID) } } for processEntry in process.each( ".*.exe" ) { } *==============================* //listview排序 import win.imageList; var imglst = win.imageList(15, 15); //三角小图标 imglst.add('GIF\56\57a \0\15\0\x80\0\0\x80\x80\x80\xff\0\xff\33\xf9\4\0\0\0\0\0\44\0\0\0\0 \0\15\0\0\2\31\x8c\x8f\xa9\xcb\xed\15\xa3\x9c\xb4N\xf0\x80\xde\56k\xbfA\\\xd7\x84 \x97Y\xea\xca\xb6\xee\11\xc7F\1\0;', 0xff00ff); winform.listview.setColumnImageList(imglst); //初始化listview列头 var tlv={ { "班级";80};{ "姓名";100};{ "成绩";80} } for ( i,column in tlv ){ winform.listview.insertColumn( column[1]/*列名*/, column[2]/*列宽*/ ); } winform.listview.items = { {"一年级","张三",80}; {"四年级","李四",70}; {"一年级","王五",68}; } winform.listview.onnotify = function(id,code,ptr){ if (code == 0xFFFFFF94/*_LVN_COLUMNCLICK*/) { var nmlvw = winform.listview.getNotifyMessage(code,ptr) //列头加小箭头 var image = winform.listview.getColumnImage(nmlvw.iSubItem); var desc = (image == 0); winform.listview.clearColumnImage() //qingchu winform.listview.setColumnImage(nmlvw.iSubItem, desc ? 1 : 0); //列排序 winform.listview.sortBy( nmlvw.iSubItem, desc ) } } //排序算法 ::Shlwapi := raw.loadDll( "shlwapi.dll" ) winform.listview.sortBy = function(col,desc){ var sortedItems = winform.listview.items; if(desc){ table.sort(sortedItems, lambda(next) ::Shlwapi.StrCmpLogicalW(tostring(owner[col]),tostring(next[col])) > 0) }else{ table.sort(sortedItems, lambda(next) ::Shlwapi.StrCmpLogicalW(tostring(owner[col]),tostring(next[col])) < 0) } winform.listview.items = sortedItems ; } *==============================* //listview修改导出 import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=479) winform.add( buttonEnd={cls="button";text="末页";left=572;top=442;right=643;bottom=473;z=6}; buttonExcelRead={cls="button";text="读取Excel";left=453;top=-1;right=534;bottom=33;z=9}; buttonExcelWriteAll={cls="button";text="导出Excel";left=572;top=-1;right=653;bottom=33;z=8}; buttonFirst={cls="button";text="首页";left=216;top=442;right=287;bottom=473;z=5}; buttonNext={cls="button";text="下页";left=453;top=442;right=524;bottom=473;z=3}; buttonUp={cls="button";text="上页";left=335;top=442;right=406;bottom=473;z=2}; listview={cls="listview";left=5;top=33;right=747;bottom=438;ah=1;aw=1;dt=1;edge=1;fullRow=1;z=1}; staticPage={cls="static";text="第 1 页";left=40;top=448;right=160;bottom=465;transparent=1;z=4}; staticTitle={cls="static";text="Excel数据表读取修改保存实例";left=40;top=1;right=384;bottom=33;color=32768;font=LOGFONT(h=-24;name='微软雅黑';weight=700);transparent=1;z=7} ) /*}}*/ //Excel数据表读取修改保存实例 import access; import godking.libxl; import godking.message; import process; import console; import win.ui.grid; win.ui.grid(winform.listview); //数据表: 读取Excel var ExcelFile = "D:\1_aardio\test.xlsx"; var saveExcelFile = "D:\1_aardio\test2.xlsx"; //分页参数 var dataTable = {}; var pageNo,pageLine,pageNum = 0,20,0; //分页数据处理 winform.page = function(){ winform.staticPage.text = "共"++pageNum++"页,第"++pageNo++"页"; winform.listview.clear(); winform.listview.setColumns(dataTable.fields); for(i=1;pageLine;1){ var pi = (pageNo-1)*pageLine+i; if dataTable[pi]{ var tab = {}; for k,v in dataTable.fields table.push(tab,dataTable[pi][v]); winform.listview.addItem(tab); //数组 } } } winform.page(); //预显示 //读取Excel winform.buttonExcelRead.oncommand = function(id,event){ var db,err = access(ExcelFile); var dbTable = db.eachTableObject()(); //迭代器,第1张表 dataTable = db.getTable("select * from ["++dbTable++"]") db.close(); pageNo=1; pageNum = math.floor(#dataTable/pageLine)+(#dataTable%pageLine>0?1:0) winform.page(); //分页显示 } //首页 winform.buttonFirst.oncommand = function(id,event){ pageNo=1; winform.page(); //分页显示 } //上页 winform.buttonUp.oncommand = function(id,event){ if pageNo>1 pageNo--; winform.page(); //分页显示 } //下一页 winform.buttonNext.oncommand = function(id,event){ if pageNo0?1:0) //分页数据处理 winform.page = function(){ winform.listview.clear(); winform.staticPage.text = "共"++pageNum++"页,第"++pageNo++"页"; winform.listview.setColumns(dataTable.fields) for(i=1;pageLine;1){ var pi = (pageNo-1)*pageLine+i; if dataTable[pi]{ var tab = {}; for k,v in dataTable.fields table.push(tab,dataTable[pi][v]); winform.listview.addItem(tab); //数组 } } } winform.page(); //预显示 //首页 winform.buttonFirst.oncommand = function(id,event){ pageNo=1; winform.page(); //分页显示 } //上页 winform.buttonUp.oncommand = function(id,event){ if pageNo>1 pageNo--; winform.page();//分页显示 } //下一页 winform.buttonNext.oncommand = function(id,event){ if pageNotonumber(b[i]) return false; */ } }) console.dump(ips) *==============================* //静态结构数据 var rawTab = raw.struct({ //float v[10]; //buffer v[10]; string str; string v[10]; float num; int k; }) rawTab.k = 1; thread.invokeAndWait( function(rawTab){ rawTab.str = "abcdefg"; //rawTab.v[1] = 123; //错误 //rawTab[1] = 123; rawTab.v = {'123','2','3','4','5'}; rawTab.num = 100.12; rawTab.k = rawTab.k+1 } ,rawTab ) *==============================* //文件下载 import process; import inet.httpFile; import console; winform.editUrl.text = "http://cdn.staticfile.org/layui/2.8.12/layui.js"; path = "/"++string.match(winform.editUrl.text,".*\/(.*)") http = inet.httpFile(winform.editUrl.text,path); res = http.download() if(res && http.complete){ http.close(); process.execute('/') } *==============================* //文件占用 import fsys.file; excelFile = io.joinpath("D:\1_aardio","out.xlsx") console.log(excelFile); file = fsys.file(excelFile,"r+"); //读写r+ if( file ){ console.log( "未被占用,可以正常打开" ); file.close(); } else { console.log( "已占用,先关闭吧" ); } *==============================* //耗时 import console; import time.performance; var tk = time.performance.tick(); sleep(2000) var tk2 = time.performance.tick(); console.log( ( tk2 - tk ) / 1000 ,"秒" ); *==============================* //起止日期 startDate,endDate = '2023-1-1','2023-1-31' days = time(endDate).diffday(time(startDate))+1 for(i=1;days;1){ currDate = time(startDate,'%Y-%m-%d').addday(i-1) console.log(currDate) } *==============================* //日期检查 isDate = function(d){ if #d==8 d = string.slice(d,1,4)++"-"++string.slice(d,5,6)++"-"++string.slice(d,7,8) return tostring(time(d,"%Y-%m-%d"))==d:false } var dd = "2023-12-28" if isDate(dd) console.log(dd,"是日期") else console.log(dd,"不是日期") var dd = "2023-1228" if isDate(dd) console.log(dd,"是日期") else console.log(dd,"不是日期") var dd = "20231228" if isDate(dd) console.log(dd,"是日期") else console.log(dd,"不是日期") *==============================* //显示器分辩率 import console; var tab = {} tab.x,tab.y = win.getScreen() tab2 = win.getMonitorInfo() console.dump(tab,tab2) *==============================* //控制面板 import process.rundll import process.control process.rundll().Control_rundll("sysdm.cpl",,3) *==============================* //读文件内容 var str = string.load(tmpFile) str = string.removeBom(str); *==============================* //读文件列表 import fsys; var fileTab = fsys.list(".","","*.aardio") *==============================* //保存文件 import fsys.dlg; var path = fsys.dlg.save('所有文件|*.*|文本文件|*.txt||',,,winform); if(path){ winform.editPath.text = path; } *==============================* //打开文件 import fsys.dlg; var path = fsys.dlg.open("*.ps1|*.ps1||",'请选择要打开的 ps1 文件') if(path){ winform.editPs1Path.text = path; } *==============================* //取扩展名 import fsys; var tmpFile = "aa.txt" var extName = io.splitpath(tmpFile).ext; *==============================* //建立目录 import fsys; fsys.createDir(tmpDir) *==============================* //截取汉字 splitEx2 = function(s,l){ var l=l*3; //汉字3个字节 var tab = {} for(i=1;math.ceil(#s/l)) { table.push(tab,string.unescape(string.slice(s,(i-1)*l+1,i*l)) ); } return tab } var str = "床前明月光疑是地上霜" var nv = splitEx2(str,5); console.dump(nv) *==============================* //弹出输入框 import godking.inputBox; var inputGdBox = godking.inputBox(winform) var str = inputGdBox.show("在这里输入您的名字","",true) console.log(str) *==============================* //上取整 import console; i,bnum=8 row = math.ceil(i / bnum); //上取整 console.log(row); console.pause(true); *==============================* //数字前补零 import console; num=1 str = string.format('%03s',num) console.log(str,type(str)); str = string.format('%03i',num) console.log(str,type(str)); *==============================* //千分位 millFormat = function(num){ var intNumStr,dotNum = table.unpack(string.split(tostring(num),".")) var result = "" var count = 0 for(i=#intNumStr;1;-1){ result = string.slice(intNumStr,i,i)++result count = count+1 if (i>1 && count%3==0) { result = ","++result } } return dotNum?result+"."++dotNum:result; } console.log(millFormat(987654321.05)) *==============================* //数字判断 import console; str= "123" if(tonumber(str)==str){ console.log("数字") }else{ console.log("字符") } *==============================* //当前时间 var currTime = tostring(time(time.now(),"%H:%M:%S")) *==============================* //当前日期 var currDate = tostring(time(time.now(),"%Y-%m-%d")) *==============================* //延时 win.delay(100) *==============================* //随机数0-100 var number = math.random(0,100) *==============================* //用户目录 var appDir = fsys.getSpecialDefault(0x1a/*_CSIDL_APPDATA*/) *==============================* //程序目录 var homeDir = io._exedir homeDir = io.joinpath(homeDir,'txt') *==============================* //开发者模式 if _STUDIO_INUOKED==True { } *****/ funTab = string.split(funCode,"<*==============================*>"); /////////////////////////////////////////////////////////////////////// //倒序 funTab2 = funTab funTab = {} for(i=#funTab2;1;-1){ table.push(funTab,funTab2[i]) } //自定义库 namespace mylib{ import math; import table; import console; //批量按钮位置表 //传参: 控件宽度,控件高度,按钮间距,按钮行数量,按钮列数量 //出参: 数据表 btnTabSet = function(winW,winH,btnMargin,btnRows,btnCols){ var btnW = math.floor((winW-btnMargin*btnCols)/btnCols); //按钮行数量 var btnH = math.floor((winH-btnMargin*btnRows)/btnRows); //按钮列数量 //console.log(rowsCount,colsCount); var btnTab = {} //横向菜单 //for(i=1;btnRows;1){ // for(j=1;btnCols;1){ //竖向菜单 for(j=1;btnCols;1){ for(i=1;btnRows;1){ btnLeft = j*btnMargin+(j-1)*btnW; btnTop = i*btnMargin+(i-1)*btnH; btnRight = btnLeft+btnW; btnBottom = btnTop + btnH; table.push(btnTab,{left=btnLeft,top=btnTop,right=btnRight,bottom=btnBottom}); } } return btnTab; } } //批量生成按钮 import console; btnTab = {} btnMargin = 1; //按钮间距 btnRows,btnCols = 25,3; //按钮行数量,按钮列数量 winform.btnDisp = function(){ //按钮初始化 for(i=1;#btnTab;1) { if winform.custom['button'+i] winform.custom['button'+i].close(); } //生成按钮坐标数组 //批量按钮位置表 传参: 控件宽度,控件高度,按钮间距,按钮高度,按钮宽度 winW,winH = winform.custom.width,winform.custom.height; //控件宽高 btnTab = mylib.btnTabSet(winW,winH,btnMargin,btnRows,btnCols) //console.dump(btnTab) //生成批量按钮 for(i=1;#btnTab;1){ //动态生成控件 //获取第一行注释作为文本 var buttonText = ' ' if funTab[i] { try{ buttonText = i++"."++string.match(funTab[i],"//(.*?)\n"); } } //按钮控件 winform.custom.addCtrl( ['button'+i]={cls="button";text=buttonText; left=btnTab[i].left;top=btnTab[i].top;right=btnTab[i].right;bottom=btnTab[i].bottom;dl=1;dt=1;flat=1; align="left";z=1}; ) //无数据则禁用 if !#buttonText winform.custom['button'+i].disabled = true //if !#buttonText winform.custom['button'+i].close() //控件事件 winform.custom['button'+i].oncommand = function(id,event){ //winform.msgbox(owner.text) if(ide.getActiveForm()==true){ winform.msgbox("非ide代码窗口!","提示") return; } if funTab[i] { /* //ide原生模式 ide.insertCode(string.trim(funTab[i])); //如果代码不完整(带注释),可Ctrl+v粘贴! win.clip.write(funTab[i]); //提示 //winform.msgbox("如果代码不完整(带注释),可Ctrl+v粘贴!","提示"); //win.msgboxTimeout("如果代码不完整(带注释),可Ctrl+v粘贴!","提示",1000,ide.getActiveCodeEditorHwnd()); */ //窗口切换模式 //var hwnd = winex.findActivate("aardio v") var hwnd = ide.getActiveCodeEditorHwnd(); win.delay(200) if(hwnd) { winex.click(hwnd); winex.sendString(funTab[i],hwnd); } hwnd = null; } } } } winform.adjust = function( cx,cy,wParam ) { winform.btnDisp(); win.setTopmost(winform.hwnd); }; winform.show(); win.loopMessage();