| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2864 人关注过本帖
标题:下面红色的标记的代码表示什么意思?
取消只看楼主 加入收藏
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
结帖率:79.38%
收藏
已结贴  问题点数:20 回复次数:10 
下面红色的标记的代码表示什么意思?
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 编辑 ]
搜索更多相关主题的帖子: create report 订单号 
2012-01-17 18:21
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
还是不明确,能简单一点,太笨了。
2012-01-17 20:11
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
还没有转过来,举一个简单列子好吗?
2012-01-17 20:32
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
Color = red + 256 * green + 256 * 256 * blue
是不是这样理介;
第1次除256,red/256除不尽余256,为F;(256 * green )/256 没有余数,为0,(256 * 256 * blue)/256没有余数,为0,color=f,0,0
第2次除256,green/256除不尽余256,为F,,( 256 * blue)/256没有余数,为0,color=0,f,0

第3次除256,( blue)/256除不尽余256,为F,color=0,0,f

对公式还不是清楚能否举一个运算过程好吗?下面三张图是各16进制化二进制
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

如果用lnColor=EVALUATE(lcExpression) &&根据表达式计算颜色值
程序运行是用   lnColor,时lncolor=255



为什么:BITAND(lnColor, 0x0000FF)                 按位与变成什么色?
        BITRSHIFT(BITAND(lnColor, 0x00FF00),  8)   为什么与0x00FF00按位与,并转位8,它结果变成什么色?
        BITRSHIFT(BITAND(lnColor, 0xFF0000), 16) 为什么与0x00FF00按位与,并转位16,  它转位变成什么色?


2012-01-17 22:33
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
我问的为什么:BITAND(lnColor, 0x0000FF)   虽然结果是红色为什么lnColor要与0x0000FF(兰色吗)按位与吗?        
         BITRSHIFT(BITAND(lnColor, 0x00FF00),  8)   为什么与0x00FF00按位与,并转位8,它结果变成什么色?
        BITRSHIFT(BITAND(lnColor, 0xFF0000), 16) 为什么与0x00FF00按位与,并转位16,  它转位变成什么色?
下面附上二张图是程序运行时及运行结果
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


2012-01-17 23:01
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
這個Color值為11569901,即0xB08AED,執行跟0x0000FF與運算为什么用它0x0000FF與運算提取红色?
同理与0x00FF00与运算提取录色?
与0xFF0000 与运算提取兰色?

2012-01-18 00:03
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
下面又如此介释?

0xff0000意味红为最大,绿蓝都为零 (红色)
0x00ff00意味着绿为最大,红蓝为零(绿色)
0x0000ff意味着蓝为最大,红绿为零(蓝色)


紅色在最右邊的00位置處,用0x0000FF,如何理介?
0x0000ff意味着蓝为最大,红绿为零(蓝色),又如何理介?

2012-01-18 00:18
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
分色位置:  藍|綠|紅
  真實值:0xB0|8A|ED
    掩碼:0x00|00|FF 取出0xED
          0x00|FF|00 取出0x8A
          0xFF|00|00 取出0xB0
上述懂了,但与下面对照又有点糊了???
0xff0000意味红为最大,绿蓝都为零 (红色)
0x00ff00意味着绿为最大,红蓝为零(绿色)
0x0000ff意味着蓝为最大,红绿为零(蓝色)

2012-01-18 00:27
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
掩碼与RGB顏色表示方法是二个不同概念吗?有何联系?
2012-01-18 00:40
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
真是太深了,同样的表达式:0x00FF 作为 掩碼:0x00|00|FF 取出0xED
而在RGB中0x0000ff表示蓝色
好不好这样理介


2012-01-18 01:02
快速回复:下面红色的标记的代码表示什么意思?
数据加载中...
 
   



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

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