标题:如何理介下面一段代码中DODEFAULT(tnFRXRecno, toObjProperties)的语句?
只看楼主
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
结帖率:79.3%
已结贴  问题点数:20 回复次数:5 
如何理介下面一段代码中DODEFAULT(tnFRXRecno, toObjProperties)的语句?
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'
                *!* 根据颜色值重新分离为RGB颜色值
                lnPenRed=BITAND(lnColor, 0x0000FF)
                lnPenGreen=BITRSHIFT(BITAND(lnColor, 0x00FF00),  8)
                lnPenBlue=BITRSHIFT(BITAND(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)&&&根据DODEFAULT()的作用是子类中调用父类的方法或事件。这里的子类是EffectsListener,它去调用父类ReportListener 中的方法《 PROCEDURE EvaluateContents(tnFRXRecno, toObjProperties)到   SET DATASESSION TO lnSession>>这一段语句(加粗的一段)?这样理介对不对?



    ENDPROC

ENDDEFINE


[ 本帖最后由 sylknb 于 2013-1-24 09:08 编辑 ]
搜索更多相关主题的帖子: 工作区 如何 记录 
2013-01-24 09:07
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
得分:0 
没有人理采?
2013-01-24 13:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
不对

授人以渔,不授人以鱼。
2013-01-24 14:39
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
得分:0 
应如何理介?请指教 。
2013-01-24 15:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:20 
父类ReportListener中并没有1楼现在子类所写的那些代码。子类EffectsListener编写方法EvaluateContents是覆盖父类原有同名EvaluateContents方法,要求程序先执行子类中所写的代码,忽略父类的,两者的代码是不同的。但某些时候,我们除了要使用新的代码,还需要使用父类原有的代码,那么就要显式调用父类的代码了,dodefault()就是要求在这个时候补充执行父类中原有的代码(相当于把子类和父类的代码合并起来),这个dodefault(),是不需要知道父类的代码是怎样的,也不要管它,只要你觉得需要保留父类的行为,就调用它,恢复父类的默认行为。

授人以渔,不授人以鱼。
2013-01-24 15:37
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
得分:0 
多谢了,原来如此。你真是太牛了。
2013-01-24 16:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-397461-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.138120 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved