报表打印的求助!郁闷啊!兄弟姐妹们帮帮忙了!(10分)

C

cb1997

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在要做个报表,字段的内容有些比较长,有些比较短。我要让他在规定的范围
内自动换行,用那种控件比较合适方便呀!各位帮帮忙了!我都想了好几天了!
在这样下去元旦也过不好了:(
那为最好可以给个例子!感谢万分!
cb19970824@163.net
 
我现在用着fastReport。和王大侠的RMReport.很容易实现
 
怎么实现的
透露一下撒
 
QuickReport 3.06 能处理自动换行问题。
 
TQRRichText
 

这是我以前做过的,与你相似,可能对你有用 ,实现原理,
报表 DataSet 属性为空,使用报表的 OnNeedDate 事件,
关键是是使用了一个函数 ByteType 以下代码,你可以参考
如果改变字体大小就能容下的话,就不用换行,
procedure TForm1.Button1Click(Sender: TObject);
begin
QuickRep1.Preview;
end;

procedure TForm1.QuickRep1NeedData(Sender: TObject;
var MoreData: Boolean);
var
iLen: integer;
strField , strTemp : string;
Flag : boolean;
begin
MoreData := True;
strField := Trim(ADODataSet1.FieldByName('matName').AsString);
iLen := length(strField);
if iLen > 64 then
// 如果长度大于 64,分行显示
begin
Flag := False;
if ByteType(strField,48) = mbLeadByte then
// 如果正好在一个汉字上,向后退一位,
begin
strTemp := copy(strField,1,47);
Flag := True;
end
else
begin
strTemp := copy(strField,1,48);
Flag := False;
end;

qrlMatName.Top := -1;
qrlMatName.Font.Size := 9;
qrlMatName.Caption := strTemp ;
if Flag then
QrlTemp.Caption := Copy(strField,48,iLen-47)
else
QrlTemp.Caption := Copy(strField,49,iLen-48)
end
else
if iLen > 48 then
begin
strTemp := Copy(strField,1,iLen);
qrlMatName.Top := 10;
qrlMatName.Caption := strTemp ;
qrlMatName.Font.Size := 9;
QrlTemp.Caption := '';
end
else
begin
qrlMatName.Top := 10;
qrlMatName.Caption := strField;
qrlMatName.Font.Size := 10;
QrlTemp.Caption := '';
end;

ADODataSet1.Next;
if ADODataSet1.Eof then
MoreData := False;
end;

procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
ADODataSet1.First;
end;
 
楼上的兄弟你那是QuickReport 的,我现在是用的fastreport啊:(
 
顶部