import win.ui; import win.ui.menu /*DSG{{*/ mainForm = win.form(text="软件管理";right=983;bottom=655) mainForm.add({ button={cls="button";text="搜索";left=208;top=8;right=264;bottom=40;dl=1;dt=1;z=3}; button2={cls="button";text="返回";left=272;top=8;right=328;bottom=40;dl=1;dt=1;z=4}; edit={cls="edit";left=8;top=8;right=200;bottom=40;border=1;dl=1;dt=1;z=1}; plus={cls="plus";left=8;top=48;right=976;bottom=648;db=1;dl=1;dr=1;dt=1;notify=1;z=2}; static={cls="static";text="可使用鼠标拖动排序";left=344;top=16;right=504;bottom=40;transparent=1;z=5} }) /*}}*/ mainForm.show(); ..io.createDir("/files"); import godking.paint import process import win.image import fsys.lnk import godking.message import console import godking.customPlus import fsys.dlg var itemModel = { { /* 矩形元素定义 */ type="rect", rectf={x=2;y=2;width=-2;height=-2}, /* 矩形绘制及鼠标定位区域。负数表示距离项目右边或底边的距离 */ /* 以下为可选项 */ id=1, name="矩形", click=true, /* 是否响应鼠标点击事件 */ check=true, /* 原素是否可选择。依赖name和click。鼠标点击元素改变元素选择状态 */ width=1, /* 边框宽度。为0则无边框 */ style=0, /* 线条类型,_gdipdashstyle开头的常量。当round不为0时,此值无效 */ round=3, /* 圆角半径。0为矩形,-1为椭圆,其他值(>0)为圆角矩形 */ cursor=32649, /* 鼠标指针,_IDC_ 开头的常量。 */ /* 边框颜色(六态) */ color=0xFFDDDDDD, /* 正常状态下,边框颜色 */ /* 填充颜色(六态) */ fillcolor=0xFFFFFFFF, /* 正常状态下,填充颜色 */ itemhoverfillcolor=0x7C98FB98, /* 鼠标划过项目时,填充颜色 */ }, { /* 文本元素定义 */ type="text", rectf={x=55;y=7;width=-5;height=-5}, /* 文本绘制及鼠标定位区域。负数表示距离项目右边的距离 */ name="filename", click=true, /* 是否响应鼠标点击事件 */ align=0, /* 文本水平对齐方式。0、左对齐 1、居中 2、右对齐 */ valign=1, /* 文本垂直对齐方式。0、顶对齐 1、居中 2、底对齐 */ ellipsion=true,/* 文本超出范围时,是否截短文本并在末尾添加省略号 */ cursor=32649, /* 鼠标指针,_IDC_ 开头的常量 */ text="", /* 正常状态下,文本 */ font={name="宋体",h=13,color=0xFFFF0000}, /* 正常状态下,字体 */ }, { /* godking.paint自绘元素定义 */ type="paint", /* 使用proc()函数进行绘制。proc函数的第1个参数为 godking.paint 对象 */ rectf={x=10;y=10;width=40;height=-10}, /* 鼠标定位区域,仅供鼠标事件使用,与元素绘制无关,可省略。负数表示距离项目右边或底边的距离 */ proc=function(paint,itemIndex,elemIndex,rectf,disabled,checked,hovered,itemSelected,itemHovered){ paint = toPaint(paint); /* 用于绑定godking.paint智能提示 */ if !itemIndex return ; var file = owner.itemList[itemIndex].file; var ico; if !file { if owner.itemList[itemIndex].filename="添加文件" { ico = "\res\protect, insurance, medical, protected, shield .png" } else { return ; } } else { if ..fsys.isDir(file) { ico = "\res\(26).png"; } else { var icofile = ..process.findExe(file); ico = ..win.image.extractIcon(icofile); } } var bmp = ..gdip.bitmap(ico,1); paint.drawImageF(rectf /*绘制范围RECTF*/,bmp/*图片*/,/*透明度或图片属性*/,true/*保持比例*/); if ..string.startsWith(file,"\files\"){ rectf.x += 20; rectf.y -= 7; rectf.height = 30; rectf.width = 30; paint.drawImageF(rectf /*绘制范围RECTF*/,"\res\location, pin, map, hospital, navigation .png"/*图片*/,/*透明度或图片属性*/,true/*保持比例*/); } bmp.dispose(); }; name="paint自绘", click=true, /* 是否响应鼠标点击事件 */ cursor=32649, /* 鼠标指针,_IDC_ 开头的常量。 */ } } var list; try{ if ..io.exist("\itemlist.dat"){ var s = ..string.load("\itemlist.dat"); if #s { list = eval(s); } } } if !#list { list = { {filename="添加文件"} } } elseif list[#list]["filename"]!=="添加文件"{ ..table.push(list,{filename="添加文件"}) } var cst = godking.customPlus(mainForm.plus,itemModel,itemList,{ itemWidth=150, /*项目最小宽度,为0时根据colnum自动计算,所以不能与colnum同时=0*/ itemHeight=70, /*项目最小高度,为0时根据rownum自动计算,所以不能与rownum同时=0*/ autoSizeWidth=true, /*为true则自动将项目总宽度拉伸填满plus宽度,每个项目宽度不小于itemWidth*/ autoSizeHeight=false, /*为true则自动将项目总高度拉伸填满plus高度,每个项目高度不小于itemHeight*/ rownum=0, /*项目行数,为0时根据itemHeight自动计算,所以不能与itemHeight同时=0*/ colnum=0, /*项目列数,为0时根据itemWidth自动计算,所以不能与itemWidth同时=0*/ padLeft=5, /*plus左边空白距离*/ padTop=5, /*plus顶边空白距离*/ padRight=5, /*plus右边空白距离*/ padBottom=5, /*plus底边空白距离*/ autoFit=false, /*是否自动调整plus组件宽度或高度(其中之一),保证能刚好显示全部行或列*/ /*当 itemHeight>0 且 colnum>0 且 rownum=0 时,自动调整plus高度,以能显示全部行*/ /*当 itemWidth>0 且 rownum>0 且 colnum=0 时,自动调整plus宽度,以能显示全部列*/ vertical=false, /*是否将项目设置为竖向排列,行滚动方向设置为横向*/ bkcolor=0xFFFFFFFF, /*背景颜色*/ bkimg=null, /*背景图像*/ bkimgmode=0, /*背景图平铺模式。0:拉伸填满;1:左上角;2:居中*/ singleCheck=0,/*元素check单选模式。0:多选;1:每个项目内单选;2:整个列表单选*/ dpi=0; /*强制指定使用的dpi,为0则使用当前系统dpi*/ }) cst.setItemList(list); var oldlist; var dragindex; var save = function(){ ..string.save("\itemlist.dat", ..table.tostring(cst.itemList)) } var saveoldlist = function(){ if oldlist ..string.save("\itemlist.dat", ..table.tostring(oldlist)) } var menu = win.ui.popmenu(mainForm); var menuopindex; var getfile = function(file){ // 获取文件相对路径 var infos = ..io.splitpath(file); var dir = ..string.lower(infos.dir) var fixdir = ..string.lower(..io.fullpath("\files\")) if dir===fixdir return "\files\"++infos.file; else return file; } var getfilepath = function(file){ //获取文件绝对路径 if ..string.startsWith(file,"\files\",true) { return ..io.fullpath(file),1; //固定位置 } else { return ..io.fullpath(file),0; //原始位置 } } menu.add("删除",function(){ if menuopindex and cst.itemList[menuopindex].file and cst.itemList[menuopindex].filename!=="添加文件" { if mainForm.msgAsk("确定要删除第【"++menuopindex++"】项【"++cst.itemList[menuopindex].filename++"】吗?") { var thisfile = cst.itemList[menuopindex].file; var file,fixed = getfilepath(thisfile); if ..io.exist(file) and fixed { if mainForm.msgAsk("是否同时删除固定文件:"++file ++"?") { ..fsys.delete(file); } } cst.delItem(menuopindex); cst.update(); if oldlist { for(i=#oldlist;1;-1){ if oldlist[i].file===thisfile { ..table.remove(oldlist,i); } } saveoldlist(); } else { save(); } } } menuopindex = null; }) menu.add("固定",function(){ if menuopindex and cst.itemList[menuopindex].file and cst.itemList[menuopindex].filename!=="添加文件" { var thisfile = cst.itemList[menuopindex].file; var file,fixed = getfilepath(thisfile); if fixed { menuopindex = null; return mainForm.msgInfo("此文件已经被固定!"); } if mainForm.msgAsk("确定要固定第【"++menuopindex++"】项【"++cst.itemList[menuopindex].filename++"】吗?") { var newfile = ..io.joinpath(..io.fullpath("\files\"),..io.splitpath(file).file); if ..fsys.copy(file,newfile) { var newpath = getfile(newfile); cst.itemList[menuopindex].file = newpath; cst.update(); if oldlist { for(i=#oldlist;1;-1){ if oldlist[i].file === thisfile { oldlist[i].file = newpath; } } saveoldlist(); } else { save(); } mainForm.msgOk("已成功固定!") } else { mainForm.msgErr("固定失败!") } } } menuopindex = null; }) menu.add("重命名",function(){ if menuopindex and cst.itemList[menuopindex].file and cst.itemList[menuopindex].filename!=="添加文件" { var thisfile = cst.itemList[menuopindex].file; var file = io.fullpath(thisfile); var newname = mainForm.msgInput("请输入文件新名称(不包含扩展名)") if #newname { var infos = ..io.splitpath(file) var newfile = ..io.joinpath(infos.dir,newname++infos.ext) if fsys.rename(file,newfile){ newfile = getfile(newfile); cst.itemList[menuopindex].file = newfile; cst.itemList[menuopindex].filename = newname++infos.ext; cst.update(); if oldlist { for(i=#oldlist;1;-1){ if oldlist[i].file === thisfile { oldlist[i].file = newfile; oldlist[i].filename = newname++infos.ext; } } saveoldlist(); } else { save(); } mainForm.msgOk("已成功重命名!") } else { mainForm.msgErr("重命名失败!") } } } menuopindex = null; }) cst.onRightClick = function(itemIndex/*项目索引*/,elemIndex/*元素索引*/,elemID/*元素id*/,elemName/*元素name*/,pageIndex/*当前页项目索引*/,x/*鼠标X坐标*/,y/*鼠标Y坐标*/,disabled/*项目是否禁用*/,itemRect/*项目区域*/,elemRect/*元素区域*/){ if cst.itemList[itemIndex].file { menuopindex = itemIndex menu.popup() } } mainForm.plus.onDropFiles = function(files){ for(i=1;#files;1){ var file = getfile(files[i]); if (..string.endsWith(file,".lnk",true)) { file = ..fsys.lnk.getTarget(file); } cst.insertItem({ file = file; filename = ..io.splitpath(file).file; },-1) } cst.update(); save(); } cst.onClick = function(itemIndex/*项目索引*/,elemIndex/*元素索引*/,elemID/*元素id*/,elemName/*元素name*/,pageIndex/*当前页项目索引*/,x/*鼠标X坐标*/,y/*鼠标Y坐标*/,disabled/*项目是否禁用*/,itemRect/*项目区域*/,elemRect/*元素区域*/){ if !itemIndex or !dragindex or dragindex!==cst.curItem return ; if cst.itemList[itemIndex].file { return process.execute(cst.itemList[itemIndex].file); } elseif cst.itemList[itemIndex].filename==="添加文件" { var t = ..fsys.dlg.open("所有文件|*.*","选择文件",,mainForm.hwnd,) if t { mainForm.plus.onDropFiles({t}) } } } mainForm.adjust = function( cx,cy,wParam ) { cst.resetLayout( ) }; mainForm.button.oncommand = function(id,event){ if #mainForm.edit.text { var s = "@"++mainForm.edit.text; oldlist := cst.itemList; var t = {}; for(i=1;#oldlist;1){ if ..string.find(oldlist[i].filename,s) { ..table.push(t,oldlist[i]); } } cst.setItemList(t); } else { if oldlist { cst.setItemList(oldlist); oldlist = null; } } } mainForm.plus.onMouseDown = function(wParam,lParam){ dragindex = cst.curItem; } mainForm.plus.onMouseUp = function(wParam,lParam){ if dragindex and cst.curItem and dragindex!==cst.curItem { // 拖动 if oldlist { // 搜索结果不能拖动 dragindex = null; // 防止触发onClick return ; } if cst.curItem===cst.itemCount or dragindex===cst.itemCount return ; var t = cst.delItem(dragindex); cst.insertItem(t,cst.curItem); cst.update() dragindex = null; // 防止触发onClick save(); } } mainForm.button2.oncommand = function(id,event){ mainForm.edit.text="" mainForm.button.oncommand() } cst.update() return win.loopMessage();
最新回复 (0)