用aardio开发一个剪切板词库收集器
本帖最后由 傻瓜炒蛋 于 2024-1-12 21:54 编辑最近用影子输入法习惯了,里面有个很好用的功能:复制过的文本会保存在一个sqlite表里,可以直接在输入法里,选择这些复制过的文本。
后来一问,身边不少人有这些需求,但是又想换输入法。
然后我就想着自己能不能做一个。
趁着有空,就用aardio,先练习练习试着做一个。
大致效果如下,
带托盘,最小化后,隐藏在任务栏,只有一个图标
目前还没做好导出的功能,不过能进行简单的管理了
代码如下
import win.ui;
/*DSG{{*/
winform = win.form(text="剪切板词库收集器";right=656;bottom=432)
winform.add(
btnDelete={cls="button";text="删除选中";left=392;top=8;right=512;bottom=48;font=LOGFONT(h=-14);z=6};
choseid={cls="edit";left=349;top=18;right=372;bottom=42;edge=1;readonly=1;z=7};
expbutton={cls="button";text="导出词库";left=518;top=8;right=638;bottom=48;dr=1;dt=1;font=LOGFONT(h=-14);z=2};
listview={cls="listview";left=10;top=54;right=643;bottom=405;db=1;dl=1;dr=1;dt=1;edge=1;z=1};
numtxt={cls="static";left=103;top=21;right=133;bottom=37;color=8388608;dl=1;dt=1;font=LOGFONT(weight=700);transparent=1;z=5};
static={cls="static";text="今天新增";left=50;top=21;right=139;bottom=42;dl=1;dt=1;transparent=1;z=3};
static2={cls="static";text="个词语";left=136;top=21;right=225;bottom=42;dl=1;dt=1;transparent=1;z=4}
)
/*}}*/
import sqlite
import console;
import win.clip.viewer;
viewer = win.clip.viewer(winform);
var db = sqlite("/clipwords.db"); //创建数据库
if( not db.existsTable("historywords") ){
db.exec( "CREATE TABLE (`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `title`TEXT(400), year);"); //创建表本的数值
}
//剪切板动作开始
viewer.onDrawClipboard=function(){
var str = win.clip.read();
//winform.choseid.text = str;
console.clearScreen();
console.log(str);
//词语入库
var cmd = db.prepare("REPLACE INTO historywords VALUES (@id, @title,@year);" )
cmd.step(
title = str;
year = time.now();
)
load_db();
load_count();
}
//剪切板动作结束
import win.ui.grid;
var grid = win.ui.grid(winform.listview);//创建数据视图
grid.setReadonlyColumns(1);//可选设置禁止编辑的列,设为 -1 禁止编辑所有列
//grid.setColumns({"ID";"日期";"标题"}) //可选自定义显示列名
winform.listview.insertColumn("编号",40,,0/*_LVCFMT_LEFT*/)
winform.listview.insertColumn("标题",430,,0/*_LVCFMT_LEFT*/) //第二列开始可以使用_LVCFMT_CENTER居中
winform.listview.insertColumn("时间",250,,0/*_LVCFMT_LEFT*/) //第二列开始可以使用_LVCFMT_CENTER居中
//直接支持常用数据库的 getTable 函数返回的数据格式
function load_db(){
var dataTable = db.getTable("SELECT * FROM order by id desc");
grid.setTable( dataTable )
}
//加载数据表
load_db();
function load_count(){
var result= db.stepQuery("SELECT COUNT(id) as todaynum FROM historywords WHERE year >= date('now', 'localtime'); ")
if(result){
console.log(result.todaynum)
winform.numtxt.text = result.todaynum;
}
}
load_count();
//当前焦点项变更时触发此事件
winform.listview.onFocusedChanged = function(item,subItem,nmListView){
winform.choseid.text = winform.listview.getItemText(item,subItem)
}
winform.show();
import win.ui.menu;
import win.util.tray;
winform.btnDelete.oncommand = function(id,event){
db.exec("DELETE FROM ?? WHERE id=?;",{ "historywords",winform.choseid.text} );
load_db();
load_count();
winform.choseid.text = winform.choseid.text-1;
}
winform.onMinimize = function(lParam){
winform.tray = win.util.tray(winform);
winform.tray.tip = "剪切板词库";//设置鼠标提示
winform.tray.pop('隐藏在这里运行',"剪切板词库");
winform.show(false); //隐藏窗口
return true;//阻击默认消息传递,取消最小化过程
}
winform.onTrayMessage = {
= function(wParam){
//弹出托盘菜单以前,一定要前置主窗口中,避免不点击菜单不会消失,父窗口隐藏也要这样做
win.setForeground(winform.hwnd)
/*
下面创建托盘弹出菜单。
如果程序要开机启动到托盘,最好在这里创建菜单,在用户点击前不要创建菜单,
避免系统启动时 DPI 缩放前创建的菜单字体偏小(出现这情况的机率很小)。
如果不想重复创建菜单最好写到一个库里,然后在这里 import 即可避免上述问题。
*/
import win.ui.menu;
winform.popmenu = win.ui.popmenu(winform);//创建弹出菜单
winform.popmenu.add('&主窗口',function(id){
//在下面输入菜单响应代码
winform.show(true);
});
winform.popmenu.add();//分隔线
winform.popmenu.add('&退出',function(id){ winform.close() })
winform.popmenu.popup();
winform.popmenu.close();
};
= function(wParam){
};
= function(wParam){
winform.show(true);
};
= function(wParam){
};
= function(wParam){
};
}
return win.loopMessage();
支持支持 支持,感谢开源 谢谢分享,这个开发工具挺方便的 顶起来!百度输入法无法手机、电脑同步,想换了 你们的电脑有win11吗? win 11 现在支持剪切板有历史记录了 快捷键是win + v 感谢楼主分享,不错的思路 这个想法不错,感谢楼主分享 刚试了下,很实用。如果加上双击复制已保存的内容就更好了 Zercher 发表于 2024-1-13 01:10
你们的电脑有win11吗? win 11 现在支持剪切板有历史记录了 快捷键是win + v
可以保存的记录,数量太少了。我现在用的是DITTO这个。可以保存好多条记录。
页:
[1]
2