This commit is contained in:
murmur 2023-07-23 22:23:24 +08:00
parent 672e5d01a7
commit f58c2bbccb
8 changed files with 1223 additions and 0 deletions

60
http.aardio Normal file
View File

@ -0,0 +1,60 @@
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add()
/*}}*/
import console;
import process;
import wsock.tcp.simpleHttpServer;
var server = wsock.tcp.simpleHttpServer()//"127.0.0.1",/*8081*/);
console.log( server.getUrl() )
process.execute( server.getUrl() );
//如果不需要窗口界面,那也可以直接使用 wsock.tcp.simpleHttpServer
server.run(
function(response,request,session){
if( io.exist( request.path,0)
&& request.path!="/main.aardio" ){
response.loadcode( request.path )
}
else{
loadcodex(`
<!doctype html>
<html><head></head><body style="white-space:pre"><?
response.jsonPrettyPrint = true;//输出缩进格式化的JSON
response.write(string.random(10));
?></body>
</html>`)
}
}
)
import win.timer
var timer = win.timer( winform );
timer.onTimer = function(hwnd,msg,id,tick){
server.publish("reload",)
}
//timer.setInterval(100)
timer.enable(100,100)
winform.show();
win.loopMessage();

51
ocr识别.aardio Normal file
View File

@ -0,0 +1,51 @@
//屏幕找字完整版
import win.ui;
/*DSG{{*/
var winform = win.form(text="string.ocrLite简单演示";right=796;bottom=504)
winform.add(
button={cls="button";text="识别剪贴板图像";left=528;top=423;right=712;bottom=477;db=1;dr=1;z=2};
edit={cls="edit";left=497;top=36;right=764;bottom=403;db=1;dr=1;dt=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=3};
plus={cls="plus";left=25;top=36;right=474;bottom=403;db=1;dl=1;dr=1;dt=1;repeat="scale";z=1}
)
/*}}*/
/*DSG{{*/
var winform2 = win.form(text="输出窗口";right=1151;bottom=745;parent=...;scroll=1)
winform.add()
/*}}*/
//web.form 使用系统自带的 IE 内核,生成的EXE体积很小
//即使 WIN10 删除IE浏览器IE内核浏览器控件仍作为操作系统组件被保留。
//大家通常低估了IE控件的作用IE11已普及一般用不到最新前端技术的话IE控件是非常强大的。
import web.form;
var wb = web.form.ie11( winform2);//低于IE11就自动安装IE11
//相关 OCR 范例:"~\codes\范例程序\2) 调用其他语言\2) dotNet\ocr.aardio"
import string.ocrLite;
import string.ocrLite.defaultModels;
import win.clip;
var ocr = string.ocrLite(,true);
winform.button.oncommand = function(id,event){
var hBmp = win.clip.readBitmap()
if(!hBmp){
winform.edit.print("剪贴板未读取到图像")
return;
}
var bmp = gdip.bitmap(hBmp);
var ocrRet = ocr.detectBitmap(bmp);
if(ocrRet){
winform.plus.background = ocrRet.resultBitmap;
winform.edit.text = ocrRet.text;
}
}
winform.show();
win.loopMessage();

303
serial.aardio Normal file
View File

@ -0,0 +1,303 @@
import fonts.fontAwesome;
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=226;bottom=211;border="dialog frame";max=false;min=false)
winform.add(
pluslen={cls="plus";left=122;top=89;right=221;bottom=119;bgcolor=-5197169;dl=1;dt=1;font=LOGFONT(h=-13);z=6};
plusparity={cls="plus";left=122;top=121;right=221;bottom=151;bgcolor=-5197169;dl=1;dt=1;font=LOGFONT(h=-13);z=8};
plusport={cls="plus";left=122;top=25;right=221;bottom=55;bgcolor=12632256;dl=1;dt=1;font=LOGFONT(h=-13);z=2};
plusrate={cls="plus";left=122;top=57;right=221;bottom=87;bgcolor=-5197169;dl=1;dt=1;font=LOGFONT(h=-13);textPadding={top=6;bottom=3};z=4};
plusstop={cls="plus";left=122;top=153;right=221;bottom=183;bgcolor=-5197169;dl=1;dt=1;font=LOGFONT(h=-13);z=10};
staticlen={cls="static";text="Static";left=9;top=90;right=115;bottom=120;align="right";center=1;dl=1;dt=1;transparent=1;z=5};
staticparity={cls="static";text="Static";left=15;top=122;right=115;bottom=152;align="right";center=1;dl=1;dt=1;transparent=1;z=7};
staticport={cls="static";text="Static";left=15;top=25;right=115;bottom=55;align="right";center=1;dl=1;dt=1;transparent=1;z=1};
staticrate={cls="static";text="Static";left=15;top=58;right=115;bottom=88;align="right";center=1;dl=1;dt=1;transparent=1;z=3};
staticstop={cls="static";text="Static";left=15;top=154;right=115;bottom=184;align="right";center=1;dl=1;dt=1;transparent=1;z=9};
tab1={cls="plus";text="按钮";left=257;top=69;right=356;bottom=99;align="left";bgcolor=-5197169;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-13;name='FontAwesome');padding={left=20}};iconText='\uF10C';textPadding={left=39};z=11};
tab2={cls="plus";text="按钮";left=257;top=101;right=356;bottom=131;align="left";bgcolor=-5197169;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-13;name='FontAwesome');padding={left=20}};iconText='\uF10C';textPadding={left=39};z=12}
)
/*}}*/
import console
//console.log()
var arg = {...};//winform,is popup,active color,hover color
arg[["active"]]=arg[3]
arg[["hover"]]=arg[4]
if(!arg[["active"]]){
arg[["active"]] = 0xFF1E90FF
}
if(!arg[["hover"]]){
arg[["hover"]] = 0xFF99CCFF
}
if(0){//无边框
win.form.border="none"
winform.add(bkplus={cls="bkplus";left=-11;top=-1;right=253;bottom=24;dl=1;dt=1;forecolor=12632256};)
import win.ui.simpleWindow2
var wui = win.ui.simpleWindow2(winform,,24,24)
//winform.text = "配置串口"
wui.skin(
background = {
hover = arg[["hover"]];
active = 0xffff6666;
default = 0x00000000;
}
color = {
hover = 0xff666666;
active = 0xffffffff;
default = 0xffffffff;
}
)
}
import fsys.config
var cfg = fsys.config("/config/");
winform.bindConfig( cfg.serialcfg,{
//edit = "text";
//radiobutton = "checked";
//checkbox = "checked";
//combobox = "selIndex";
plus ={
//["^chk"] = "checked";
["plus*"] = "text";
};
} );
import sio
import sys.comPort
var comPorts = sys.comPort.list();
//console.varDump(comPorts)
var str,cfginfo = {};
ratetmp = table.map(sio.baudRates(),function(v,k,result){
result[k+1]=tostring(v)
})
table.push(ratetmp,"自定义")
//console.varDump(ratetmp)
str={
port={
info="端口/Port";
index=1;
data=table.map(comPorts,function(v,k,result){
result[k]=tostring(v)
})
};
rate={
info="波特率/Baud rate";
index=12;
data=ratetmp
/** {
"2400";
"4800";
"9600";
"38400";
"115200";
"自定义"
}**/
};
len={
info="数据位数/Data bits";
index=4;
data={
"5";
"6";
"7";
"8"
}
};
parity={
info="极性/Parity";
index=1;
data={
"无/None";
"奇/Odd";
"偶/Even";
"零/Spc";
"一/Mrk";
}
};
stop={
info="结束位/Stop bits";
index=1;
data={
"1";
"1.5";
"2";
}
};
}
import win.ui.tabs
var tbs=win.ui.tabs(winform.tab1,winform.tab2)
//tbs.initPopup()
tbs.itemMargin = 2
tbs.skin({
background={
default=0xFFD3D3D3;//0xffc0c0c0;
//disabled=0xFFCCCCCC;
hover=arg[["hover"]]
};
checked = {
iconText = '\uF05D';
background={
default=arg[["active"]];
//disabled=0xFFCCCCCC;
hover=arg[["hover"]]
};
}
})
for(name,ctrl in winform.eachControl("static") ){
var tmp = string.replace(name,"static","");
ctrl.text = str[tmp][["info"]]
}
init = function(){
for(name,ctrl in winform.eachControl("plus","plus*") ){
ctrl.skin({
background={
default=0xffc0c0c0;//0x668FB2B0;
active = arg[["active"]];
//disabled=0xFFCCCCCC;
hover=arg[["hover"]]//0xFF928BB3
};
color={
default=0xFF000000;
disabled=0xFF6D6D6D
}
})
var tmp = string.replace(name,"plus","");
//var idx = str[tmp].index
if(ctrl.text == ""){
ctrl.text = str[tmp][["data"]][str[tmp][["index"]]]
}
if(!#str[tmp].data){
ctrl.text = ""
}
ctrl.oncommand = function(id,event){
var tmp = string.replace(name,"plus","");
tbs.clear()//清空原tbs
tbs.initPopup()//必须初始化
if(tmp == "port"){
str[tmp].data=table.map(sys.comPort.list(),function(v,k,result){
result[k]=tostring(v)
})
}
//tbs.setItemTexts(str[tmp].data)
for(i=1;#str[tmp].data;1){
//for(k,v in str[tmp].data){
tbs.add({
text=str[tmp].data[i];
})
//折叠过长的列表
var col = 6;
if(#str[tmp].data < col){
continue
}
var tbrec = winform.tab1._defRect;
var x2,y2,cx2,cy2 = tbrec.left,tbrec.top,tbrec.right-tbrec.left,tbrec.bottom-tbrec.top
var rec = tbs.strips[tbs.count()]._defRect;
if( i%col == 0){
//x2,y2 = win.getPos(ctrl.hwnd,true)
rec.left=x2+(cx2+tbs.itemMargin)*math.floor(i/col)
rec.right = rec.left+cx2
rec.top=y2-cy2-tbs.itemMargin//
rec.bottom=rec.top+cy2
}
}
tbs.selText = ctrl.text
if(!tbs.selIndex){
tbs.selText="自定义"
}
tbs.popup(true,ctrl,"right")
}
}
}
init()
winform.getcfg = function(){//poart,baud,wordLength,stopBits,parity
var ctrl = winform;
cfginfo = {ctrl.plusport.text;tonumber(ctrl.plusrate.text);ctrl.pluslen.text;tonumber(ctrl.plusstop.text);string.lower(string.replace(ctrl.plusparity.text,".*/",""))}
//console.varDump(cfginfo);
cfg.saveAll()
if(winform.parent){
return cfginfo;
}
}
winform.getcfg()
tbs.onOk = function(strip){
//console.varDump(tbs.$popBuddy)
if(strip.text == "自定义"){
tbs.$popBuddy.editable = 1;//"edit";
//tbs.$popBuddy.num=1
winform.plusrate.editBox.limit=7
tbs.$popBuddy.setFocus()
tbs.$popBuddy.editBox.onChange = function(){
winform.getcfg()
}
tbs.$popBuddy.editBox.onFocusLost = function(){
var tmp = tbs.$popBuddy.text;
var rec = tbs.$popBuddy.getRect()//_defRect;
tbs.$popBuddy.close()
winform.add(
plusrate={cls="plus";left=rec.left;top=rec.top;right=rec.right;bottom=rec.bottom;bgcolor=-5197169;dl=1;dt=1;font=LOGFONT(h=-13);textPadding={top=6;bottom=4}};
)
init()
winform.plusrate.text = tmp
}
}
else {
tbs.$popBuddy.text = strip.text
}
winform.getcfg()
}
if(winform.parent != null){
//winform.doModal()
}
//console.varDump(winform.parent)
winform.onDestroy = function(){
//console.log("12")
//winform.getcfg();
}
winform.show();
win.loopMessage();
return winform,cfginfo;

174
sio.aardio Normal file
View File

@ -0,0 +1,174 @@
import win.dlg.message;
import win.ui;
/*DSG{{*/
var winform = win.form(text="简单串口助手";right=846;bottom=465)
winform.add(
btnOpen={cls="button";text="打开端口";left=85;top=411;right=183;bottom=445;db=1;dl=1;z=7};
btnR={cls="button";text="R";left=196;top=178;right=307;bottom=241;z=13};
btnT={cls="button";text="T";left=51;top=166;right=143;bottom=225;z=12};
btnTx={cls="button";text="发送";left=582;top=411;right=680;bottom=445;db=1;dr=1;z=6};
button={cls="button";text="Button";left=720;top=419;right=793;bottom=446;z=9};
button2={cls="button";text="Button";left=726;top=351;right=793;bottom=399;z=11};
combobox={cls="combobox";left=30;top=13;right=169;bottom=39;dl=1;dt=1;edge=1;items={};mode="dropdown";z=2};
editRx={cls="edit";left=34;top=64;right=732;bottom=111;db=1;dl=1;dr=1;dt=1;edge=1;multiline=1;z=3};
editTx={cls="edit";left=240;top=414;right=569;bottom=446;db=1;dl=1;dr=1;edge=1;z=5};
lbComPort={cls="static";text="没有找到任何串口,建议安装虚拟串口驱动: Virtual Serial Port Driver";left=199;top=16;right=607;bottom=40;dl=1;dr=1;dt=1;transparent=1;z=4};
openDeviceManager={cls="plus";text="打开设备管理器";left=612;top=14;right=732;bottom=38;align="left";color=8388608;font=LOGFONT(h=-13);notify=1;textPadding={left=5};z=8};
static={cls="static";text="Static";left=71;top=341;right=203;bottom=367;transparent=1;z=10};
trackbar={cls="plus";left=106;top=284;right=548;bottom=299;bgcolor=14265123;border={radius=-1};foreRight=15;forecolor=1865727;paddingBottom=5;paddingTop=5;z=1}
)
/*}}*/
//串口列表
import sys.comPort;
var comPorts = sys.comPort.list();
winform.combobox.items = comPorts;
winform.combobox.selIndex = sys.comPort.find("CP210x")[["index"]] or 1;
//获取串口信息
winform.combobox.oncommand = function(id,event){
var item = comPorts[winform.combobox.selIndex]
if(item){
winform.lbComPort.text = item.friendlyName;
}
}
winform.combobox.oncommand();
//串口发送
import sio;
var sioPort;
winform.btnTx.oncommand = function(id,event){
if(!sioPort){
winform.btnOpen.oncommand();
}
if( !sioPort.write( winform.editTx.text ) ){
return winform.msgErr("发送失败");
}
}
//打开串口
winform.btnOpen.oncommand = function(id,event){
if(sioPort){
sioPort.close();
}
var err;
sioPort,err = sio.port(winform.combobox.selText);
if(!sioPort){
return winform.msgErr(err);
}
sioPort.ioctl(1e6,8,1);
//串口接收到数据触发回调
sioPort.termCntIrq(1,function(port){
var r = sioPort.read();
//winform.editRx.appendText(r);
if(r == "try"){
//sioPort.write("hello")
}
} )
winform.msgOk("已打开端口",1000)
}
winform.onDestroy = function(){
if(sioPort){
sioPort.close();
}
}
import sys.device;
winform.openDeviceManager.oncommand = function(id,event){
sys.device.manager();
}
winform.openDeviceManager.skin({
color={
active=0xFF00FF00;
default=0xFF000080;
disabled=0xFF6D6D6D;
hover=0xFFFF0000
}
})
var pos=0
update = function(winform,length,total,pos){
import console
winform.trackbar.progressPos = math.round(length/total*100,1)
winform.static.text = winform.trackbar.progressPos
//console.log(winform.trackbar.progressPos)
}
winform.trackbar.setTrackbarRange(1,100)
winform.button.oncommand = function(id,event){
//var rst = sioPort.request("try",,5)
//winform.editRx.appendText("rec---"++rst)
sioPort.transmitAscii("E:\OneDrive - Cutting-Edge\Desktop\组成.png",
function(length,bufSize,buf,total){
if(length >pos){
pos = length
thread.invokeAndWait(update,winform,length,total)
}
}
)
winform.editRx.appendText("456");
}
winform.button2.oncommand = function(id,event){
sioPort.abortWrite()
}
winform.btnT.oncommand = function(id,event){
/*
sioPort.transmitXmodem1kCrc("E:\OneDrive - Cutting-Edge\Desktop\组成.png",
function(length,bufSize,buf,total){
if(length >pos){
pos = length
thread.invokeAndWait(update,winform,length,total)
}
}
)
*/
//pos=0
sioPort.transmitZmodem("E:\OneDrive - Cutting-Edge\Desktop\组成.png",
function(length,bufSize,buf,total){
if(length >pos){
pos = length
thread.invokeAndWait(update,winform,length,total)
}
}
)
}
winform.btnR.oncommand = function(id,event){
var sta =sioPort.receiveXmodem1kCrc(
function(length,bufSize,buf,total){
if(length >pos){
pos = length
thread.invokeAndWait(update,winform,length,total)
}
}
)
//pos=0
/**
sioPort.receiveAscii(5/*秒*/,
function(length,bufSize,buf,total){
if(length >pos){
pos = length
thread.invokeAndWait(update,winform,length,total)
}
}
)
**/
console.log("sta---",sta)
}
winform.show();
win.loopMessage();

37
test.aardio Normal file
View File

@ -0,0 +1,37 @@
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
button={cls="button";text="Button";left=373;top=87;right=452;bottom=121;z=2};
button2={cls="button";text="Button";left=586;top=65;right=668;bottom=100;z=3};
custom={cls="\serial.aardio";text="自定义控件";left=49;top=45;right=396;bottom=363;z=1}
)
/*}}*/
import sio
import win.dlg.message;
import console
var cfg, comport;
winform.button.oncommand = function(id,event){
var ctrl = winform.custom;
cfg = winform.custom.getcfg()
console.dump(cfg)
comport,err = sio.port(cfg[1])
if(!comport){
return winform.msgErr(err);
}
sta,err = comport.ioctl(table.unpack(cfg,2))
if(!sta){
return winform.msgErr(err);
}
owner.text = "close"
}
winform.button2.oncommand = function(id,event){
var cfg = winform.custom.getcfg()
console.dump(cfg)
}
winform.show();
win.loopMessage();

467
txt2table.aardio Normal file
View File

@ -0,0 +1,467 @@
import fonts.fontAwesome;
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=815;bottom=567)
winform.add(
btnWbPrint={cls="button";text="Print";left=752;top=448;right=792;bottom=472;z=9};
button={cls="button";text="Button";left=744;top=520;right=800;bottom=552;z=3};
button2={cls="button";text="Copy";left=736;top=104;right=784;bottom=128;z=4};
combobox={cls="combobox";left=736;top=168;right=808;bottom=192;edge=1;items={};mode="dropdownlist";z=8};
edit={cls="edit";left=16;top=16;right=728;bottom=280;db=0.51;dl=1;dr=0.11;dt=1;edge=1;font=LOGFONT(name='Consolas');hscroll=1;multiline=1;vscroll=1;z=1};
editOri={cls="edit";text="Edit";left=16;top=288;right=728;bottom=552;db=1;dl=1;dr=0.11;dt=0.51;edge=1;font=LOGFONT(name='Consolas');hscroll=1;multiline=1;vscroll=1;z=2};
plusCenter={cls="plus";left=760;top=64;right=780;bottom=84;bgcolor=-5197169;font=LOGFONT(h=-13);iconStyle={font=LOGFONT(h=-13;name='FontAwesome')};iconText='\uF037';textPadding={left=20};z=7};
plusLeft={cls="plus";left=736;top=64;right=756;bottom=84;bgcolor=-5197169;font=LOGFONT(h=-13);iconStyle={font=LOGFONT(h=-13;name='FontAwesome')};iconText='\uF036';notify=1;textPadding={left=20};z=5};
plusRight={cls="plus";left=784;top=64;right=804;bottom=84;bgcolor=-5197169;font=LOGFONT(h=-13);iconStyle={font=LOGFONT(h=-13;name='FontAwesome')};iconText='\uF038';textPadding={left=20};z=6}
)
/*}}*/
/***
+完成每列等宽设计
+完成行内换行设计
++完成换行后行内垂直居中设计
+完成对齐功能L、C、R
+完成列合并功能
++完成列合并后居中功能
+完成行合并功能
--待完成行合并后垂直居中功能
*修复列宽bug
***/
import console
winform.editOri.text = /***
阶段 逻辑信道 子帧类型 子帧简写 使用时隙类型 时隙简写
初始\r建网阶段 搜索逻辑信道 \- \- 初始搜索子帧 SearchSFrm 长搜索时隙 SRSlot
\| 同\r步\r逻\r辑\r信\r道 自举子帧 BootSFrm 同步时隙 CS
\| 自举应答子帧 RBootSFrm 同步时隙 CR
参数分发子帧 PSFrm 同步时隙 CP
入网周期帧阶段 同步逻辑信道 勤务同步子帧 SyncSFrm 同步时隙 S
\| 业务逻辑信道 数据子帧 DataSFrm 基本数据时隙 D
信令逻辑信道 信令子帧 CSFrm 基本数据时隙 C
***/
/***
"\r"代表单元格内换行
"\-"代表与前列合并单元格,其后值忽略
"\|"代表与前行合并单元格
***/
winform.combobox.items = {"空白字符";"制表符";"空格"}
winform.combobox.selIndex =1
align = ""
str2xls = function(str,ss,s,c){
if(!s){
s= "-"
}
if(!c){
c="+"
}
if(!ss){
ss=s
}
var strXls = "";
string.appendText = function(str){
strXls = strXls ++ str
}
var delta = 1; //默认两侧各多1个空格
var Rowstr = string.splitEx(str,'\r\n')//分行
var pattern = {"\s+";"\t+";" +"}; //截断规则
var Rowarr = table.map(Rowstr,lambda(v,k) string.splitEx(string.trimright(v),pattern[winform.combobox.selIndex]) )//分列
var Cmax = table.map(Rowarr,lambda(v,k) #v );
table.sort(Cmax)//获取最大列数Cmax[#Cmax]
var Rmax={}//最大子行数
RowarrRN = table.map(Rowarr,function(v,k,result){//分子行
var a = {};
var rr = 1;
//console.dump(v)
for(i=1;Cmax[#Cmax];1){//#tmp[1]获取最大列而非#v是避免遗漏空列
var x = string.splitEx(v[i]==null?" ":v[i],"\\r"); //||代表元素换行
table.push(a,x)
if(rr<#x){//当前行内排序,找出最大的子行数
rr=#x
}
}
table.push(Rmax,rr)
return a;
});
//console.dump(RowarrRN)
vc = function(arg,max){//数组元素居中
var arr = arg;
var num = math.floor((max-#arr)/2);
while(num){
table.insert(arr,"")
num = num-1
}
arr = table.slice(table.mix(arr,table.array(max,"")),1,max)
return arr;
}
vc1line = function(arg){//行内(换行)垂直居中
var tmp = arg;
for(i=1;#tmp;1){
for(j=1;#tmp[1];1){
tmp[i][j] = vc(tmp[i][j],Rmax[i])
}
}
return tmp;
}
var tmp = vc1line(RowarrRN)
vc2line = function(i,j){//连续行(合并行)垂直居中
arr = vc(RowarrRN[i-1][j],Rmax[i-1]+2)
return arr;
}
//console.dump(vc2line(3,3))
glA = function(str){//获取字符中ASCII字符个数
var llA = {};
string.search(llA,str,"\i" )
return #llA;
}
gw = function(){ //获取每列最大列宽
var wmax = {}; //每列最大列宽
for(j=1;#tmp[1];1){//col
var llA = glA(tmp[1][j][1])
var w = string.len(tmp[1][j][1])-math.floor(llA/2)//;#tmp[1][j][1];#l1A}; //字符宽字节宽ASCII个数
for(i=1;#tmp;1){//row
for(ii=1;Rmax[i];1){
if(tmp[i][j][ii]==null){
tmp[i][j][ii]= ""
}
var llA = glA(tmp[i][j][ii])
var l = string.len(tmp[i][j][ii])-math.floor(llA/2)
if(w <= l){//字符最长
w = l//字符宽
}
}
}
table.push(wmax,w)
}
return wmax;
}
var UserWmax = table.clone(gw())
//console.dump(UserWmax)
txt2arrOri = function(){
var newstr = {};
for(i=1;#tmp;1){//row
for(ii=1;Rmax[i];1){//元素换行
var rowsep={}
var rowtxt={}
for(j=1;#tmp[1];1){
//
//新数组,[行号]={连接符; 单元格字符; sta;对应原txt所在行}
var con = c;
var dstr = string.repeat((UserWmax[j]+delta)*2,s)
//var l = (UserWmax[j]-string.len(tmp[i][j][ii]))*2+math.round(glA(tmp[i][j][ii]))+2*delta; //需添加空格数
if(i == 2){//表头,last
//dstr = string.repeat((UserWmax[j]+delta)*2,ss);
}
if(ii == 1){//子行不添加分割行
table.push(rowsep,{con;dstr;0})
}
table.push(rowtxt,{"|";tmp[i][j][ii];0;i})
}//end j
if(rowsep[1]!=null){
table.push(newstr,rowsep)//new row in cell;
}
table.push(newstr,rowtxt)
//console.dump(newstr[i][2])
}//end ii
}//end i
return newstr;
}
//var txtArr = txt2arrOri()
//console.dump(txt2arrOri())
formatarr = function(a){
var arg = a;
gs = function(){
var a = table.array(#arg,#arg[1],0);
for(i=1;#arg;1){//row
for(j=1;#arg[1];1){
select(arg[i][j][2]) {
case "\-" {//优先处理行内合并
a[i][j]=-1
if(j>1){
a[i][j-1]=-1
}
}
case "\|" {
a[i][j]=1
}
else {
a[i][j]=0
}
}
}
}
return a;
}
var sta = gs()
//console.dump(sta)
//align
aCell = function(str,w){//align current cell
if(w==null){
//w=UserWmax[j]
}
var ll = (w-string.len(str))*2+math.round(glA(str))+2*delta; //需添加空格数
select(align) {
case "Center" {//center
return string.repeat(math.floor(ll/2)," ") ++ str ++ string.repeat(ll-math.floor(ll/2)," "))
}
case "Right" {//right
return string.repeat(ll-delta," ") ++ str ++ string.repeat(delta," "))
}
else {//left
return string.repeat(delta," ") ++ str ++ string.repeat(ll-delta," "))
}
}
}
var tmpalign = align
for(i=1;#arg;1){//row
for(j=1;#arg[1];1){
if(arg[i][j][1] != c){//only txt
if(i == 2){//表头强制居中
align = "Center"
}
else {
align = tmpalign
}
arg[i][j][2] = aCell(arg[i][j][2],UserWmax[j])
}
}
}
var Rc = Rowarr;
var xd = txt2arrOri();
for(i=1;#arg;1){//row
for(j=1;#arg[1];1){
if(arg[i][j][1] != c){//only txt
//行合并
if(xd[i][j][2] == "\|" and i != 1 and sta[i-1] != -1){
//xd[i][j][2] = ""
var k = 1;
var r2c = Rmax[arg[i][j][4]] + Rmax[arg[i][j][4]-1]+1;
var ori = {};
var r1 = i-math.floor((Rmax[arg[i][j][4]]-1)/2)-Rmax[arg[i][j][4]-1]-1
for(r=r1;r1+Rmax[arg[i][j][4]-1]-1;1){
table.push(ori,xd[r][j][2])
}
//while(xd[i+2*(k)][j][2] == "\|"){
while(Rc[arg[i][j][4]+k][j] == "\|"){//txt下一行同列
//console.dump(k,Rmax[arg[i][j][4]+k])
Rc[arg[i][j][4]+k][j] = ""
math.floor((Rmax[arg[i][j][4]]-1)/2)
r2c += Rmax[arg[i][j][4]+k]+1
if(k!=#arg){
k += 1
}
//console.dump(Rc)
}
ori = vc(ori,r2c)
//console.dump(ori)
for(r=1;#ori;1){
xd[r1+r-1][j][2]=""
arg[r1+r-1][j][2]=aCell(ori[r],UserWmax[j])
}
}
//行内合并
if(xd[i][j][2] == "\-" and j != 1){//第一列无效
xd[i][j][2] = ""
//check how many cells to compose
var k = 1;
var w = UserWmax[j]+UserWmax[j-1];
while(xd[i][j+k][2] == "\-"){
//console.log(k)
xd[i][j+k][2] = ""
w += UserWmax[j+k]
if(k!=#arg[1]){
k += 1
}
}
//force align to center
var r2c = Rmax[arg[i][j-1][4]];
for(r=i-math.floor((r2c-1)/2);i+r2c-math.floor((r2c-1)/2)-1;1){
var str = txt2arrOri()[r][j-1][2];
var ll = (w-string.len(str))*2+math.round(glA(str))+2*delta+(2*delta+1)*k; //需添加空格数
arg[r][j-1][2] = string.repeat(math.floor(ll/2)," ") ++ str ++ string.repeat(ll-math.floor(ll/2)," ")
//arg[r][j][2] = ""
for(n=0;k-1;1){
arg[r][j+n][2] = ""
}
}
}//end
}
}
}
return arg;
}
arr2str = function(arr){
var strs = table.map(arr,function(v,k,result){
var c = v[1][1];
//var str = table.map(v,lambda(vv,kk) vv[2])
var str = {}
for(i=1;#v;1){//去掉空cell数组大小会减小map不改变数组大小
if(v[i][2]!=""){
table.push(str,v[i][2])
}
}
return c++string.join(str,c)++c
})
//console.dump(strs)
strXls = string.join(strs,'\r\n') ++ '\r\n' ++ strs[1]
}
arr2str(formatarr(txt2arrOri()))
return "<pre>" ++ strXls ++"</pre>";
}//end str2xls
//write-space:pre|pre-line;
import web.form
var wb = web.form(winform.edit);
wb.html = /**
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script>
</script>
<style type="text/css">
pre,body {
font-family: 仿宋;
font-size:12px;
color: black;
background-color: #f8f8f8;
display: block;
line-height:1;
}
h1{
font-size:inherit;
font-weight: bold;
color: #4183C4;
write-space:pre-line;
}
</style>
</head>
<body>
</body>
</html>
**/
winform.button2.oncommand = function(id,event){
wb.execWb( 0x11/*_OLECMDID_SELECTALL*/,0 )
wb.execWb( 0xC/*_OLECMDID_COPY*/,0 )
}
winform.button.oncommand = function(id,event){
wb.body.innerHTML = str2xls(winform.editOri.text,"=");
}
for(name,ctrl in winform.eachControl("plus","plus*") ){
ctrl.skin({
background={
default=0x668FB2B0;
disabled=0xFFCCCCCC;
hover=0xFF928BB3
};
color={
default=0xFF000000;
disabled=0xFF6D6D6D
}
})
ctrl.oncommand = function(id,event){
align = string.trimleft(name,"plus");
winform.button.oncommand()
}
}
winform.button.oncommand()
winform.editOri.onChange = function(){
winform.button.oncommand()
}
winform.combobox.oncommand= function(id,event){
var text = owner.selText;
if(event == 9/*_CBN_SELENDOK*/){
winform.button.oncommand()
}
}
//HTML格式打印
winform.btnWbPrint.oncommand = function(id,event){
wb.getDoc().execCommand("print")
}
winform.show();
win.loopMessage();

View File

@ -0,0 +1,59 @@
//修改网站页面
import win.ui;
import web.form;
/*DSG{{*/
var winform = win.form(text="aardio form";right=713;bottom=477;parent=...;scroll=1)
winform.add(
Go={cls="button";text="Go";left=569;top=38;right=608;bottom=71;z=4};
button={cls="button";text="Download";left=638;top=37;right=693;bottom=71;z=1};
edit={cls="edit";text="https://www.analog.com/en/parametricsearch/11010";left=52;top=41;right=555;bottom=65;edge=1;multiline=1;z=3};
static={cls="static";text="Static";left=32;top=128;right=677;bottom=443;db=1;dl=1;dr=1;dt=1;transparent=1;z=2}
)
/*}}*/
import web.form;
//创建web窗体
var wb = web.form( winform.static,,,,true );
wb.noScriptErr=true;
winform.show()
winform.button.oncommand = function(id,event){
var ele = wb.waitQueryEles(
//innerHTML="ADR1399";
//tagName="^A$";
href="//www.analog.com/en/.*";
//className="product"
target="_blank"
//rel="noopener noreferrer"
),10000;
//win.msgbox(ele.href++ "/datasheet")
var list = {}
for(k,v in ele){
var tmp = v.href ++ "/datasheet"++ '\r\n'
list[tmp] = list[tmp]==null?1:list[tmp] + 1
}
import console
console.dumpTable(list)
for(k,v in list){
string.save("d:\adi.txt",k ,true)
}
}
winform.Go.oncommand = function(id,event){
wb.go(winform.edit.text)
}
win.loopMessage();

72
悬浮窗口.aardio Normal file
View File

@ -0,0 +1,72 @@
//透明 3D
import win.ui;
/*DSG{{*/
var winform = win.form(text="WebView2 - 透明3D";right=1112;bottom=771;border="none")
winform.add(
static={cls="static";text="Static";left=523;top=334;right=1054;bottom=699;transparent=1;z=1}
)
/*}}*/
import console
import web.form;
var wb = web.form(winform);
//窗口透明
winform.transparent(128,0xFFFFFFFF)
//winform.transparent(true)
//webView2 控件透明
//wb.defaultBackgroundColor = 0x00000000;
wb.go("/index.aardio",{str="IMG_1199.jpg"})
//var ele = wb.document.getElementsByClassName('sp-wrap');
//console.log(ele.innerHTML)
//wb.waitEle("body")
winform.show()
wb.wait()
var js = /**
document.body.style.backgroundColor = 'transparent';
**/
wb.doScript(js, )
wb.showMenu = function(x,y,id,ele){
/*定义此事件函数则禁用默认的右键弹出菜单*/
select(id) {
case 0/*_CONTEXT_MENU_DEFAULT */ {
}
case 1/*_CONTEXT_MENU_IMAGE*/ {
}
case 2/*_CONTEXT_MENU_CONTROL*/ {
}
case 4/*_CONTEXT_MENU_TEXTSELECT */ {
}
case 5/*_CONTEXT_MENU_ANCHOR*/ {
}
}
return false;
}
wb.attach(
function(event){
if(event.button = 2){
wb._form.hitClose()
}
}
,"onmouseup",/*也可输入getEle()所需参数,省略表示doc*/
)
win.loopMessage();