虚表增强版,用最简单的代码,实现最炫酷的效果

光庆 6月前 1283 v 4.3.7 2024-02-27

注意事项:

1、表格内的图片按钮等素材略显不好看,我随便弄的,仅做演示使用。

2、因后期功能升级,setColumnType函数,当参数2为 4 /*_vlistEx_ColType_Switch*/ 时,添加了一个参数3:true,请自行修改代码:

如:

mainForm.listview.setColumnType(4, 4 /*_vlistEx_ColType_Switch*/ , 1, "\0.png" /*图片1*/ , "\1.png" /*图片2*/ , "\2.png" /*图片3*/ );

改为:

mainForm.listview.setColumnType(4, 4 /*_vlistEx_ColType_Switch*/ , true, 1, "\0.png" /*图片1*/ , "\1.png" /*图片2*/ , "\2.png" /*图片3*/ );

//vlistEx 虚表增强版

//光庆封装 http://chengxu.online

/*****

本库基于: http://bbs.aardio.com/forum.php?mod=viewthread&tid=11729 进行增强改进,在此对lujjjh表示感谢。

帮助文档: https://blog.csdn.net/sdlgq/article/details/112896327

图片专题: https://blog.csdn.net/sdlgq/article/details/129944516

小窍门:

1、如果单元格中没有图片,可以设置 onlyText=true 以纯文本形式绘制单元格内容,以加快表格刷新速度。

2、如果拖动改变列宽时很卡,可设置 onlyRedrawCurColOnResizeCol=true 只重画当前拖动列内容,以加快表格刷新速度。

更新日志:

4.3.7 增加 copy() paste() 函数,支持与excel交换数据。drawCellxxx()函数替换为onDrawCellxxx()事件函数,以便理解和调用。

4.3.6 增加 列类型 , 支持混合排版文本、下拉列表框、图片、进度条、多态开关图片等多种类型。

4.3.5 增加 hideLineV 属性,可以设置隐藏竖线。

4.3.4 修正 drawCellRectBg() 绘图无效问题。优化 setRedraw() 函数效果。

4.3.3 增加 filter() 过滤功能。

4.3.2 优化 setTable() 和 addTable() 参数设置,明确重建列的代码功能。

4.3.1 修复 setTable() 参数1为空时出错的问题。

4.3.0 增加 setCheckedByText() 和 setSelectedByText() 函数。

4.2.9 列多行文本模式支持垂直对齐方式设置。

4.2.8 增加设置列为多行文本模式功能。

4.2.7 修复一处调用redraw()引起的错误。

4.2.6 完善部分功能的智能提示,优化部分代码,修复部分错误。

4.2.5 修复字典数据时 getChecked() 和 getSelected() 返回指定列内容为空的错误。

4.2.4 鼠标单击、双击事件,增加坐标参数

4.2.3 setTable 增加 clone 参数,可自行控制是否克隆新表。默认为false

4.2.2 优化选择框图片,增加 checkBox.setColor() 函数,修改默认图片颜色。

4.2.1 改善拖动列渲染效果,优化拖动体验。

4.2.0 优化智能提示。

4.1.9 优化表格内容绘制速度。

4.1.8 优化tree.nodeImg绘图效果,边缘更平滑。

*****/

你能想象上图这个效果,从界面、数据、到功能,只需要24行代码即可实现吗?

其中界面部分占10行、数据占7行,最重要的功能部分仅仅7行代码即可。简单的简直不要不要的!!

import win.ui;
import godking.vlistEx;
/*DSG{{*/
mainForm = win.form(text="vlistEx - table adapter";right=839;bottom=319;border="thin")
mainForm.add(
listview={cls="vlistEx";left=16;top=24;right=824;bottom=304;acceptfiles=1;aw=1;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;vscroll=1;z=1}
)
/*}}*/
var t = {
    {"[@rowindex]", "张三", 0, ..math.random(0, 2), 0, "文本1"  } 
    {"[@rowindex]", "李四", 12.5, ..math.random(0, 2), 1, "文本2" } 
    {"[@rowindex]", "王五", 29, ..math.random(0, 2), 0, "文本3"   } 
    {"[@rowindex]", "SSS", 50, ..math.random(0, 2), 0, "文本4"  } 
    {"[@rowindex]", "AAA", 100, ..math.random(0, 2), 1, "文本5"   } 
}
mainForm.listview.setTable(t, {"序号", "下拉列表演示(可编辑)", "进度演示", "三态演示", "两态演示","文本演示(可编辑)"},{50,150,100,250,100,150},1);
mainForm.listview.onEditBegin = {true,2,6}; // 只允许第2列、第6列可编辑
mainForm.listview.setColumnType(2, 1/*_vlistEx_ColType_ComboBox*/, true/*显示小箭头*/, 0x0000FF/*箭头颜色*/ );
mainForm.listview.setColumnType(3, 3 /*_vlistEx_ColType_Progress*/ , 0xCCDDEE /*背景色*/ , 0x225699 /*前景色*/ );
mainForm.listview.setColumnType(4, 4 /*_vlistEx_ColType_Switch*/ , 1, "\0.png" /*图片1*/ , "\1.png" /*图片2*/ , "\2.png" /*图片3*/ );
mainForm.listview.setColumnType(5, 4 /*_vlistEx_ColType_Switch*/ , 1, "\off.png" /*图片1*/ , "\on.png" /*图片2*/ );
mainForm.listview.setComboBoxItems({"张三", "李四", "王五", "SSS", "AAA"});
mainForm.show();
win.loopMessage();

import win.ui;
import godking.vlistEx;
/*DSG{{*/
mainForm = win.form(text="vlistEx - table adapter";right=807;bottom=319;border="thin")
mainForm.add(
button={cls="button";text="Button";left=352;top=264;right=464;bottom=304;z=2};
listview={cls="vlistEx";left=16;top=24;right=792;bottom=240;acceptfiles=1;aw=1;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;vscroll=1;z=1}
)
/*}}*/

mainForm.listview.setColumns({"序号", "下拉列表演示(可编辑)", "进度演示", "三态演示", "两态演示","编","辑"},{50,150,100,250,100,50,50} , 1);
mainForm.listview.headerAlign = {1,1,1,1,1,2,0};
var t = {
    {"[@rowindex]", "张三", 0, ..math.random(0, 2), 0, "编辑","删除"  } 
    {"[@rowindex]", "李四", 12.5, ..math.random(0, 2), 1,"编辑","删除" } 
    {"[@rowindex]", "王五", 29, ..math.random(0, 2), 0, "编辑","删除"   } 
    {"[@rowindex]", "SSS", 50, ..math.random(0, 2), 0,"编辑","删除"  } 
    {"[@rowindex]", "AAA", 100, ..math.random(0, 2), 1, "编辑","删除"   } 
}
mainForm.listview.setTable(t,false);

mainForm.listview.onEditBegin = {true,2,6}; // 只允许第2列、第6列可编辑
mainForm.listview.setColumnType(2, 1/*_vlistEx_ColType_ComboBox*/, true/*显示小箭头*/, 0x0000FF/*箭头颜色*/ )
mainForm.listview.setColumnType(3, 3 /*_vlistEx_ColType_Progress*/ , 0xCCDDEE /*背景色*/ , 0x225699 /*前景色*/ )
mainForm.listview.setColumnType(4, 4 /*_vlistEx_ColType_Switch*/ , 1, "\0.png" /*图片1*/ , "\1.png" /*图片2*/ , "\2.png" /*图片3*/ )
mainForm.listview.setColumnType(5, 4 /*_vlistEx_ColType_Switch*/ , 1, "\off.png" /*图片1*/ , "\on.png" /*图片2*/ )

mainForm.listview.setComboBoxItems({"张三", "李四", "王五", "SSS", "AAA"});
mainForm.listview.hideLineV = 6
mainForm.listview.onDrawCellRectBg = function(row,col,hdc,rc,bkcolor,text){
	if col==6 {..gdi.fillRect(topointer(hdc),0x5599EE,rc); return true;} 
	if col==7 {..gdi.fillRect(topointer(hdc),0xEE9955,rc); return true;} 
}

mainForm.listview.onClick = function(row/*行*/,col/*列*/,x,y){
	if col==6 {..win.msgbox("您点击的是编辑,位于"++row++"行"++col++"列吗?")} 
	if col==7 {..win.msgbox("您点击的是删除,位于"++row++"行"++col++"列吗?")} 
}
mainForm.show();
win.loopMessage();

import win.ui;
import godking.vlistEx;
/*DSG{{*/
mainForm = win.form(text="vlistEx - table adapter";right=849;bottom=578)
mainForm.add(
vlist={cls="vlistEx";left=10;top=10;right=840;bottom=570;db=1;dl=1;dr=1;dt=1;edge=1;transparent=1;z=1}
)
/*}}*/

var t = { fields={"序号","姓名","年龄","地址","身份证"} };
for(i=1;100;1){
    var tt={};
	tt["序号"]="[@rowindex]";  // 行序号标记是不允许编辑修改的
	tt["姓名"]="群众";
	tt["年龄"]="团员";
	tt["地址"]="党员";
	tt["身份证"]=math.random(1000,9999)+"身份证";
	..table.push(t,tt);
}
mainForm.vlist.setTable(t,{"序号","","政治面貌","","身份证"} ,{80,60,60,60,200},0x1);
mainForm.vlist.hideLineV = {2,3}
mainForm.vlist.onClick = function(row/*行*/,col/*列*/,x,y){
	/*鼠标左键点击项目事件。x、y为鼠标相对于虚表的坐标*/
	if col==2 or col==3 or col==4 {
		mainForm.vlist.setCellColor(row,2,,null);
		mainForm.vlist.setCellColor(row,3,,null);
		mainForm.vlist.setCellColor(row,4,,null);
		mainForm.vlist.setCellColor(row,col,,({0,0xAAAAFF,0xFFAAAA,0xAAFFAA})[col]);
		mainForm.vlist.redraw();
	}	
}
mainForm.show();
win.loopMessage();


辛苦写好的过滤功能演示代码,停电没了,先看一下效果图吧:

上传的附件:
最新回复 (2)
  • Mr_MAO 6月前
    0 引用 2

    👍,非常棒,以前用过,功能很丰富,显示速度加快就是王道!另外,img标签功能很新颖很实用,建议加a标签识别url功能!

  • niheibie 6月前
    0 引用 3
    66666666
返回