aardio- 简单便签

刚学 aardio 的时候做的一个便签工具目前还是个半成品,如果有时间的话再完善一下。
效果图:

imageeadc072b2d514037a357c669b400debe.png

——业余编程爱好者,代码写的比较烂。

一、便签窗体设计

  1. 窗口置顶
//标签置顶(默认置于桌面)
winform.setTopmostTool.oncommand = function( id,event ){
	if(owner.text = '\uF0C3'){
		owner.text = '\uF0C0'
		win.setTopmost(winform.hwnd,true)
	}
	else {
		owner.text = '\uF0C3'
		win.setTopmost(winform.hwnd,false)
	}
}

//置顶补充写法
var hwnd = winex.findEx(null,,"SysListView\x+","FolderView")
//var hwnd = win.getDesktop()	//WIN10概率性无法置顶,可能我用的有问题
win.setOwner(winform.hwnd,hwnd)
  1. 设置字体颜色
//设置字体颜色
var flag = true;
winform.fontColorTool.oncommand = function(id,event){
	var textDoc = winform.richedit.getTextObjectModel()
	//textDoc.Selection.Font.Name = "隶书";
	//textDoc.Selection.Font.Size = 18;
	if(flag == true){
		textDoc.Selection.Font.ForeColor = gdi.RGB(255,0,0);
		flag = false;
	}
	else {
		textDoc.Selection.Font.ForeColor = gdi.RGB(0x000000);
		flag = true
	}
}
  1. 字体显示为粗体
//粗体
winform.fontBoldTool.oncommand = function(id,event){
	var textDoc = winform.richedit.getTextObjectModel()
	if(textDoc.Selection.Font.Bold == 0){
		textDoc.Selection.Font.Bold = textDoc.tomTrue 
	}
	else {
		textDoc.Selection.Font.Bold = textDoc.tomFalse
	}
}
  1. 便签自动保存
//新建保存
winform.richedit.onChange = function(){ 
	if(owner.onModified)owner.onModified(true);
	if(temp == true){
		tm = time.now();
		save_name_str  = tostring(tm,"%Y年%m月%d日 %H时%M分%S秒","chs")
		temp = false
	}
	return;
}


//销毁前保存
winform.onDestroy = function(){
	if(temp == false){
    	var file = io.open(path + save_name_str + ".rtf","w+b")
    	winform.richedit.streamOut( ,function(format,buf,len){
        	return 0,file.writeBuffer(buf,len) : 0;
    	} )
    	file.close()
	}
}

//关机前保存
winform.beforeSystemEndSesssion = function(){
	if(temp == false){
    	var file = io.open(path + save_name_str + ".rtf","w+b")
    	winform.richedit.streamOut( ,function(format,buf,len){
        	return 0,file.writeBuffer(buf,len) : 0;
    	} )
    	file.close()
	}
}

//关闭前保存
winform.onClose = function(hwnd,message,wParam,lParam){
	if(temp == false){
    	var file = io.open(path + save_name_str + ".rtf","w+b")
    	winform.richedit.streamOut( ,function(format,buf,len){
        	return 0,file.writeBuffer(buf,len) : 0;
    	} )
    	file.close()
	}
}
  1. 打开便签汇总窗口(模态窗口)
winform.showRecordsForm.oncommand = function(id,event){
	var frmChild = winform.loadForm("\dlg\records.aardio");
	frmChild = frmChild.doModal()
}

二、便签汇总窗体设计

  1. 循环创建便签标题、内容控件
//便签标题-static控件
var title={
cls="static";text="";left=22;top=6;right=371;bottom=26;color=0x0804CF;font=LOGFONT(h=-14;italic=255;name='微软雅黑';weight=700);transparent=1;z=5;
}

//便签内容-richedit控件
var content={
cls="richedit";left=22;top=25;right=371;bottom=317;autohscroll=false;bgcolor=8187328;font=LOGFONT(h=-19;name='微软雅黑');multiline=1;readonly=0;vscroll=1;wrap=1;z=1;
}

//循环创建控件
var max = 0;
var flag = 0;
for(i=1;num;1){
	for(n=1;2;1){
		if(flag == num){
			break;
		}
	//便签标题
	var staticname = "title"++(i-1)*2+n;
    	temp = table.clone(title);
    	temp.left= (n-1)*(371+22)+22; 
    	temp.top = (i-1)*(25+317)+5;
    	temp.right=(n-1)*(371+22)+371;
    	temp.bottom=(i-1)*(25+317)+317;
    	max = temp.bottom+6;
  
    	temp.z=(i-1)*2+n;
    	temp.text=staticname;
    	winform.custom.addCtrl([staticname]=temp);

	//便签内容
    	var plusname ="edit"++(i-1)*2+n;
    	temp2 = table.clone(content);
    	temp2.left= (n-1)*(371+22)+22; 
    	temp2.top = (i-1)*(25+317)+25;
    	temp2.right=(n-1)*(371+22)+371;
    	temp2.bottom=(i-1)*(25+317)+317;
    	max = temp2.bottom+25;
  
    	temp2.z=(i-1)*2+n;
    	winform.custom.addCtrl([plusname]=temp2;);
    	flag++;
	}
}
  1. 查询本地便签文件
var files = table.array();
var num = 0; 
fsys.enum( "/SimpleNotes_Records", "*.rtf",
	function(dir,filename,fullpath,findData){ 
		if(filename){ 
           	table.push(files, fullpath)
           	num++
		}
	}
);
  1. 将本地便签内容写入控件
//设置 static text
for(name,ctrl in winform.custom.eachControl("static") ){
	for m in string.gmatch( name,"<\d+>|<:>") {
		ctrl.text = io.splitpath(files[tonumber(m)]).file
	}
}

//设置 richedit text
for(name,ctrl in winform.custom.eachControl("richedit") ){
	for m in string.gmatch( name,"<\d+>|<:>") {
		ctrl.setPadding(20,20,20,20);
		ctrl.streamIn(,files[tonumber(m)])
	}
}
  1. 关闭前保存便签
//关闭前保存
winform.onClose = function(hwnd,message,wParam,lParam){

	for(name,ctrl in winform.custom.eachControl("richedit") ){
		for m in string.gmatch( name,"<\d+>|<:>") {
			var file = io.open(files[tonumber(m)],"w+b")
    		winform.custom["edit"+m].streamOut( ,function(format,buf,len){
        		return 0,file.writeBuffer(buf,len) : 0;
    		} )
    		file.close()
		}
	}
}
  1. 设置滚动条控件事件(自己添加的滚动条默认不处理鼠标事件?所以手动处理一下)
import win.ui.scrollbar;
var scrollbar = win.ui.scrollbar(winform.custom.hwnd,true);
scrollbar.setRange(0,max-winform.custom.height)

winform.custom.wndproc = {
    [0x115/*_WM_VSCROLL*/] = function(hwnd,message,wParam,lParam){ 
   
        var event,pos = ::LOWORD (wParam),::HIWORD(wParam);
  
		var min,max,page = scrollbar.getRange();
       	select(event) {
    		case 8/*_SB_ENDSCROLL*/ {
        		return;
    		} 
    		case 0/*_SB_LINEUP*/  {
        		pos = scrollbar.pos - 1
    		}
    		case 1/*_SB_LINEDOWN*/{
        		pos = scrollbar.pos + 1
    		}
    		case 0x2/*_SB_PAGEUP*/{
        		pos = scrollbar.pos - page;
    		}
    		case 0x3/*_SB_PAGEDOWN*/{
        		pos = scrollbar.pos + page;
    		}
		}
 	/*光庆
        ::User32.ScrollWindow(winform.custom.hwnd,0, l,null,null); 
        */
        //winform.tips.text = pos
        ::User32.ScrollWindow(winform.custom.hwnd,0, scrollbar.pos - pos,null,null); 
        scrollbar.pos = pos;
    } 
    /**
    [0x20A/*_WM_MOUSEWHEEL*/] = function(hwnd,message,wParam,lParam){ 
  
        select( message ) {
                case 0x20A/*_WM_MOUSEWHEEL*/ {
   
                        var delta =  raw.convert( { INT wParam=wParam } ,{ word delta; word x }  ).x
            
                        winform.tips.text = pos
                        ::User32.ScrollWindow(winform.custom.hwnd,0, pos,null,null); 
                }
        }
	}
    **/
}

winform.custom.adjust = function( cx,cy,wParam ) {	 
	var _,yScale = winform.custom.getScale();
	scrollbar.setRange(1,max *yScale ,16); 
	::User32.ScrollWindow(winform.custom.hwnd,0, -scrollbar.pos ,null,null); 
};

/**光庆
winform.custom.wndproc = function(hwnd,message,wParam,lParam){ 
	if message = 5/*_WM_SIZE*/{
		scrollbar.setRange(1,max-owner.height)
	}
}
**/

三、软件自动更新

参考 aardio 的更新代码,搬运过来参考一下:

import fsys.update.simpleMain;
if( fsys.update.simpleMain(
	"SimpleNotes",
	"http://begin2019.com:666/simplenote/version.txt", /*网址也可以改用目录名,并使用服务端代码动态返回version.txt*/
	"/download/update-files", /*绿色软件建议改为 io.appData("/软件厂商名/软件名字/update-files") */
	function(version,description,status){
		/*
		version参数包含最新版本号,
		description包含最新版本更新说明,
		status参数值见下面的列表:
			"ready": 下载已完成并准备更新,
			"updated": 已更新到新版本并准备启动新版
			"complete": 当前已更新并已启动新版本主程序,所有操作已完成
			"latest": 已经是最新版不需要更新
			"failed": 出错了,description参数为错误信息

		这个回调函数不是必须的,
		在此检测更新代码之前或之后都可以在界面线程调用
		fsys.update.simpleMain.onStatusChanged 订阅更新状态变更信息。
		该认阅回调函数的参数与上面的回调参数相同。
		*/
		var update_info = "检测到新版本!
		------------------------------
		版本号:" + version + "
		更新描述:" + description + "
		状态:" + status + "
		——再次点击更新或重启应用,将启用新版。
		"
		if(status == "ready"){
			winform.msgOk(update_info)
		}
		else {

		}
		winform.msgOk("fdfdf")
	} )){

	return 0; //必须退出 main.aardio 以启动更新
}

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...