下面红色的标记的代码表示什么意思?
CREATE TABLE orders (订单号 C(2),订单日期 d ,发货日期 d, 订单金额 N(6))INSERT INTO (订单号,订单日期,发货日期,订单金额) VALUES ("01",{^2008-10-1},{^2008-10-25})
create report report1.frx
添加域控件订单号,订单日期,发货日期,订单金额,并设置保存在USER 字段中的
指令为:"*:EFFECTSFORECOLOR=IFF(发货日期> 订单日期+10,RGB(255,0,0),RGB(0,0,0)"
接着
建一个EffectsListener的派生类,该类保存在DyFormat.prg文件中。
DEFINE CLASS EffectsListener AS ReportListener
PROCEDURE EvaluateContents(tnFRXRecno, toObjProperties)
LOCAL lcEffect,lnSession,lcExpression
lcEffect="*:EFFECTS FORECOLOR"
lnSession=SET("Datasession") &&保存当前数据工作期
SET DATASESSION TO This.FRXDataSession &&转到报表定义文件数据工作期
SELECT FRX &&选择报表定义文件工作区
GO tnFRXRecno &&根据记录号定位记录
IF ATC(lcEffect,FRX.User)>0 &&查找USER字段中是否包含“*:EFFECTS FORECOLOR”标记
lcExpression=STREXTRACT(FRX.User,lcEffect+'=',CHR(13),1,3) &&提取出IIF()函数语句
LOCAL lnColor,lnPenRed,lnPenGreen,lnPenBlue
SET DATASESSION TO lnSession &&返回报表数据工作期
SELECT Orders &&转换到Orders临时表来计算发货日期是否大于定货日期+10
lnColor=EVALUATE(lcExpression) &&根据表达式计算颜色值
IF VARTYPE(lnColor)='N'
&&& 如果用lnColor=EVALUATE(lcExpression) &&根据表达式计算颜色值,lncolor=255
有以下几个问题请教:
*!* 根据颜色值重新分离为RGB颜色值 &&1。颜色值与RGB颜色值的区别?
lnPenRed=BITAND(lnColor, 0x0000FF) &&&2。lncolor为什么与0x0000FF比较
lnPenGreen=BITRSHIFT(BITAND(lnColor, 0x00FF00), 8) &&&3。lncolor为什么与0x00FF00比较并称位8
lnPenBlue=BITRSHIFT(BITAND(lnColor, 0xFF0000), 16)) &&&4。lncolor为什么与0xFF0000比较并称位16
WITH toObjProperties
IF .PenRed<>lnPenRed OR .PenGreen<>lnPenGreen OR .PenBlue<>lnPenBlue
.PenRed=lnPenRed
.PenGreen=lnPenGreen
.PenBlue=lnPenBlue
.FontStyle=129 &&粗体(1)+删除线(128),见表12-17中的说明
.Reload=.T. &&通知ReportListener进行重绘
ENDIF
ENDWITH
ENDIF
ENDIF
SET DATASESSION TO lnSession
*!* 执行默认行为
DODEFAULT(tnFRXRecno, toObjProperties)
ENDPROC
要在报表中使用EffectsListener类,建立一个名为runreport1.prg,代码如下:
loListener=NEWOBJECT("EffectsListener","DyFormat.prg")
loListener.ListenerType = 1 &&输出到预览窗口
loListener.OutputType = 1
REPORT FORM Report1.frx OBJECT loListener
[ 本帖最后由 sylknb 于 2012-1-17 18:24 编辑 ]