虚表 —— 课程表例程(选择单元格)

光庆 2小时前 9

import win.ui;
import godking.vlistEx;

// 创建主窗体
/*DSG{{*/
mainForm = win.form(text="vlistEx 课程表示例";right=575;bottom=383)
mainForm.add(
vlist1={cls="vlistEx";left=10;top=10;right=552;bottom=392;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/

// 定义课程表数据
var scheduleData = {
    fields = {"时间/周次", "周一", "周二", "周三", "周四", "周五"},
    rows = {
        { "08:00-09:35", "高等数学", "", "高等数学", "高等数学", "" },
        { "09:50-11:25", "", "大学物理", "大学物理", "", "大学物理" },
        { "11:40-12:25", "午餐", "午餐", "午餐", "午餐", "午餐" },
        { "14:00-15:35", "程序设计", "程序设计", "", "程序设计", "" },
        { "15:50-17:25", "", "", "选修课", "", "选修课" },
        { "19:00-20:35", "自习", "自习", "自习", "自习", "自习" }
    }
}
mainForm.vlist1.setTable(scheduleData.rows /*数据表*/, scheduleData.fields/*列标题*/,{80, 80, 80, 80, 80, 80}/*列宽*/,/*0左1中2右*/,/*转数组*/,/*转Utf8*/,/*克隆表*/,/*恢复设置*/)
mainForm.vlist1.setRowHeight(40); //设置行高
mainForm.vlist1.selectedBkColor = null; //取消选择行背景色

// 设置表头样式
mainForm.vlist1.headerBkcolor = 0x4472C4; //表头背景色
mainForm.vlist1.headerFont = ::LOGFONT(name="微软雅黑";h=12;color=0xFFFFFF); //表头字体:白色
mainForm.vlist1.setColumnAlign( /*列号*/,1/*0左1中2右*/,1/*0顶1中2底*/); //对齐方式

//用一个变量储存鼠标点击的单元格所在的行号
var oldRow;

//绘制单元格背景
mainForm.vlist1.onDrawCellBg = function(row,col,hdc,rect,bkcolor,text){ 
	if col<2 return ; //从第二列开始处理
	if row==owner.clickRow and col==owner.clickCol return false,0x83B314; //设置选中单元格背景
	if row==owner.mouseRow and col==owner.mouseCol return false,0x60A4F4; //设置当前鼠标所在单元格背景
}

//鼠标移动到新单元格时,刷新 新、旧单元格所在行
mainForm.vlist1.onMouseCellChanged = function (oldrow,oldcol,row,col){
	owner.redraw();
	//少量数据可以直接全表刷新,数据量大的话,可以采用下面的方法,仅刷新两行即可。
	/****
		//先刷新旧行
		if oldrow {
			mainForm.vlist1.redrawRow(oldrow /*开始行*/,/*结束行可省略*/,/*是否强制*/);
		}
		//再刷新新行
		if row and row!==oldrow { //如果新、旧单元格所在行不一样,则刷新新单元格
			mainForm.vlist1.redrawRow(row /*开始行*/,/*结束行可省略*/,/*是否强制*/);
		}
	****/
}

//鼠标点击时,刷新选中单元格
mainForm.vlist1.onClick = function(row/*行*/,col/*列*/,x,y,buttonIndex/*按钮区域序号*/){
	owner.redraw();
	//少量数据可以直接全表刷新。数据量大的话,可以采用下面的方法,仅刷新两行即可。
	/****	
		//先刷新旧单元格所在行
		if oldRow {
			mainForm.vlist1.redrawRow(oldRow /*开始行*/,/*结束行可省略*/,/*是否强制*/);
		}
		//再设置并刷新新单元格所在行
		if oldRow!==row { //如果新、旧单元格所在行不一样,则刷新新单元格
			oldRow=row;
			if row {
				mainForm.vlist1.redrawRow(row /*开始行*/,/*结束行可省略*/,/*是否强制*/);
			}
		}
	****/
}

// 显示窗体
mainForm.show();
win.loopMessage();


最新回复 (0)
返回