当前位置: 首页 > news >正文

aardio:用 WebView 模仿 mdict 界面

aardio:用 WebView 模仿 mdict 界面

import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio2";right=889;bottom=467)
mainForm.add(
button={cls="button";text="go";left=335;top=22;right=399;bottom=41;z=2};
button2={cls="button";text="prefix";left=426;top=21;right=497;bottom=40;z=4};
button3={cls="button";text="sound";left=533;top=19;right=592;bottom=39;z=5};
button4={cls="button";text="TTS读音";left=621;top=17;right=681;bottom=39;z=7};
custom={cls="custom";text="WebView2";left=165;top=55;right=889;bottom=469;z=3};
edit={cls="edit";left=17;top=19;right=317;bottom=43;edge=1;z=1};
listbox={cls="listbox";left=7;top=56;right=161;bottom=463;edge=1;items={};vscroll=1;z=6}
)
/*}}*/import web.view;
var wb = web.view(mainForm.custom);import web.json;
import console;import io;
import sys;
import fsys.media;
import web.rest.jsonClient;
//创建 HTTP 客户端
var http = web.rest.jsonClient();var basepath = "D:\mdict\data";
//导出本地函数给网页 JavaScript
wb.external = {mplay = function(url){if (string.startWith(url, "sound://")){if (string.endWith(txt, ".mp3")){var str = string.slice(txt,8,-1,true);var path = basepath + string.replace(str,"/","\");if(! io.exist(path)){mainForm.msgbox(path+" not found.");return;}mediaFile = fsys.media(path);if(mediaFile){ mediaFile.play();}}}		}
}var js = /**window.onload = function(){document.body.addEventListener('click', function(event){var target = event.target || event.srcElement;      // 兼容处理if (target.nodeName.toLocaleLowerCase() === "a") {  // 判断是否匹配目标元素if (event.preventDefault) {     // 对捕获到的 a 标签进行处理event.preventDefault();var addr = target.getAttribute('href');if (addr.indexOf('sound://')==0){alert(addr);} else {alert('href='+addr);}}}       });}
**/var baseurl = "http://localhost:8888/";
//响应按钮事件
mainForm.button.oncommand = function(id,event){var txt = mainForm.edit.text ;var str = string.trim(txt);if (string.startWith(str, "http://") or string.startWith(str, "https://")){wb.go(str);} else {url = baseurl + "trans?txt=" + str;wb.go(url);//wb.doScript(js);}
}// prefix 前缀匹配
mainForm.button2.oncommand = function(id,event){mainForm.button2.disabled = true;var txt = mainForm.edit.text;var str = string.trim(txt);if (string.startWith(str, "http://") or string.startWith(str, "https://")){wb.go(str);} else {	//url = baseurl + "prefix?txt=" + str;//发送 GET 请求var data = http.get(baseurl++"prefix",{ txt=str });//console.dumpJson(data);if (data){mainForm.listbox.clear();		for( k,v in data){mainForm.listbox.add(v);}mainForm.listbox.selIndex = 1;} else {if (http.statusCode ){//服务端返回错误信息console.log( http.lastResponse(), "http错误代码:"++ http.statusCode )} else {//本地内部错误mainForm.msgbox("data is null");}}}mainForm.button2.disabled = false;
}// 播放本地 .mp3
mainForm.button3.oncommand = function(id,event){mainForm.button3.disabled = true;var txt = mainForm.edit.text ;if (string.startWith(txt, "sound://")){if (string.endWith(txt, ".mp3")){var str = string.slice(txt,8,-1,true);var path = basepath + string.replace(str,"/","\");if(! io.exist(path)){mainForm.msgbox(path+" not found.");return;}mediaFile = fsys.media(path);if (mediaFile) {mediaFile.play();}}}mainForm.button3.disabled = false;		
}import com.sapi.voice; //导入语音组件
var voice = com.sapi.voice(); //创建语音对象
// TTS 读单词
mainForm.button4.oncommand = function(id,event){mainForm.button4.disabled = true;voice.speakAsync(mainForm.edit.text,1);//异步非阻塞朗读voice.waitOne(); //等待朗读结束mainForm.button4.disabled = false;	
}mainForm.listbox.oncommand = function(id,event){if( event == 0x1/*_LBN_SELCHANGE*/ ){str = mainForm.listbox.selText;url = baseurl + "trans?txt=" + str;wb.go(url);}
}//响应回车键弹起的消息
mainForm.edit.wndproc = function(hwnd,message,wParam,lParam){if(message == 0x101/*_WM_KEYUP*/ && wParam == 0xD/*_VK_ENTER*/){var url = mainForm.edit.text ;if (string.startWith(url, "http://") or string.startWith(url, "https://")){wb.go(url);} else {url = baseurl + "trans?txt=" + string.trim(url)wb.go(url);//wb.doScript(js);}}//无返回值则继续调用默认回调函数
}mainForm.show();
return win.loopMessage();

 对这个模仿程序的评价:"有点像"跟"是一样",很多时候有遥远的距离。这个比 tkwebview2 好用

web 服务程序参见:python:mdict + bottle = web 查询英汉词典

http://www.lryc.cn/news/113426.html

相关文章:

  • linq中的操作符
  • 数据结构【哈夫曼树】
  • SpringMVC基于SpringBoot的最基础框架搭建——包含数据库连接
  • deepspeed zero3
  • 代驾小程序怎么做
  • 探索 AJAX 技术:实现动态数据交互的前端利器
  • 深度学习Redis(3):主从复制
  • php笔记1
  • 2023 ChinaJoy 圆满闭幕,FairGuard游戏加固亮相 BTOB 展区
  • 数据规约策略
  • 服务器带宽独享跟共享有什么区别103.36.166.x
  • 【cluster_block_exception】写操作elasticsearch索引报错
  • chaitin-Nginx+Docker
  • 具体面试题
  • Logback ThresholdFilter LevelFilter
  • python+django+mysql项目实践二(前端及数据库)
  • Kubernetes高可用集群二进制部署(五)kubelet、kube-proxy、Calico、CoreDNS
  • 拦截器对接口细粒度权限校验
  • 计算机科技历史纵横:8月6日的十大里程碑
  • 知识图谱实战应用23-【知识图谱的高级用法】Neo4j图算法的Cypher查询语句实例
  • C++ 头文件函数大全
  • 智慧物流园区整体架构方案【46页PPT】
  • llama2模型下载
  • C高级【day4】
  • 【前端实习生备战秋招】—HTML 和 CSS面试题总结(一)
  • 【从零学习python 】02. 开发工具介绍
  • Python:Spider爬虫工程化入门到进阶(2)使用Spider Admin Pro管理scrapy爬虫项目
  • CubeMap convert into Octahedral思路
  • vue项目实战-脑图编辑管理系统kitymind百度脑图
  • c++调用ffmpeg api录屏 并进行rtmp推流