刚学 aardio 的时候做的一个便签工具目前还是个半成品,如果有时间的话再完善一下。
效果图:
——业余编程爱好者,代码写的比较烂。
一、便签窗体设计
- 窗口置顶
//标签置顶(默认置于桌面)
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)
- 设置字体颜色
//设置字体颜色
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
}
}
- 字体显示为粗体
//粗体
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
}
}
- 便签自动保存
//新建保存
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()
}
}
- 打开便签汇总窗口(模态窗口)
winform.showRecordsForm.oncommand = function(id,event){
var frmChild = winform.loadForm("\dlg\records.aardio");
frmChild = frmChild.doModal()
}
二、便签汇总窗体设计
- 循环创建便签标题、内容控件
//便签标题-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++;
}
}
- 查询本地便签文件
var files = table.array();
var num = 0;
fsys.enum( "/SimpleNotes_Records", "*.rtf",
function(dir,filename,fullpath,findData){
if(filename){
table.push(files, fullpath)
num++
}
}
);
- 将本地便签内容写入控件
//设置 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)])
}
}
- 关闭前保存便签
//关闭前保存
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()
}
}
}
- 设置滚动条控件事件(自己添加的滚动条默认不处理鼠标事件?所以手动处理一下)
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 以启动更新
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于