如何让quickrep中的QRDBtext自动换行,我设了wordwrap属性为TRUE,但为什么还是不行?
解决方案 »
- InfoPower版本
- 请教delphi大牛
- IDesignerHook这个东西怎么用?
- 一个小问题!请大家帮忙
- 【在线求助】子线程回调主线程函数的问题
- 关于从access单机迁移到sql server上时,有关临时表和多用户的问题,请看贴子!
- 请教高手 的QReport 横向打印 只能看到左边的一半
- 在dbedit1输入字母或数字,则响应table1BeforeEdit事件,输入汉字,table1BeforeEdit事件不响应,这是怎么回事,有什么办法解决吗
- 怎样让窗体变透明??
- 列举进程的问题
- D5、D6、D7,哪个更好?
- 感谢这段时间来,各位Delphi朋友的关照。新春之际,送点分给大家,以表谢意!
将 = 改为 := (赋值)
将 int h,cH,d; 改为 h,ch,d:Integer;QuickReport中有些显示的数据过长,会出现被后面显示的数据覆盖或覆盖后面的数据的情况。对于这种情况,只有使该字符串自动换行,才能彻底解决问题。控件TQRText, TQRMemo, TQRExpr, TQRDBText等都有 WorWrap 属性,可以通过该属性,改变控件的高度,达到换行目的。[步骤]
1.在Report创建的时候,记录下需要 调整高度的孔件 原始高度。[Create]
oldHQR=DetailBand->Height;2.在控件的 OnPrint事件中,利用报表本身的Canvas计算字符串所占的宽度像素(代码中,默认为报表的字体与本身控件的字体完全一样)。[OnPrint]
int h,cH,d;
cH=oldHQR; h=this->Canvas->TextWidth(Value); //计算字符串所占的宽度
if(h>QRExpr1->ClientWidth)
{
d=h/QRExpr1->ClientWidth+((h%QRExpr1->ClientWidth >0)? 1:0);
//cH;
QRExpr1->Height=cH*d;
QRGroup1->Height=oldHGroup+cH*(d-1);
}
else
{
QRExpr1->Height=oldHQR; //恢复原高度,否则,它会一致沿用上一条数据的高度
QRGroup1->Height=oldHGroup;
}
QRShape1->Top=QRGroup1->Height-2-QRShape1->Height;
另外,QR的东东不能支持中文自动换行,只对E文起作用
--也就是说,自动换行只发生在有空格的位置。这是我在用Delphi 3时的情况,现在已经不用QR了,不知道有没有改进。
TQRExpr.Expression:=<字段名称>;[TQRDBText:]TQRDBText.DataSet:=<MyReportDataSet>;
TQRDBText.FieldName:=<字段名称>;你只要将TQRExpr.AutoSize:=false; 并将它的宽度在设计时调好即可。我用中文简单测试过 TQRExpr 它的自动换行没有问题。如果你一定需要使用 TQRDBText,你可以用类似办法测试一下,看它是否可行1.Autosize:=false;
2.设计阶段调整好 宽度
3.WordWrap:=true;
4.使用前面的代码,调整 TQRDBText 的高度。*原理:字符串长度,可以用 TCanvas.TextWidth(xxx) 得到相同字体,字符集条件下所占用的像素 L
原来的 TQRDBText的宽度为 oldW
n:=L % oldW 可以得到字符串应该有多少行.
如果 L mod oldW 大于 0
n:=n+1;
将DetailBand.Heigth=(old DetailBand.Height)+oldH*n 即可。
http://expert.csdn.net/Expert/topic/1302/1302834.xml?temp=.5754206
支持文本框的自动换行功能,著名的QR3.06版报表控件。
http://sanjianxia.myrice.com/delphi/index2.htm
我多次使用没有发现问题.