也谈为Delphi中数据库报表加网格

2016-02-19 17:26 7 1 收藏

生活已是百般艰难,为何不努力一点。下面图老师就给大家分享也谈为Delphi中数据库报表加网格,希望可以让热爱学习的朋友们体会到设计的小小的乐趣。

【 tulaoshi.com - 编程语言 】

  笔者设计了一段程序。首先在窗体上添加一个DBGrid来显示我们所要打印的数据,在这里,DBGrid不只是起到显示数据的作用,而且用户对DBGrid作的调整,例如改变了各字段的排列顺序,各字段的显示宽度等,都将直接反映到打印结果中去,也就是说,我们实际上就是要把DBGrid的内容直接输出到打印机。以下程序在Win 98+Delphi 4下编译通过,代码如下:

  

procedure TForm1.Button2Click(Sender: TObject);const   LeftBlank=1; //定义页边距,单位厘米   RightBlank=1;   TopBlank=1;   BottomBlank=1;var   PointX,PointY:integer;   PointScale,PrintStep:integer;   s:string;   x,y:integer;   i:integer;begin //获取当前打印机的分辨率PointX:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/2.54);  PointY:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSY)/2.54);  //根据打印机和屏幕的分辨率计算出从屏幕转换到打印机的比例 PointScale:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/Screen.PixelsPerInch+0.5); //横向打印  printer.Orientation:=poLandscape;   //打印的字体和大小  printer.Canvas.Font.Name:=′宋体′;  printer.canvas.Font.Size:=10;   //根据字体的大小确定每行的高度  s:=′漳州市刑警支队′;  PrintStep:=printer.canvas.TextHeight(s)+16;   //打印的起点位置  x:=PointX*LeftBlank;  y:=PointY*TopBlank;   //DataSource1是DBGrid1所连接的数据源  if ((DataSource1.DataSet).Active=true) and ((DataSource1.DataSet).RecordCount〉0) then  begin  printer.BeginDoc;  (DataSo e1.DataSet).First;  while not (DataSource1.DataSet).Eof do  begin //打印DBGrid中的所有列   for i:=0 to DBGrid1.FieldCount-1 do   begin  //假如所要打印的列超出了打印范围,则忽略该列  if (x+DBGrid1.Columns.Items[i].Width*PointScale)〈=(Printer.PageWidth-PointX*RightBlank) then   begin //画表格线//每页的第一行打印表头  Printer.Canvas.Rectangle(x,y,x+DBGrid1.Columns.Items[i].Width*PointScale,y+PrintStep);  if y=PointY*TopBlank then   Printer.Canvas.TextOut(x+8,y+8,DBGrid1.Columns[i].Title.Caption)   else   Printer.Canvas.TextOut(x+8,y+8,DBGrid1.Fields[i].asString);  end; //计算下一列的横坐标   x:=x+DBGrid1.Columns.Items[i].Width*PointScale;  end;  if not (y=PointY*TopBlank) then(DataSource1.DataSet).next;   x:=PointX*LeftBlank;  y:=y+PrintStep; //换页  if (y+PrintStep)〉(Printer.PageHeight-PointY*BottomBlank) then  begin   Printer.NewPage;   y:=PointY*TopBlank;   end;  end;  printer.EndDoc;   (DataSource1.DataSet).First;   Application.MessageBox(′打印完成′,′打印′,32);  end;end;

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1615200.html

延伸阅读
标签: Delphi
下面就来介绍一下这些控件的简单应用: 指定一个数据源 数据控件必须通过TDataSource构件连接数据集。TDataSource构件扮演的角色实际上就是数据控件与数据集之间的桥梁。首先,把一个数据集构件放到窗体或数据模块上,设置它的DatabaseName属性指定要访问的数据库,设置它的TableName属性指定要访问的表。接着,把一个TDataSo...
delphi 最吸引人的特点之一就是它的强大的数据库访问能力,通过database desktop 工具可方便的建立、编辑数据库。由于实际原因我们往往需要在程序运行状态下动态建立某个数据库。 如果你让用户用database desktop 工具手工建立数据表那么你写的程序将会打大折扣,不过你不用担心delphi完全可以用语言来完成此功能,为我们提供方便。我...
标签: SQLServer
在SQL Server 2005中,它的另外一个强大的新特点是数据库快照。数据库快照是一个数据库的只读副本,它是数据库所有数据的映射,由快照被执行的时间点来决定它的内容。 这些数据库快照在报表方面是非常有价值,因为在快照数据库中或者在原数据库中,对于任何查询而言没有锁就将被执行。快照也可以使用在灾难恢复中,因为你可以将现有的数据恢...
Delphi是著名的Borland公司开发的可视化软件开发工具。有这样一句话最为经典、贴切的描述了Delphi——“真正的程序员用C,聪明的程序员用Delphi”。很多人把Delphi称为是第四代编程语言,它具有简单、高效、功能强大等特点。和Visual C++比较,Delphi更简单、更易于学习掌握,而在功能上却毫不逊色;和Visual Basic相比,Delphi则功能更强大、...
编辑数据库软件时,为了数据安全,往往需要在数据库里加入密码,打开时就需要密码才能浏览,但是当我们在程序里调用时也需要不时的输入密码,这就照成了不遍,所以利用以下办法,输入密码后才打开数据库: Session.AddPassword(abc);{发送的密码} Table1.Open;

经验教程

594

收藏

56
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部