aardio:用 WebView 模仿 mdict 界面

aardio 用 WebView 模仿 mdict 界面的 dist 发布包 aardio 用 WebView2 模仿 mdict 界面的 dist发布包, 源代码 https://blog.csdn.net/belldeep/article/details/132116149 立即下载

aardio:用 WebView 模仿 mdict 界面

main.aardio 见下面

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="mp3play";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";

import com.sapi.voice; //导入语音组件
var voice = com.sapi.voice(); //创建语音对象
//导出本地函数给网页 JavaScript
wb.external = {
  speak = function(txt){
	if (string.len(txt) >0) {
		voice.speakAsync(txt,1);//异步非阻塞朗读
		voice.waitOne(); //等待朗读结束
	}		
  }
}

var js = /* var select = window.getSelection();
 var txt = select.toString(); aardio.speak(txt);
*/
//console.print(js);

var baseurl = "http://localhost:8888/";
//响应按钮事件
mainForm.button.oncommand = function(id,event){
	mainForm.button.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);
	} elseif (string.startWith(str,"D:") or string.endWith(str,".htm")){
		if (io.exist(str)){
			wb.go(str);
		} else {
			mainForm.msgbox(str+" not found.");
		}
	} else {
		url = baseurl + "trans?txt=" + str;
		wb.go(url);
		win.delay(1000);
		//wb.doScript(js);
	}
	mainForm.button.disabled = false;
}

// 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 path = fsys.dlg.open("*.mp3|*.MP3");
	if (io.exist(path)){
		mainForm.edit.text = path;
		if (string.endWith(path, ".mp3")){
        	mp3 = fsys.media(path);
        	if (mp3) mp3.play();
		}
	}
	mainForm.button3.disabled = false;		
}

// TTS 读单词
mainForm.button4.oncommand = function(id,event){
	mainForm.button4.disabled = true;
	var str = mainForm.edit.text;
	if (string.startWith(str, "C:") or string.startWith(str, "D:")){
		if (mp3) mp3.stop();
	}
	wb.doScript(js);
	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 txt = mainForm.edit.text ;
	var str = string.trim(txt);
	if (string.startWith(str, "http://") or string.startWith(str,"https://")){
		wb.go(str);
	} elseif (string.startWith(str,"D:") or string.endWith(str,".htm")){
		if (io.exist(str)){
			wb.go(str);
		} else {
			mainForm.msgbox(str+" not found.");
		}
	} else {
		url = baseurl + "trans?txt=" + str;
		wb.go(url);
		//win.delay(1000);
		//wb.doScript(js);
	}
  }
  //无返回值则继续调用默认回调函数
}

mainForm.show();
return win.loopMessage();

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

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

编写 index1.html 如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">   
    <title>查询英汉词典</title> 
    <script src="jquery-3.2.1.min.js"></script>
<style>
/* portrait 判断为竖屏 */
@media only screen and (orientation: portrait){
     #lab1 {display:none;}
} 
/* landscape 判断为横屏 */ 
@media only screen and (orientation: landscape){
     #lab1 {display: ;} 
}    
</style>
</head>
<body>
  <form name="form" id="form" action="trans" method="POST" target="iframe">
    <label id="lab1">请输入:</label>
    <input type="text" name="txt" id='txt' size="30" placeholder="请输入 a word">
    <input type="submit" name="eng_han" value="英译汉">
    <input type="button" name="btn1" id="btn1" value="前缀查询">
    <input type="button" name="btn2" id="btn2" value="TTS读音" onclick="tts2();">
  </form>
  <p></p>
<div style="float:left; width:100%;">
  <div id="result" style="float:left; width:80%; height:400; border:2px;">
    <iframe name="iframe" id="iframe" width="100%" height="400"> </iframe>
  </div>
  <div id="alist" style="float:right; width:20%; height:400; border:2px;">
  </div>
</div>
  
<script type="text/javascript">
    $(function(){
      $("#btn1").click(function(){
        $.getJSON("/prefix?txt="+$("#txt").val(), function(data){
          var items = [];
          $.each(data, function(i, item){
            if (i<=20){
              items[i] = '<a href="/trans?txt=' +item+ '" target="iframe">' +item+ "</a><br>";
            }
          });
          var a = items.join('\n');
          if (a) $('#alist').html(a);
        })
      })
    });

    // aardio TTS
    function tts() {
        var txt = document.getElementById('txt').value;
        if (txt.length >1) {
          (async ()=>{
              await aardio.speak(txt);
          })();
        }
    }

    // 屏幕双击取词,aardio TTS
    function tts2() {
        // 获取iframe里的选择内容
        var select = window.frames['iframe'].getSelection();
        var txt = select.toString();
        if (txt.length >1) { // alert(txt);
          var input = document.getElementById('txt');
          input.value = txt.trim();
          (async ()=>{
              await aardio.speak(txt);
          })();      
        } else {
          tts();
        }
    }

</script> 
</body>
</html>

驾驭Web界面开发:aardio实战指南 aardio是一种动态编程语言,同时也是一种混合语言,这意味着它能够操作静态类型,并且可以直接调用C语言、C++等静态语言的API接口函数,而不需要像VB那样先声明API。aardio支持多种API调用约定,如stdcall、cdecl、thiscall、fastcall以及regparm(n)等。 由于其独特的语言特性,aardio可以混合调用多种编程语言,包括但不限于VB、C#、Java、Python、JavaScript、Node.js、Flash ActionScript、PHP、VBScript、NewLISP、Delphi和Go语言。此外,aardio还能够直接嵌入汇编机器码,并且可以转换为普通的aardio函数。 aardio能够嵌入多种浏览器控件,如系统自带的IE控件、WebKit、Electron、CEF3、HTMLayout、Sciter等,甚至可以直接调用系统安装的Chrome、Chromium或Edge(Chromium)等浏览器编写软件界面。 立即下载

相关推荐

ml307 二次开发

中移物联网旗下4g模组官方网站官方教程id=514官方客户不知道啥时候上班 早上10点也说不在服务时间内 找不到官方的sdk下载路径。

myWorld001的博客 2879

aardio+ WebView2!JavaScript 快速开发独立 EXE 程序

Electron 不错,但也不是完美的。Electron 带来了很多优秀的桌面软件,但并不一定总是适合我们的需求。多个选择总是好事!▶我使用 Electron 遇到的一些麻烦1、Electron 太大了!2、每一个 Electron 写的软件都要重复地带一个 Electron …… 升级与分发都不方便。3、Electron 不方便嵌入其他窗口界面,与其他语言、技术融合不易。4、并不是所有桌面软件...

farway000的博客 6061

从“烧电路”到“软杀伤”:拆解高功率微波(HPM)让无人机失灵的三种物理效应

本文深度解析高功率微波(HPM)如何通过热效应、电磁效应和非线性效应三种物理机制使无人机失灵。从电子元件的热损伤到系统的电磁干扰,再到电路中的非线性破坏,HPM技术为反无人机系统提供了高效的非动能打击手段。文章还探讨了现代无人机的多层级防护策略与应对方案。

weixin_42531886的博客 253

aardio - 利用web.view2库编写多标签浏览器

利用web.view2库编写多标签浏览器,web.view2 为风行者封装,请下载最新版本使用。

光庆的学习笔记 2371

别再怕无霍尔BLDC了!手把手教你用反电动势过零检测搞定电机换向(附STM32代码片段)

本文详细介绍了无霍尔传感器BLDC电机的驱动方法,重点讲解反电动势过零检测技术及其在STM32上的实现。通过硬件电路设计、信号调理和软件算法优化,手把手教你完成电机换向控制,并提供实用的调试技巧和代码片段,帮助开发者快速掌握无霍尔BLDC驱动技术。

weixin_42522575的博客 492

华为OD机试真题 新系统 9月16号 【园区基站节能部署规划】

华为OD机试真题 新系统【园区基站节能部署规划】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【园区基站节能部署规划】多语言题解。

qq_45776114的博客 353

aardio的web.view导航菜单

【代码】aardio的web.view导航菜单。

weixin_43250893的博客 459

【Android面试八股文】Android Application为什么是单例?

这道题相对简单,就是考察大家是否了解application的创建流程。的实例,它用来存储和处理整个全局变量的一些事情,它同时还是一个。为空的时候,才会创建,从而保证了它是一个单例对象。一样有自己的生命周期,但是它并没有那么复杂,因为。对象的创建过程,找出它为什么是单例的原因。全局进行一些配置,比如配置插件。的时候才会创建,所以说可以在。凭什么是单例,我们查看下。启动的时候都会创建一个。是怎么一步步创建的。是一个单例,即每一个。

字节卷动 531

基于aardio web.view2库和python playwright包的内嵌浏览器自动化操作

通过cdp协议可以实现playwright操控webview。

小龙在线 1263

ICC2:mem出pin的Off Grid问题

这个命令本意是解决跨制成调用IP时在IP出pin位置加一定的routing blockage,限制绕线在一定范围内只能走直线出pin,用来解决off-grid问题也有很好的效果。在ICC2做先进工艺时会有off-grid的问题,off-grid可以理解为绕线没有在preferred方向track上。测试发现,2022版本以前的ICC2绕线容易有off-grid问题。主要在mem出pin的M2/M3层次上,切换版本绕线能很大程度上解决这个问题。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1630

【SMPL简介】SMPL: A Skinned Multi-Person Linear Model【源码复现】

SMPL是一种3D人体建模方法.在数字人或者人物角色三维重建领域有着广泛应用支持人体的各种形状及动作可以简单理解为通过训练获取的人物模型SMPL 输入是:姿态shape vectorβ\betaβ+ 影响动作Pose的参数θ\thetaθ输出是: 各种变化后vertex顶点的数据作者:Loper, Matthew and Mahmood, Naureen and Romero, Javier and Pons-Moll, Gerard and Black, Michael J.

zik的博客 3369

aardio - 【库】webPageOperation网页操作类

可操作web.form、web.view、web.view2等浏览器组件。→ aardio资源下载 → webPageOperation.rar。功能介绍:用来填表。

光庆的学习笔记 1471

华为OD机试新系统真题-谁没交卷(Java /Py/C++/Go/C/Js)

华为OD机试 新系统真题【谁没交卷】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【谁没交卷】多语言题解。

qq_45776114的博客 421

aardio动态获取网页数据,匹配数据

废话不多说,直接开始干活! 介绍匹配数据 .点 匹配任何单个字符 。* 匹配0或多个正好在它之前的那个字符。例如正则表达式。*意味着能够匹配任意数量的任何字符。? 匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的。 有点眼花 .*? .点 匹配任何单个字符。 * 匹配0或多个正好在它之前的那个字符。 ? 匹配0或1个正好在它之前的那个字符。 直接上代码 import console; import string; var str = //jQuery1982868({"Co

weixin_37254196的博客 2036

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

aardio的webview富文本实例

【代码】aardio的webview富文本实例。

weixin_43250893的博客 666

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

aardio 谷歌浏览器自动化 (七) 切换框架

aardio 谷歌浏览器自动化 (七) 切换框架 有时候需要自动化的元素在iframe框架中,需要将当前页面切换为框架,才可以查找到 比如:下面页面源代码中 h1在二层iframe中,我们要找出框架对象,然后使用switchFrame函数切换,一层层地切换框架,最终取出h1内容

m0_60842374的博客 1044

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

aardio网页组件:webPageOperation

webPageOperation是webview得初步封装,用来网页填表、操作网页。可操作web.form、web.view、web.view2等浏览器组件。

小龙在线 865

aardio - 利用sunny修改网页显示内容

1、利用sunny库,拦截住request和response后,修改其内容。 2、sunny.start() 中指定代理端口号。只拦截自身进程不用开全局代理。 3、为实现拦截自身进程数据,需要在web.view参数中使用代理,端口号要与sunny.start() 中指定的代理端口号一致: var wb = web.view(winform,,`--proxy-server="socks://127.0.0.1:2021"`);...

光庆的学习笔记 2867

aardio - 小窍门及注意事项收集贴

aardio - 小窍门及注意事项收集贴

光庆的学习笔记 3648

c# 通过webView2模拟登陆小红书网页版,解析无水印视频图片,以及解决X-s,X-t签名验证【2023年4月29日】

c# 通过webView2模拟登陆小红书网页版,解析无水印视频图片,以及解决X-s,X-t签名验证。日期:2023-4-29

byc6352的专栏 1万+

aardio - post、put提交数据简例

根据经验,使用账号密码登录,一般都使用post方式。 根据经验,post提交数据的重点,一般是解决以下三个方面的问题: 1、确定目标网址url 2、确定提交的数据格式及内容postdata,如果密码进行了加密,则找出算法。 3、确定来源网址referer...

光庆的学习笔记 2112

WebView2 使用及现状

前言 之前写过一篇文章来介绍WebView2:.Net桌面端开发使用WebView2,可以放弃CefSharp? 当时WebView2还是预览版,截止到今天,官方已经更新到1.0.705.50正式版本,对应的chrome 内核版本为:88.0.705.74,可以说更新的还挺频繁。刚好公司有个项目使用了CefSharp,就深入研究了一下WebView2的使用,这篇文章就来详细记录一下我的使用体验吧。 老规矩,写技术类文章不注明开发环境还不如不写。 环境 运行环境:.Net Framework 4.5.2 (由

chenlinhsfl的博客 5万+

放弃 Electron,拥抱 WebView2!JavaScript 快速开发独立 EXE 程序

Electron 带来了很多优秀的桌面软件,但并不一定总是适合我们的需求。多个选择总是好事!

过客2019 1711

aardio学习记录-2.使用json实现aardio与html界面的数据互动

新建了一个webkit(HTML5)项目,可以很方便的用HTML+JS+CSS制作程序UI,现在想实现的效果是,程序集成一个sqlite数据库文件,用aardio读出来,然后使用json格式把数据传给前端UI进行显示,这样搞起来:工程资源 资源文件里面包含了sqlite数据库一个 HTML中引入了bootstrap做前端框架,以及相关的fonts和js HTML下面的post文件夹(虚拟)中的dao

Dexter's Laboratory 6726

使用aardio抓取网页数据

项目说明:【抓取网页数据】 项目介绍:采集指定网页内容,通过模式匹配匹配到要采集的数据格式返回到数组中 项目步骤:1.创建匹配模式表2.请求网页连接3.过滤文本,并对数据去重处理4.显示结果 效果展示: 完整代码: import console; /* 项目说明:【抓取网页数据】 项目介绍: 采集指定网页内容,通过模式匹配匹配到要采集的数据格式返回到数组中 项目步骤: ...

weixin_34343000的博客 4325

Andorid开发中WebView网页加载控件使用

WebView控件在Android中主要是加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页,在我们做项目的时候是使用机率非常大的组件之一。当然使用前是要添加网络访问权限。     我们在作用WebView加载网页时,通常是在初始化WebView控件之后,直接使用loadUrl()方法,传入我们要加载的连接地址即可。比如:webView.loadUrl("http:/

true100的专栏 1242
上一篇: nodejs:express 调用本地 python程序
下一篇: aardio 调用 python pickle load 数据
belldeep
博客等级 码龄20年 1820粉丝 584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值