PB的DataWindow中动态改变鼠标所指行列的颜色
软件世界
PowerBuilder(简称PB)是一个优秀的数据库前端开发工具,而它的专利产品DataWindow更让人称赞。这里就介绍一个运用DataWindow的小技巧,当鼠标移到一个行列上时,这个行列文字的颜色随之发生改变,把它用在DataWindow数据的显示中,颇能增加几分妙趣。方法如下:
首先,定义3个实例变量
string is_detailH
string is_headerH
string is_columname
在DataWindow的constructor事件中写如下代码:
is_detailH = dw_1.Describe("DataWindow.Detail.Height");
is_headerH = dw_1.Describe("DataWindow.header.Height");
为DataWindow增加一个mousemove自定义事件
事件中写如下代码:
string ls_dwo;
string ls_FirstRow;
long ll_c;
// 获得dwo的类型
ls_dwo = dwo.type
// 如果鼠标指在列数据上,则进行颜色变换
if ls_dwo = 'column' then
// 获得鼠标所指列的列名
ls_dwo = dwo.name;
// is_columname 中保存鼠标上次指到的列名,
// 如果此时得到的列名和上次的不一致,则设置设置上次的列的颜色
if ls_dwo <> is_columname then
this.Modify(is_columname + ".Color='0'");
is_columname = ls_dwo;
end if
// 获得当前页中的第一行的行号
ls_FirstRow = this.Describe("DataWindow.FirstRowOnPage")
// 获得鼠标所指行的行号
ll_c = long(PixelsToUnits(ypos,YPixelsToUnits)- long(is_headerH))/ long(is_detailH) + 1
ll_c = long(ls_FirstRow) - 1 + ll_c;
sle_1.text = ls_dwo + ls_FirstRow + ": " + string(ypos)+ "/" + is_headerH + "=" + string(ll_c)
// 为鼠标所指列设置颜色表达式
this.Modify(ls_dwo + ".Color='0~tif( currentRow() = getrow(), rgb(255,0,0),0)'")
// 设置鼠标所指行列为当前行列
this.setcolumn(ls_dwo);
this.setrow(ll_c);
end if