虚表 —— 选择框的使用方法

光庆 19小时前 159

为确保以下代码使用正常,请升级虚表库至最新版 v20.3

import win.ui;
import godking.vlistEx;
/*DSG{{*/
mainForm = win.form(text="vlistEx - 选择框演示";right=1034;bottom=569)
mainForm.add({
checkbox={cls="checkbox";text="是否单选";left=8;top=536;right=104;bottom=560;z=2};
vlist={cls="vlistEx";left=10;top=10;right=1025;bottom=520;db=1;dl=1;dr=1;dt=1;edge=1;transparent=1;z=1}
})
/*}}*/

// 填充虚表数据
var t = { fields={"序号","多列关联单选1","多列关联单选2","选择框","自绘选择框","图片选择框","文本选择框","三态选择框","多态自处理","OwnerDrawCustom"} };
for(i=1;20;1){
    var tt={};
    tt["序号"]="[@rowindex]";
    tt["多列关联单选1"]=math.random(0,1);
    tt["多列关联单选2"]=1-tt["多列关联单选1"];
    tt["选择框"]=math.random(0,1);
    tt["图片选择框"]=math.random(0,1);
    tt["文本选择框"]=math.random(0,1);
    tt["三态选择框"]=math.random(0,2);
    tt["多态自处理"]=math.random(0,2);
    tt["OwnerDrawCustom"]=math.random(0,2);
	//创建第5列 “三选一” 选择框数据,使用ownerDraw自绘函数,绘制选择框。
    var mm = {"false","false","false"};
    mm[..math.random(1,3)]="true";
    tt["自绘选择框"]="<img name='[@ownerDraw]',w=14,h=14,param={"+
                    mm[1]+",0xFFee0000,0xFFFFFF00}> 群众 <img name='[@ownerDraw]',w=14,h=14,param={"+
                    mm[2]+",0xFF00bb00}> 团员 <img name='[@ownerDraw]',w=14,h=14,param={"+
                    mm[3]+",0xFF0000ee}> 党员";
    ..table.push(t,tt);
}
mainForm.vlist.setTable(t,{"<img name='[@ownerDraw]',w=14,h=14> 序号","多列关联单选1","多列关联单选2","选择框","自绘选择框(仅显示,不可选)","图片选择框","带文本选择框","三态选择框","多态自处理","OwnerDrawCustom(可选择)"},{60,90,90,50,180,80,90,80,80,170},0x1);
mainForm.vlist.onResizeCol = {false,10}; 

//启用第一列选择框(虚表默认选择框)
mainForm.vlist.checkBox.show = true;
//修改默认选择框颜色
mainForm.vlist.checkBox.setColor( 0xFF32CD32 /*正常状态颜色值*/, 0xFFC71585/*选中状态颜色值*/, /*对号颜色值*/);

// 设置 2、3、4、7 列为 _vlistEx_ColType_CheckBox 类型,自动绘制选择框。
mainForm.vlist.setColumnType(2/*列号*/,8/*_vlistEx_ColType_CheckBox*/,14/*大小*/,0xFF3762DD/*ARGB颜色*/,""/*选中文本*/,""/*未选中文本*/,true/*是否单选*/,{2,3}/*单选关联列*/,false/*是否逻辑值*/ );
mainForm.vlist.setColumnType(3/*列号*/,8/*_vlistEx_ColType_CheckBox*/,14/*大小*/,0xFF3762DD/*ARGB颜色*/,""/*选中文本*/,""/*未选中文本*/,true/*是否单选*/,{2,3}/*单选关联列*/,false/*是否逻辑值*/ );
mainForm.vlist.setColumnType(4/*列号*/,8/*_vlistEx_ColType_CheckBox*/,14/*大小*/,0xFF3762DD/*ARGB颜色*/,""/*选中文本*/,""/*未选中文本*/,false/*是否单选*/,{}/*单选关联列*/,false/*是否逻辑值*/ );
mainForm.vlist.setColumnType(7/*列号*/,8/*_vlistEx_ColType_CheckBox*/,14/*大小*/,0xFF3762DD/*ARGB颜色*/,"男"/*选中文本*/,"女"/*未选中文本*/,false/*是否单选*/,{}/*单选关联列*/,false/*是否逻辑值*/ );

// 设置 6、8 列为_vlistEx_ColType_Switch 类型,使用选择框图片。
mainForm.vlist.setColumnType(6/*列号*/,4/*_vlistEx_ColType_Switch*/,true/*点击切换*/,0/*0居中1缩放2填满*/,"DefaultUncheckedImg","DefaultCheckedImg");
mainForm.vlist.setColumnType(8/*列号*/,4/*_vlistEx_ColType_Switch*/,true/*点击切换*/,0/*0居中1缩放2填满*/,"~\lib\godking\vlistEx\.res\unchecked.png","~\lib\godking\vlistEx\.res\checkedhalf.png","~\lib\godking\vlistEx\.res\checked.png");

// 点击表头修改表头选择框状态(针对第1列)
var checkedall = false ;
mainForm.vlist.onHeaderClick = function(row,col,mergeCol,x,y,rect,buttonIndex){
    if col===1 { // 点击第一列
        if owner.singleCheckedMode {
            mainForm.vlist.setColumnText(1,"序号");
        } else {
            checkedall = !checkedall;
            var text = checkedall?"<img name='[@ownerDraw]',w=14,h=14,param={true}> 序号":"<img name='[@ownerDraw]',w=14,h=14,param={false}> 序号"
            mainForm.vlist.setChecked(,checkedall/*勾选状态*/);
            mainForm.vlist.setColumnText(1,text);
        }
        mainForm.vlist.redraw(true);
    }	
}

// 使用ownerDraw自绘函数,绘制选择框(针对第5列)
mainForm.vlist.ownerDraw = function (row,col,hdc,x,y,w,h,param){
       owner.drawCheckbox(hdc,x,y,w,param[[1]],param[[2]],param[[2]],param[[3]],owner.singleCheckedMode);
}

// 切换首列和自绘模式的 [单选、多选] 设置
mainForm.checkbox.oncommand = function(id,event){
    mainForm.vlist.singleCheckedMode = owner.checked;
    mainForm.vlist.onHeaderClick(,1); //模拟点击表头第一列,刷新表格
}

// 定义自绘事件函数(针对第9列)
mainForm.vlist.onDrawCellContent = function(row,col,hdc,rect,bkcolor,text){
	if col===9 {
		if text==="1" return false,,"<img name=`~\lib\godking\vlistEx\.res\checkedhalf.png`,w=14,h=14> 团员"; 
		if text==="2" return false,,"<img name=`~\lib\godking\vlistEx\.res\checked.png`,w=14,h=14> 党员"; 
		return false,,"<img name=`~\lib\godking\vlistEx\.res\unchecked.png`,w=14,h=14> 群众"; 
	}	
}

// 定义OwnerDrawCustom(第10列)
var itemModel = {
    {  	type="img",    /* 定义图像元素,坐标值使用该元素在单元格内的相对坐标值,负数表示距离单元格右边或底边的距离,注意区分rectf与posf */
        rectf={x=11;y=1;width=14;height=-1}, /* 图像显示区域,同时也是鼠标事件区域 */
        name="群众",  /* 元素命名 */
        hover=true,  /* 是否启用鼠标滑过该元素状态,并将rectf设为按钮点击区域 */
        trans=1,      /* 透明度。0(完全透明)到 1(完全不透明)之间的数值。不设置则不透明 */
        scale=0,      /* 缩放方式 0:原尺寸居中;1:按比例填满;2:拉伸填满;3:放大或缩小到合适 */
        round=0,      /* 圆角半径。0为矩形,-1为椭圆,其他值(>0)为圆角矩形 */
    },
    {   type="text",    /* 定义文本元素,坐标值使用该元素在单元格内的相对坐标值,负数表示距离单元格右边或底边的距离 */
        rectf={x=26;y=4;width=50;height=-1}, /* 文本绘制(显示)区域,同时也是鼠标事件区域 */
        text="群众",     /* 正常状态下,文本 */
        font={name="宋体",h=13,color=0xFFFF0000}, /* 正常状态下,字体 */
    }
    {  type="img",    /* 定义图像元素,坐标值使用该元素在单元格内的相对坐标值,负数表示距离单元格右边或底边的距离,注意区分rectf与posf */
        rectf={x=61;y=1;width=14;height=-1}, /* 图像显示区域,同时也是鼠标事件区域 */
        name="团员",  /* 元素命名 */
        hover=true,  /* 是否启用鼠标滑过该元素状态,并将rectf设为按钮点击区域 */
        trans=1,      /* 透明度。0(完全透明)到 1(完全不透明)之间的数值。不设置则不透明 */
        scale=0,      /* 缩放方式 0:原尺寸居中;1:按比例填满;2:拉伸填满;3:放大或缩小到合适 */
        round=0,      /* 圆角半径。0为矩形,-1为椭圆,其他值(>0)为圆角矩形 */
    },
    {   type="text",    /* 定义文本元素,坐标值使用该元素在单元格内的相对坐标值,负数表示距离单元格右边或底边的距离 */
        rectf={x=76;y=4;width=50;height=-1}, /* 文本绘制(显示)区域,同时也是鼠标事件区域 */
        text="团员",     /* 正常状态下,文本 */
        font={name="宋体",h=13,color=0xFF00AA00}, /* 正常状态下,字体 */
    }
    {  type="img",    /* 定义图像元素,坐标值使用该元素在单元格内的相对坐标值,负数表示距离单元格右边或底边的距离,注意区分rectf与posf */
        rectf={x=111;y=1;width=14;height=-1}, /* 图像显示区域,同时也是鼠标事件区域 */
        name="党员",  /* 元素命名 */
        hover=true,  /* 是否启用鼠标滑过该元素状态,并将rectf设为按钮点击区域 */
        trans=1,      /* 透明度。0(完全透明)到 1(完全不透明)之间的数值。不设置则不透明 */
        scale=0,      /* 缩放方式 0:原尺寸居中;1:按比例填满;2:拉伸填满;3:放大或缩小到合适 */
        round=0,      /* 圆角半径。0为矩形,-1为椭圆,其他值(>0)为圆角矩形 */
    },
    {   type="text",    /* 定义文本元素,坐标值使用该元素在单元格内的相对坐标值,负数表示距离单元格右边或底边的距离 */
        rectf={x=126;y=4;width=50;height=-1}, /* 文本绘制(显示)区域,同时也是鼠标事件区域 */
        text="党员",     /* 正常状态下,文本 */
        font={name="宋体",h=13,color=0xFF0000FF}, /* 正常状态下,字体 */
    }
}
mainForm.vlist.setColumnType(10/*列号*/,7/*_vlistEx_ColType_OwnerDrawCustom*/,itemModel/*该列单元格自绘元素模板(参考godking.vlist.itemModel)*/,itemList/*该列单元格自绘元素数据列表*/ )
mainForm.vlist.ownerDrawCustom = function (row,col,text/*当前单元格文本*/){
	if col===10 {
		if text==="1" return { 群众=`~\lib\godking\vlistEx\.res\unchecked.png`; 团员=`~\lib\godking\vlistEx\.res\checked.png`; 党员=`~\lib\godking\vlistEx\.res\unchecked.png`;}
		if text==="2" return { 群众=`~\lib\godking\vlistEx\.res\unchecked.png`; 团员=`~\lib\godking\vlistEx\.res\unchecked.png`; 党员=`~\lib\godking\vlistEx\.res\checked.png`;}
		return { 群众=`~\lib\godking\vlistEx\.res\checked.png`; 团员=`~\lib\godking\vlistEx\.res\unchecked.png`; 党员=`~\lib\godking\vlistEx\.res\unchecked.png`;}
	}
}

// 定义第9列和第10列的点击事件,用于根据鼠标点击,灵活改变单元格数据
mainForm.vlist.onClick = function(row/*行*/,col/*列*/,x,y,buttonIndex/*按钮区域序号*/){
	if !row return ; 
	if  col===9 { //第9列,点击时自动处理数据,onDrawCellContent()函数处理显示数据
		var data = owner.getCellData(row,col):0;
		data++;
		if data>2 data=0;
		owner.setCellText(row,col,data);
		return ; 
	}
	if col===10 and buttonIndex { //第10列,点击时根据点击的位置自动处理数据,ownerDrawCustom()函数返回显示数据
		owner.setCellText(row,col,buttonIndex-1);
	}
}
mainForm.show();
win.loopMessage();


最新回复 (2)
  • 三生有幸 16小时前
    0 引用 2

    太牛X了,庆帝的虚表简直无敌了

  • Xmzzz 15小时前
    0 引用 3

    越来越丰富好用了

返回