如何在QuickReport中的TQRDBText自动换行很急的先谢谢了。
解决方案 »
- 很简单的个ADOQuery的问题
- DataGrid显示小数的问题
- 大家都来说说用什么控件做报表吧..郁闷的..
- 求助:为何每次创建的对象地址都一样?在线等,问题解决马上结贴,谢谢!
- 在Delphi中实现SAX解析XML文件
- 请问:在Dephi中能使用C++中定义的类吗?
- 大哥大姐多关照阿,进来指点下把
- 我用D6写的“日常小帮手”昨天才被“华军软件园”收录,今天又被“天空软件站”收录,继续散分!!
- 已ado连接Sql server 为例,总结在c/s系统中,客户端程序连接数据库的方法(经典的、普遍的、详细)?
- 关于Delphi中使用Windows中自带的KODAK控件的一些问题
- 关于TreeView用法的问题!
- 请问怎样以二进制的方式打开任何文件!
http://expert.csdn.net/Expert/topic/1314/1314396.xml?temp=.6958734
http://expert.csdn.net/Expert/topic/1351/1351063.xml?temp=.9529535
http://expert.csdn.net/Expert/topic/1265/1265250.xml?temp=.2919428
http://expert.csdn.net/Expert/topic/1302/1302834.xml?temp=.9411737
http://expert.csdn.net/Expert/topic/1282/1282681.xml?temp=.8808863不过,我自己试过TQRDBText(已经修改了里面QRCtrls单元中的AddWord过程)、QRmemo都不能解决自动换行的问题。
我自己的解决方法如下:
1.在需要显示换行的字段的地方用TQRMemo替代TQRDBText,并调整好TQRMemo的长度和宽度(显示字段的最大范围);
2.在报表所在的Form上放一个TMemo控件,由它来负责解决换行问题,在TQRMemo所在的band的BeforePrint事件中写代码,具体如下
var
i: integer;
begin
memo1.lines.clear;
TQRMemo.lines.clear;
memo1.width:= TQRMemo.Width;
memo1.lines.text:= ADODataSet1.FieldByName('字段名').AsString;
for i:= 0 to memo1.lines.Count - 1 do
QRMemo.lines.Add(memo1.lines.strings[i]);
end;
只要在需要的地方依上面的方法处理就行。
用QRRichText
如果要显示两行,在QRRichText中敲回车一次
如果要显示三行,在QRRichText中敲回车两次
依次类推
我按照你的方法试了一下,单步运行没问题,可是QRMemo就是显示不出来,多谢指教!
var value: string);
var
temparr:array of string;
widelen,i,j:integer;
s:widestring;
begin
j:=1;
s:=value;
widelen:=length(s);
setlength(temparr,j);
temparr[0]:='';
for i:=1 to widelen do
begin
if length(temparr[j-1])+length(s[i])>wide then
begin
j:=j+1;
setlength(temparr,j);
temparr[j-1]:=s[i];
end
else
begin
temparr[j-1]:=temparr[j-1]+s[i];
end;
end;
s:='';
for i:=0 to length(temparr)-2 do
s:=s+temparr[i]+chr(13);
value:=s+temparr[length(temparr)-1];
temparr:=nil;end;在QRDBText的ONPRINT事件中写如下代码
procedure Tshaminputrptform.qrdbtxt_namePrint(sender: TObject;
var Value: String);
begin
autochangerow(39,value);
end;
函数中WIDE参数为一行长度,汉字不会乱码
var
i : integer;
begin
FMemo := TMemo.Create(FWinControl); FMemo.Parent := self; //是报表所在的窗体
FMemo.Width := Tcontrol(sender).Width;
FMemo.height := Tcontrol(sender).Height; FMemo.Text := Value;
Value := FMemo.Lines[0];
For i:= 1 to FMemo.Lines.Count-1 do
value := value + #13 + FMemo.Lines[i];
FMemo.Free;