什么控件制作报表较好?(20分)

  • 主题发起人 主题发起人 wghua
  • 开始时间 开始时间
W

wghua

Unregistered / Unconfirmed
GUEST, unregistred user!
什么控件制作报表比较灵活、方便,最好象Excel,允许最终用户对某些
单元进行编辑。Quick Report Pro 如何?哪儿有比较好的版本下?
 
Report Builder, Fastreport......
Download:
http://www.inprises.com
 
当然是Report Builder
 
强烈推荐report builder
但是王寒松的中国报表也可以
 
report builder
http://www.net-wing.net/kangwei
 
report builder,还有report Machine(从fast report)改编的,也不错,建议以后要坚决放弃quick report。
 
report builder 是一好东东!
 
各位强烈推荐report builder,但小弟下载后不知怎么用,请问哪里有
这方面的资料?另外,中国报表哪里有?是否特适合中国式的报表?
 
我感觉report machine 很不错!比fast report 好多了!
 
谁用BCB Build成功report builder?
.bpk ...我已建好(10~个
RTTI部分(class function)过不了
 
我想打印传统的中国报表,格式如下:
┌───┬───┐
  │ 中 │ 文 │
  ├───┼───┤
  │字体 │改变 │
  └───┴───┘
用什么工具较好?以前我用文本方式直接打印,却遇到改变
字体大小后,打印的表格线不能连续。如果是report builder,
请问怎么用?我从例程中没有找到有以上那种方式的表格。
 
quick report 也可满足你的要求,且不用下载。
 
ScreenReport For Delphi,小弟认为此报表控件很不错
delphi.yesite.com 有下载
报表打印控件ScreenReport for Delphi使用说明
一、功能说明
ScreenReport打印控件是一个所见即所得的Delphi打印控件。使用这个控件可以在你的应用程序中很方
便地进行数据报表的预显示和打印。
二、安装

1.Delphi 1.0 安装

作为Delphi的控件安装:
第一、将/Delphi1 目录下的所有文件拷贝到Delphi目录的LIB或其他目录下;
第二、选择“Options”菜单的“Install Components...”子菜单进入Install Components窗口;
第三、点“Add”按钮;
第四、点“Browse”按钮;
第五、选择PRINTP.DCU;
第六、点“ Ok”按钮,Delphi重新编译系统库。
若出现安装不上的情况,一般是Delphi的Bin目录下的complib.dcl或其他正在使用的控件库文件
有问题,检查一下搜索路径上是否有冲突的或版本不符的文件。若还不行,重新安装Delphi后一般
就可解决。
2.Delphi 3 及Delphi 4 安装
作为包安装:
第一、将相应版本目录下的所有文件拷贝到Delphi目录的LIB或其他目录下;
第二、选择“Component”菜单的“Install Packages...”;
第三、点“Add”按钮;
第四、选择相应的Screport.dpl(Delphi3)或Screport.bpl(Delphi4) 并点“打开”;
第五、点“OK”按钮;

************************************* 注意 ******************************************

第六、控件装上后,再选'Tools'->'Environment Options'菜单,在'Library'页的'Library Path'
中手工加入Printp.dcu 所在的路径。否则联接程序时可能无法找到printp.dcu。

*************************************************************************************
三、重要属性
1. PrnPanel: 要打印内容所在的Panel。类型为TPanel。
只有该Panel上的内容才能打印输出。如果没有该Panel,可通过OnPaint事件进行打印。

2. DetailDatasource: 需要循环打印的数据源。用于DBGrid的打印,类型为TDatasource。
3. BottomTitle: 表底行内容。类型为String。
若为空,不打印页脚内容;否则打印页脚内容。页脚内容中可代入如下设置参数及变量:
%BOTTOM% :若有此项,则页脚内容将打印在页底边,否则紧接表尾打印
%GETPAGE%:页码变量
%GETPAGESCOUNT%:总页数变量
%GETDATE%: 日期变量
%GETTIME%: 时间变量
注意:以上变量只能用大写,可放在BottomTitle中的任意地方
如:
'昆明二十一世纪软件工作室制表%BOTTOM% %GETDATE% %GETTIME% 第%GETPAGE%页 共%GETPAGESCOUNT%页'
4. BottomTitleFont: 表底行的字体属性。类型为TFont。
5. DrawMargins: 是否打印边框。类型为Boolean。
值 含义
========================
True 打印边框
False 不打印边框
6. FitPageHeight:表格针对纸长自动进行缩放。
值 含义
========================
True 自动缩放
False 不缩放
7. FitPageWidth:表格针对纸宽自动进行缩放。
值 含义
========================
True 自动缩放
False 不缩放
8. FootLine:是否画页脚横线
值 含义
========================
True 画
False 不画
9. FootTitle: 页脚行内容。类型为String。同样可带入参数和变量,参见BottomTitle;
10. FootTitleFont: 页脚行的字体属性。类型为TFont。
11. GridBorderStyle: DBGrid的网格线类型。类型为TGBStyle。
值 含义
===============================
gbsNone 不打印分隔线
gbsHorz 打印水平分隔线
gbsVert 打印垂直分隔线
gbsBottom 打印水平分隔线
gbsBoth 打印水平、垂直分隔线
12. HeadLine:是否画页眉横线
值 含义
========================
True 画
False 不画
13. HeadTitle: 页眉行内容。类型为String。同样可带入参数和变量,参见BottomTitle;
14. headTitleFont: 页眉行的字体属性。类型为TFont。
15. HMiddle: 打印内容是否水平居中。类型为Boolean。当FitPageWidth为True时此属性无效。
值 含义
========================
True 水平居中
False 居左
16. myOrientation: 打印方向。类型为TPrinterOrientation。
值 含义
===============================
poPortrait 纵向打印
poLandscape 横向打印
17. PageCount: 报表总页数,可在运行时取出,设计时可不用。
18. PageSum: 是否对DBGrid的数值字段进行自动页合计。类型为Boolean。
值 含义
=========================
True 自动计算并打印页合计
False 不打印页合计
19. PageSumLabel: 页合计行的标题。缺省为“页合计”,可自行修改。
20. PreviewMode: 是否预显示打印内容。类型为Boolean。
值 含义
=========================
True 预显示
False 不预显示
21. PrinterPaperSize: 设置打印纸的类型。类型为TPrinterPaperSize。
值 含义
===============================
ppsLetter Letter, 8 1/2 x 11 in.
ppsLedger Ledger, 17 x 11 in.
ppsLegal Legal, 8 1/2 x 14 in.
ppsA3 A3, 297 x 420 mm
ppsA4 A4, 210 x 297 mm
ppsA5 A5, 148 x 210 mm
ppsB4 B4, 250 x 354 mm
ppsB5 B5, 182 x 257 mm
pps11x17in 11 x 17 in.
ppsUser User-defined
22. PrintHeight:自定义纸张的长度,以毫米为单位。

23. PrintWidth:自定义纸张的宽度,以毫米为单位。
24. PrnEmpty:对于DBGrid是否用空行填满指定的打印行数。类型为Boolean。
值 含义
=============================
True 要用空行填满
False 不用空行填满
25. TitleTitle:报表的标题。同样可带入参数和变量,参见BottomTitle。
26. TitleTitleFont:标题字体。
27. TopMargin:纸上部留出的空白,以厘米为单位。可有小数。
28. TotalSum: 是否对DBGrid的数值字段进行自动总合计。类型为Boolean。
值 含义
=========================
True 自动计算并在最后一页打印总合计
False 不打印总合计
29. TotalSumLabel: 总合计行的标题。缺省为“总合计”,可自行修改。
30. HMiddle: 打印内容是否垂直居中。类型为Boolean。当FitPageHeight为True时此属性无效。
值 含义
========================
True 垂直居中
False 居上
四、方法
1. function PrinterView(const pCount,recCount:Integer):Boolean;
功能: 调用打印控件
参数:pCount: 总页数,当为0时,按recCount来计算,在不处理OnPaint事件时没有用.
recCount:指定DBGrid每页打印的记录数
2. procedure PainInit(Canvas,PageNumber);
功能: 用于处理OnPaint事件时初始化打印环境,此函数必须在绘制内容前调用.
参数: 只能为Canvas和PageNumber,见后面的例子;
五、事件

1.
procedure <Form名>.<控件名>Paint(Canvas: TPreviewCanvas;
PageNumber : LongInt);
打印事件。用于程序绘制打印内容,若处理了此事件,则用此事件的处理过程替代原来的
屏幕打印程序
参数:Canvas -->程序员自己的打印Canvas,类型为TPreviewCanvas。
PageNumber -->当前打印的页号,类型为LongInt。
TPreviewCanvas可以使用的打印函数如下:关于它们的使用请参看TCanvas.
1. procedure Rectangle( x, y, x2, y2 : integer );
2. procedure RoundRect( x1, y1, x2, y2, x3, y3 : integer );
3. procedure TextOut( x, y : integer;
const text : string );
4. procedure TextRect( Rect : TRect;
X, Y : Longint;
const Text : string );
5. procedure FloodFill( X,Y : Longint;
Color : TColor;
FillStyle : TFillStyle );
6. procedure StretchDraw( const rect : TRect;
Graphic : TGraphic );
7. function TextHeight( const text : string ) : Longint;
8. function TextWidth( const text : string ) : Longint;
9. procedure FillRect( const rect : TRect );
10.procedure MoveTo( x, y : longint );
11.procedure LineTo( x, y : longint );
12.procedure SetFont( font : TFont );
13.procedure Arc( x1, y1, x2, y2, x3, y3, x4, y4 : integer );
14.procedure BrushCopy( const dest : TRect;
Bitmap : TBitmap;
const Source : TRect;
Color : TColor );
15.procedure Chord( x1, y1, x2, y2, x3, y3, x4, y4 : integer );
16.procedure FrameRect( rect : TRect );
17.procedure MoveTo( x, y : longint );
18.procedure LineTo( x, y : longint );
例子:
procedure TForm1.Preview1Paint(Canvas: TPreviewCanvas;
PageNumber : LongInt);
var
Font : TFont;
rect : TRect;
val : string;
begin
if PageNumber = 1 then
begin

Preview1.PainInit(Canvas,PageNumber);
Canvas.font.size:=12;
rect.left:=PixelsToTwips(1,canvas);
rect.top:=PixelsToTwips(1,canvas);
Canvas.Textout( rect.left, rect.top, 'Printp打印测试' );
rect.left:=PixelsToTwips(2,canvas);
rect.top:=PixelsToTwips(PointsToPixels(12),canvas);
Canvas.Textout( rect.left, rect.top, 'Printp打印测试');
rect.top := 0;
rect.left := Canvas.TextWidth('The');
rect.bottom := Canvas.TextHeight( 'Printp打印测试' ) + 200;
rect.right := rect.left + Canvas.TextWidth( 'Printp打印测试' ) + 200;
Canvas.Brush.Color := clBlack;
Canvas.FillRect( rect );
Canvas.Font.Color := clWhite;
Canvas.Textout( rect.left + 100, 100, 'Printp打印测试' );
Canvas.Brush.Color := clWhite;
Canvas.Font.Color := clBlack;
Canvas.Font.Size := 12;
rect.left := Canvas.TwipMaxX - Canvas.TextWidth('Newsletter Number')
- Canvas.TextWidth( '***00/00/00' ) - 100;
Canvas.TextOut( rect.left, 100, 'Printp打印测试' );
rect.top := 200+Canvas.textheight('N');
val := '1';
Canvas.TextOut( Canvas.TwipMaxX - 100 - Canvas.TextWidth(val), 100,
val );
val := FormatDateTime( 'dd/mm/yy', Now );
Canvas.TextOut( rect.left, rect.top, '日期测试' );
Canvas.TextOut( Canvas.TwipMaxX - 100 - Canvas.TextWidth(val),
rect.top, val );
rect.top := rect.bottom + 600;
Canvas.Font.Size := 12;
val := 'This week''s new releases... 20% OFF TO CARD HOLDERS for the first month of release';
rect.left := (Canvas.TwipMaxX - Canvas.TextWidth(val)) div 2;
Canvas.TextOut( rect.left, rect.top, val );
Canvas.Font.Style := [];
rect.bottom := rect.top + Canvas.TextHeight( 'W' ) + 100;
rect.top := 20;
rect.left := 20;
rect.right := Canvas.TwipMaxX - 20;
Canvas.Brush.Color := clBlack;
Canvas.FrameRect( rect );
Canvas.Brush.Color := clWhite;
end
else
begin
Canvas.Font.Size := 36;
Canvas.Textout( 1440, 1440, '打印测试' );
Canvas.Font.Size := 36;
Canvas.TextOut( 4*1440, 20, 'Page Number :'+inttostr( PageNumber ) );
end;
end;

2.
procedure <Form名>.<控件名>CustomControl(Canvas: TPreviewCanvas;
vCtrl: TControl;
Rect: myTRect);
自定义控件事件。当ScreenReport遇到非Delphi标准的第三方控件时产生此事件。vCtrl为此控件。你可以
  在这里自行编制此控件的打印代码。当然你要画在ScreenReport给你的画布Canvas的Rect矩形区域中。
myTRect与TRect用法相同。只不过myRect中的元素是LongInt类型。Canvas可使用的绘图函数同上。注意这些
  函数的绘图单位是twips而不是像素点!
  
  例子:
 procedure TForm1.Preview1CustomControl(Canvas: TPreviewCanvas;vCtrl: TControl;
Rect: myTRect);
var
str1:string;
 begin
if vCtrl is TxxLabel then
{第三方Label控件}
begin
Canvas.SetFont((vCtrl as TxxLabel).Font);
str1:=(vCtrl as TxxLabel).Caption;
Canvas.TextOut(rect.left,rect.top,str1);
end;
 end;
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部