自动换行问题(100分)

  • 主题发起人 主题发起人 xumin23
  • 开始时间 开始时间
X

xumin23

Unregistered / Unconfirmed
GUEST, unregistred user!
假设有这样几条条记录
1 姓名1 个人说明(文字随便写的)乡村啊死的开发阿大赛抗风浪
2 姓名2 阿如果今儿个快了非价格;经过;立刻梵蒂冈;所困大嘎军官破人家
需要按下面的样子显示在报表中
1 姓名1 个人说明(文字随便写的)乡
村啊死的开发阿大赛抗风浪
2 姓名2 阿如果今儿个快了非价格;经
过;立刻梵蒂冈;所困大嘎军
官破人家
 
用Insert #13#10来做.
 
如果你准备用TPrinter对打印进行控制的话,那一切都好说:
Windows有一个WIN32函数:GetTextExtent32可以计算指定的空间可以放下多少个字符,
剩下的只有一个判断是一个中文是否会从中间断开的问题了:可以使用WideString来判断
我在网吧,手上没有资料,所以以上描述比较简单。
以前曾经写过一个类似的东西,如果不太清楚的话,我回去发一个详细的源程序给你。
 
用fast report2.45 做报表,可以直接做
此控件下载地址:http://www.51delphi.com
 
徐风华,我还是不太清楚,麻烦你发一个详细的源程序给我。
 
报表的中文换行,请到delphi.mychangshu.com下载处理过的FastReort 2.44
 
我的email是smile800@msn.com
 
to xumin23:
将一行文字按指定宽度分断的函数如下:
将一行文字分成几段放到一个 TStringList中保存.中间经过判断,不会将汉字从中分开.
procedure DivideText(ColWidth:do
uble;
Text: String;
var SubTextList: TStringList);
var
I, Count: Integer;
Amount : PInteger;
TempA: String;
TempW: WideString;
Size: TSize;
begin
I := 1;
Count := Length(Text);
SubTextList.Clear;
New(Amount);
while I <= Countdo
begin
TempA := Copy(Text, I, Count+1-I);
GetTextExtentExPoint(FBitmap.Handle, PChar(TempA), Length(TempA), ColWidth * FHPPI, Amount, nil, Size);
TempW := Copy(TempA, 1, Amount^);
if TempW[Length(TempW)]=Chr(0) then
begin
Dec(Amount^);
if Amount^ = 0 then
Amount := 2;
end
else
begin
Dec(Amount^);
if Amount^ = 0 then
Amount := 1;
end;
//当指定Width放不下一个字母或汉字时, 至少需要放下一个字母(和Word一样).防止出现死循环
SubTextList.Add(Copy(TempA, 1, Amount^));
I := I + Amount^;
end;
Dispose(Amount);
end;


 
你打算用什么来做这个报表先?
 
多人接受答案了。
 
后退
顶部