  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		480615
 
 
  註冊時間: 2008-04-11 文章: 93
 
  第 1 樓
  | 
		
			
				 發表於: 星期四 一月 24, 2013 1:36 pm    文章主題: 请教下面一段代码中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),   
 
                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 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		aizz
 
 
  註冊時間: 2007-01-29 文章: 172
 
  第 2 樓
  | 
		
			
				 發表於: 星期五 一月 25, 2013 9:41 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				
 
 
最簡單易懂的 foxpro  , 居然可以被寫得這麼艱澀難讀......
 
 
猴腮雷呀
 
 
         | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		elleryq
 
  
  註冊時間: 2007-06-21 文章: 768
 
  第 3 樓
  | 
		
			
				 發表於: 星期五 一月 25, 2013 3:41 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				應該不是這個說
 
 
dodefault() 的意思應該是
 
 
define class a
 
  procedure do()
 
    && show something.
 
  endproc
 
enddefine
 
 
define class a_child as a
 
  procedure do()
 
    dodefault()
 
  endproc
 
enddefine
 
 
dodefault() 就只是執行父類別 do 裡的代碼。 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		480615
 
 
  註冊時間: 2008-04-11 文章: 93
 
  第 4 樓
  | 
		
			
				 發表於: 星期二 一月 29, 2013 11:26 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				| 我的意思是在上面的代码中dodefault() 去執行哪一个父類別? | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |