请升级至虚表最新版
使用 定点图片 + 按钮区域,可以在单元格内随意创建(伪装)按钮。
使用该方式创建的按钮,只会响应鼠标点击事件,不会产生鼠标划过事件,也就是说,当鼠标在按钮上划过时,图片不会发生变化。
使用该方式创建按钮,虽然没有鼠标划过、按下等图片变化效果,但胜在简单方便,可轻松实现诸如 “选择文件” 等功能。
同时,设置定点图片可以使用 “附加文本” 实现,根本不用处理单元格内容,实在是太方便了。
当然,也可以通过 onDrawCellRect...等事件函数,自行改变显示内容,效果一样,但不如 “附加文本” 简单方便。

import win.ui;
import godking.vlistEx;
/*DSG{{*/
mainForm = win.form(text="vlistEx - table adapter";right=839;bottom=647)
mainForm.add(
vlist={cls="vlistEx";left=8;top=8;right=832;bottom=640;border=1;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/
//创建图片数据
import godking.paint
import inet.http
var imgs = godking.paint.splitImage("https://aardio.online/upload/files/20250207/1738894054.png",6,6,0,0,0,0)
for(i=1;#imgs;1){
mainForm.vlist.addImg(i/*图片名称*/,imgs[i]/*图片文件*/,false/*是否替换*/,/*宽度*/,/*高度*/);
}
//设置数据
var t = { fields={"序号","姓名","照片","地址","政治面貌"} };
for(i=1;100;1){
var tt={};
tt["序号"]="[@rowindex]"; // 行序号标记是不允许编辑修改的
tt["姓名"]="姓名"+math.random(1,999);
tt["照片"]="";
tt["地址"]="地址"+math.random(1,999);
tt["政治面貌"]= math.random(0,1)?"党员":"群众";
..table.push(t,tt);
}
mainForm.vlist.setTable(t,,{100,100,-1,100,100},{1,1,0,1,1});
mainForm.vlist.setRowHeight(40);
mainForm.vlist.headerBkcolor = 0xFFDDDD;
mainForm.vlist.headerFont = ::LOGFONT(name="宋体";h=14;color=0xFF0000);
mainForm.vlist.headerAlign = 1;
//定义列按钮区域
mainForm.vlist.setColumnButtonRects(3,{x=-15,y=-15,w=15,h=15});
//定义列附加文本
mainForm.vlist.setColumnAdditionalText(3/*列号*/,"<img name=`%s`,w=20,h=20> "/*前缀文本*/,"<img name=28,x=-15,y=-15,w=15,h=15>"/*后缀文本*/)
//定义单元格点击事件。如果点击的是按钮区域,则进行相应的操作。
mainForm.vlist.onClick = function(row/*行*/,col/*列*/,x,y,buttonIndex/*按钮区域序号*/){
if col===3 and buttonIndex {
import fsys.dlg
var file = fsys.dlg.open("*.png|*.png");
if file owner.setCellText(row,col,file);
return true;
}
}
//编辑模式
mainForm.vlist.onEditBegin = {true,3};
mainForm.show();
win.loopMessage();
使用onDrawCellRectContent代替附加文本实现相同功能
import win.ui;
import godking.vlistEx;
/*DSG{{*/
mainForm = win.form(text="vlistEx - table adapter";right=839;bottom=647)
mainForm.add(
vlist={cls="vlistEx";left=8;top=8;right=832;bottom=640;border=1;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/
//创建图片数据
import godking.paint
import inet.http
var imgs = godking.paint.splitImage("https://aardio.online/upload/files/20250207/1738894054.png",6,6,0,0,0,0)
for(i=1;#imgs;1){
mainForm.vlist.addImg(i/*图片名称*/,imgs[i]/*图片文件*/,false/*是否替换*/,/*宽度*/,/*高度*/);
}
//设置数据
var t = { fields={"序号","姓名","照片","地址","政治面貌"} };
for(i=1;100;1){
var tt={};
tt["序号"]="[@rowindex]"; // 行序号标记是不允许编辑修改的
tt["姓名"]="姓名"+math.random(1,999);
tt["照片"]="";
tt["地址"]="地址"+math.random(1,999);
tt["政治面貌"]= math.random(0,1)?"党员":"群众";
..table.push(t,tt);
}
mainForm.vlist.setTable(t,,{100,100,-1,100,100},{1,1,0,1,1});
mainForm.vlist.setRowHeight(40);
mainForm.vlist.headerBkcolor = 0xFFDDDD;
mainForm.vlist.headerFont = ::LOGFONT(name="宋体";h=14;color=0xFF0000);
mainForm.vlist.headerAlign = 1;
//定义列按钮区域
mainForm.vlist.setColumnButtonRects(3,{x=-15,y=-15,w=15,h=15});
//定义单元格点击事件。如果点击的是按钮区域,则进行相应的操作。
mainForm.vlist.onClick = function(row/*行*/,col/*列*/,x,y,buttonIndex/*按钮区域序号*/){
if col===3 and buttonIndex {
import fsys.dlg
var file = fsys.dlg.open("*.png|*.png");
if file owner.setCellText(row,col,file);
return true;
}
}
//使用onDrawCellRectContent代替附加文本实现相同功能
mainForm.vlist.onDrawCellRectContent = function(row,col,hdc,rect,bkcolor,text,font,align,valign){
if col===3 {
var newtext = "<img name=`"++text++"`,w=20,h=20> " ++ text ++ "<img name=28,x=-15,y=-15,w=15,h=15>"
return false,newbkcolor,newtext,newfont,newalign,newvalign;
}
}
//编辑模式
mainForm.vlist.onEditBegin = {true,3};
mainForm.show();
win.loopMessage();