为确保以下代码使用正常,请升级虚表库至最新版 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();