虚表 —— 单元格绘制完毕事件

光庆 1月前 334

新版本增加了几个单元格绘制完毕事件,如:单元格背景绘制完毕、单元格有效区域背景绘制完毕、单元格内容绘制完毕、单元格边框绘制完毕等。

关于绘制过程中可触发的事件,参考如下(以实际版本中的智能提示为准):

onDrawCellBg(row,col,hdc,rect,bkcolor,text) = @.onDrawCellBg = function(row,col,hdc,rect,bkcolor,text){
	/*绘制单元格背景前,触发该事件。rect为单元格全部区域(含CellRect和padding),
	  返回ture则忽略原背景,否则继续绘制原背景。CellRect部分会被有效区域背景遮盖*/
	__
	return true; 
}
afterDrawCellBg(row,col,hdc,rect,bkcolor,text) = @.afterDrawCellBg = function(row,col,hdc,rect,bkcolor,text){
	/*绘制单元格背景后,绘制有效区域前,触发该事件。
	  rect为单元格全部区域(含CellRect和padding),CellRect部分会被有效区域背景遮盖*/
	__
}

onDrawCellRect(row,col,hdc,rect,bkcolor,text,font,colalign) = @.onDrawCellRect = function(row,col,hdc,rect,bkcolor,text,font,colalign){
	/*绘制单元格有效区域(背景、内容)前,触发该事件。
	  返回ture则忽略原背景和内容,且其后的 onDrawCellRectBg() 和 afterDrawCellRectBg() 事件也不会再触发*/
	__
	return true; 
}

onDrawCellRectBg(row,col,hdc,rect,bkcolor,text) = @.onDrawCellRectBg = function(row,col,hdc,rect,bkcolor,text){
	/*绘制单元格有效区域背景前,触发该事件。rect为有效区域,不包含padding。
	  返回ture则忽略原有效区域背景(不影响内容绘制),否则继续绘制有效区域原背景。
	  如果其前的 onDrawCellRect() 事件返回true,则本事件不会触发。*/
	__
	return true; 
}
afterDrawCellRectBg(row,col,hdc,rect,bkcolor,text) = @.afterDrawCellRectBg = function(row,col,hdc,rect,bkcolor,text){
	/*绘制单元格有效区域背景后,绘制内容前,触发该事件。rect为有效区域,不包含padding。
	  如果其前的 onDrawCellRect() 事件返回true,则本事件不会触发。*/
	__
}

afterDrawCell(row,col,hdc,rect,bkcolor,text,font,colalign) = @.afterDrawCell = function(row,col,hdc,rect,bkcolor,text,font,colalign){
	/*绘制单元格全部内容后,绘制边框前,触发该事件。rect为单元格全部区域(含CellRect和padding)*/
	__
}

afterDrawCellBorder(row,col,hdc,rect,bkcolor,text,font,colalign) = @.afterDrawCellBorder = function(row,col,hdc,rect,bkcolor,text,font,colalign){
	/*绘制单元格全部内容和边框后,触发该事件。此事件未单元格绘制的最终事件。rect为单元格全部区域(含CellRect和padding)*/
	__
}

onStartPaint(hdc,rect) = @.onStartPaint = function(hdc,rect){
	/*绘制周期开始之前,触发该事件,进行预绘制虚表内容。此时未开始单元格绘制。*/
	__
}


实例效果:

示例代码:

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}
)
/*}}*/

mainForm.show();
var t = { fields={"序号","姓名","年龄","地址","身份证"} };
for(i=1;10000;1){
    var tt={};
    tt["序号"]="[@rowindex]";  // 行序号标记是不允许编辑修改的
    tt["姓名"]="["+string.random(math.random(1,10))+"]";
    tt["年龄"]="["+string.random(math.random(1,20))+"]";
    tt["地址"]="["+string.random(math.random(1,30))+"]";
    tt["身份证"]="["+string.random(math.random(1,40))+"]";
    ..table.push(t,tt);
}
mainForm.vlist.afterDrawCellBorder = function(row,col,hdc,rect,bkcolor,text){
	if row===6 {
		rect.top = rect.bottom-6;
		..gdi.fillRect(hdc,0xFF0000,rect);
	} 
}
mainForm.vlist.setTable(t);
mainForm.vlist.setColWidthFit();
win.loopMessage();


最新回复 (0)
返回