卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章1829本站已运行4109

用aardio开发一个剪切板词库收集器

最近用影子输入法习惯了,里面有个很好用的功能:复制过的文本会保存在一个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 [historywords](`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 [historywords] 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 = {
    [0x205/*_WM_RBUTTONUP*/  ] = 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();
    };
    [0x202/*_WM_LBUTTONUP*/] = function(wParam){ 
         
    };
    [0x203/*_WM_LBUTTONDBLCLK*/] = function(wParam){ 
            winform.show(true);
    };
    [0x404/*_PARAM_DESTROY*/] = function(wParam){ 
         
    };
    [0x405/*_PARAM_CLICKED*/] = function(wParam){ 
         
    };
}
return win.loopMessage();
 
卓越飞翔博客
上一篇: 使用python将图像复刻到excel表格
下一篇: windows自动安装 解压版mysql8的脚本

相关推荐

留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏