虚表 —— 表头多按钮示例

光庆 4小时前 26

import win.ui;
import godking.vlistEx;
/*DSG{{*/
winform = win.form(text="aardio form";right=501;bottom=369;bgcolor=0xFFFFFF;border="dialog frame";max=false)
winform.add(
vlistEx={cls="vlistEx";text="自定义控件";left=8;top=6;right=493;bottom=361;border=1;z=1}
)
/*}}*/

//创建随机表
var list = {}
for(i=1;100;1){
	var name = string.random(1,"周吴郑王赵钱孙李")+string.random(2,"安宇文佳乐宁泽晨希睿云天凡一梓辰奕思景言禾清恒舒予亦然沐初诺")
    ..table.push(list,{name,string.random("男","女"),math.random(1,100)});
}

//给虚表赋值
winform.vlistEx.setTable(list, {"", "性别 ", "年龄 "}, {-1, 80, 135}, {0, 1, 1});
winform.vlistEx.checkBox.show = true;

//设置表头第一列的附加文本
winform.vlistEx.addFont("font1"/*字体名称*/,::LOGFONT(name="宋体";h=8))
winform.vlistEx.setHeaderAdditionalText(1/*列号或数组*/,`
<img name='[@ownerDraw]',x=2,y=11,w=14,h=14,param=1>
<font name='font1',text='全选',x=18,y=10,color=0xFF0000,size=14>
<img name='[@ownerDraw]',x=50,y=11,w=14,h=14,param=2>
<font name='font1',text='男',x=68,y=10,color=0xFF0000,size=14>
<img name='[@ownerDraw]',x=86,y=11,w=14,h=14,param=3>
<font name='font1',text='女',x=104,y=10,color=0xFF0000,size=14>
<img name='[@ownerDraw]',x=130,y=11,w=14,h=14,param=4>
<font name='font1',text='成年',x=148,y=10,color=0xFF0000,size=14>
<img name='[@ownerDraw]',x=180,y=11,w=14,h=14,param=5>
<font name='font1',text='未成年',x=198,y=10,color=0xFF0000,size=14>
`);

//设置表头第一列的按钮区域
winform.vlistEx.setHeaderButtonRects(1,::RECTF(2,11,50,14),::RECTF(50,11,40,14),::RECTF(86,11,40,14),::RECTF(130,11,50,14),::RECTF(180,11,50,14));

//处理表头第一列的按钮区域的点击事件,实现全选、全不选、其他按钮的点击功能
var checkedall = false;
winform.vlistEx.onHeaderClick = function(row,col,mergeCol,x,y,rect,buttonIndex){
    if col===1 and buttonIndex {
    	winform.vlistEx.setRedraw(false);
	   	if buttonIndex==1 {
    	    checkedall = checkedall!==true;
    		winform.vlistEx.setChecked( /*行号*/,checkedall/*勾选状态*/);
    	} else {
    		checkedall = buttonIndex;
			if buttonIndex==2 {
    	    	for(i=1,winform.vlistEx.count,1){
    	        	winform.vlistEx.setChecked(i,winform.vlistEx.getCellData(i,2)==="男");
    	    	}
    		}
    		elseif buttonIndex==3 {
    	    	for(i=1,winform.vlistEx.count,1){
    	        	winform.vlistEx.setChecked(i,winform.vlistEx.getCellData(i,2)==="女");
    	    	}
    		}
    		elseif buttonIndex==4 {
    	    	for(i=1,winform.vlistEx.count,1){
    	        	winform.vlistEx.setChecked(i,winform.vlistEx.getCellData(i,3)>=18);
    	    	}
    		}    	
    		elseif buttonIndex==5 {
    	    	for(i=1,winform.vlistEx.count,1){
    	        	winform.vlistEx.setChecked(i,winform.vlistEx.getCellData(i,3)<18);
    	    	}
    		}
    	}
   	    winform.vlistEx.setRedraw(true);
    }
}

//表头选择框自绘
winform.vlistEx.ownerDraw = function (row,col,hdc,x,y,w,h,param,...){
	if param==1 {
		winform.vlistEx.drawCheckBox(hdc,math.floor(x),math.floor(y),w/*大小*/,checkedall===true/*是否选中*/,/*正常颜色*/,/*选中颜色*/,/*对号颜色*/,/*是否单选*/);
	} else {
		winform.vlistEx.drawCheckBox(hdc,math.floor(x),math.floor(y),w/*大小*/,checkedall===param/*是否选中*/,/*正常颜色*/,/*选中颜色*/,/*对号颜色*/,true/*是否单选*/);
	}
}

//处理表头排序事件
winform.vlistEx.onSortColumn = {2,3,function(col,desc,row,mergeCol){ //只允许1、3列排序,禁止第2列排序
    owner.sort(col/*排序列*/,desc/*是否逆序*/,/*数据转换0无1时间2数值3文本*/,true/*是否使用微软排序法*/,desc/*null值排序位置false靠前true靠后*/);
}}

winform.show();
return win.loopMessage();


最新回复 (1)
  • Mr_MAO 4小时前
    0 引用 2
    👍👍👍
返回