日期:2014-05-20  浏览次数:20778 次

水晶报表高手请进!帮忙看一下水晶报表中文字加入删除线。
怎样在一段文本中用的某些字中加入删除线。如:

 修改/替换 这个门。

用户如果选择的是替换,则在修改上加上删除线 则报表出的效果为

 修改/替换 这个门。

另外这些文本是记录是多条(放在一个datatable对象中),显示在详细资料的节里面。
请问怎样才能通过这些记录,在报表中显示这个效果来
如:
1.   修改/替换 这个门。
2.   修改/替换 这个窗
3.   修改/替换 这个水管。
....
报表的结果如:
1.   修改/替换 这个门。
2.   修改/替换 这个窗
3.   修改/替换 这个水管。
....



或者能否通过获取这个TextOjbect来设置这种效果?
希望能给出代码。
谢谢
------最佳解决方案--------------------
1:这个效果在一个字段应该是实现不出来的
2:不需要程序内的代码,是纯报表上的操作。

如下:

把这个文本,拆成几个部分,然后对不同的部分进行处理。

如“修改/替换 这个门。”

以空格把后面的“这个门”切出来
然后用/把两个动作分开。
这样就会出现三个字段,实际上是四个(包含/),不过因为/是固定的,我们就作为一个固定的文本处理。

我这里做了3个公式,其中用一个变量xField模拟实际字段。

公式x1:
//将字串按空格切割,然后再把第一部分按/切割,得到“修改”这部分
stringvar xField:='修改/替换 这个门';
local stringvar x1;
x1:=Split(Split(xField,' ')[1],'/')[1];

公式x2:
//得到“替换”这部分
stringvar xField:='修改/替换 这个门';
local stringvar x2;
x2:=Split(Split(xField,' ')[1],'/')[2];

公式x3:
//得到“这个门”这部分
stringvar xField:='修改/替换 这个门';
local stringvar x3;
x3:=Split(xField,' ')[2];

然后把这几个部分拖到界面上,组合成想要的效果

在x1上点右键,设置字段,格式,切换到字体标签。勾选“删除线”,编辑后面的公式为
{@x1}='替换'

同理设置x2

x3不用设

如图




------其他解决方案--------------------
好的,谢谢。
------其他解决方案--------------------
不知还有没有更好的办法。
------其他解决方案--------------------
应该没有了。
------其他解决方案--------------------
帮顶,babyt的水晶报表的造诣很深,收益良多!
------其他解决方案--------------------
 阿泰做的已经很明确了

 想问一下,你的要求好像只有两种状态要么修改,要么替换,为不用一个表求二种状态的东西表示呢(CheckedBox,选中表示替换,不选表示修改)
 公式:
  if{tb.IsTrue} = true then
    chr(254)
  else
    chr(168)

------其他解决方案--------------------
如果有意替换你上面的方面,而选用CheckBox,我上面的回答有些出入,具体看我今天的博文:水晶报表中显示CheckBox的值
------其他解决方案--------------------
 学习了..
------其他解决方案--------------------
帮顶 高手都是
------其他解决方案--------------------
啊泰,我查问题答案找到这个帖子来了,我的问题和楼主有些不同,我是在一大段文本中,某几个字需要加删除线,如果按你的做法,把字符串切割然后组合,那么文本的长度怎么在报表中控制?
具体是:
如果是一整段文本,我在水晶报表中直接拉到报表的宽度打印这段文本就可以了。
如果是切割后的文本,那么每段文本的宽度怎么设置?
比如:切割后

文本1     文本2(加删除线的)  文本3    文本4(加删除线的)   文本5

可能文本1的长度就超过了打印页面的宽度,正常情况下,自动换行继续打印,也可能文本1只有2个字。
那么后面接的需要加删除线的文本2的摆放该怎么做?
------其他解决方案--------------------
学习