说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

HTML文档下载 WORD文档下载 PDF文档下载
也谈为Delphi中数据库报表加网格

看了贵报第63期《为Delphi 3.0中数据库报表加上网格线》一文,笔者发现原文中的程序在不同分辨率的打印机(如180dpi的针式打印机和600dpi的激光打印机)上打印表格,效果会完全不同。如作者以针打作为他的输出打印机设计的程序,在激光打印机上输出,就会发现表格和文字错位,而且表格会打印得很小。而且原文中打印坐标的确定,必须靠反复的试验才能达到比较满意的效果。

针对原目标,笔者设计了一段程序。首先在窗体上添加一个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;

(DataSource1.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;

Android 3.0开发用的平板推荐 android.resource://这个Uri你知道吗 ADT插件的10.0.1必须要Eclipse 3.5才能升级 Android线程优先级设置方法 Android Zip文件解压缩代码 Android开发之设置断点单步调试 Android裁剪图片最简单方法 Android平台待开发软件列表 Android开发知识-3月13日总结 Android平板开发注意点 Android 3.0自带的天气预报例子代码 Loader和Fragment使用示例代码 LoaderManager - Android 3.0新特性 帮助ADT改进DDMS中的Logcat中文乱码问题 Fragment API将兼容Android 1.6到3.0 通过Linux Shell实现Android横竖屏切换 Android高手应该精通哪些内容? Android 2.2开始resources.arsc有改变 分析你的Android ANR错误 API Level对照表,更新至2.3.3 ProcessDialog结合Thread处理耗时操作 Fragment示例代码 DialogFragment示例代码 ActionBar示例代码 (二) Action Bar示例代码 (一) ActionBar使用方法 - Android活动栏(二) Action Bar使用方法 - Android活动栏(一) DialogFragment类介绍 Android Fragment使用详解 Fragment对比Activity - Android碎片介绍 Android 3.0新增日历控件CalendarView 急!急:如何使用链接来调用运行本地应用程序(exe文件)?请高手指教,多谢! 如何将一个ip捆绑多个域名,并且将域名与虚拟主机一一对应?这样作dns或路游等设置较普通设置有何异样??请高手指点,谢谢!!! 如何在一个win2k server的服务器上创建一个MSMQ队列! 请大家帮忙看一下,这个问题怎么办???? 请问vb里面的直方图用哪个控件,怎么画? vc和java,哪一个更有钱途? 請問哪里有條碼字體下載??? 看<windows程序设计>(第五版)章节上有什么顺序吗? 关于windows 可执行文件的结构问题! 如何才能得知当前路径?比如VB的App.Path? 能否向asscess添加图像字段,如果可以,那么要怎样写入和读出,请各位关注 谁知道用代码在treeview web控件中,添加node的方法? 关于金山公司的词霸那样的弹出菜单怎么做? 我从哪里可以买到powerbuilder8的多媒体教学光盘?thanks! 哪伟大侠有GB2322的汉字内码表啊? 关于对眼球经济的探讨(请各联盟盟主来看看!!!) 错在哪里? 如何才能实现将ListView的一列拖到另外一列的位置? 在VC#中订阅消息要手工输入,为什么不做成VB一样?有简单方法吗? 请问网吧管理软件是如何使屏幕变暗,并显示自己的对话框,禁止其他操作的? 第一次用VB,请指教 多线程中如何申请一块存储空间 Code Guard是什么东东?在线等待,马上给分! 这个错误是什么原因啊? 请问怎样获得默认打印机名! 哪位大虾能给小弟一点有关汉诺塔问题的资料呀?! ShellExecute(this.Handle,null,"c:\\",null,null,1)问题再探 PB6.5如何实现选择文件路径对话匡?急!在线等待。 为什么下面的enum定义要有一个方括号? dot menu是什么意思? 请教大侠为什么(333)这句不执行 如何将olecontainer载入的word文件全部显示,而不只显示第一页? 简单问题! 高手帮忙!如何通过服务器来自动查找、替换客户端文件 为何timer控件失效? @这个字符在C#中有何具体意义?不解 如何将sql server的检查约束延迟到Commit时 ado连接sql库问题 为何无法ping自己的地址呢? 滚动条判断 单个窗口程序可以运行,但是几个窗体连在一起就不可以了,好像是多线程的问题,请教各位 关于DBgrid再次求救 今天我好失败——斑竹过两天删除吧,让我宣泄一下 哎呀!!各位何必拉帮结派呢!!!这样不好啦!!影响水园大团结啊~~~没有加入帮派的人就很难在水园呆下去啦。。猪猪。。只有和他们沦为 CreateBitmap 与 CreateCompatibleBitmap 弹出一个窗体但是又不抢占其他窗体得焦点,怎么办? 利用DW-MX制作ASP.NET程序教程! vc中 调用 VB dll 时参数类型如何确定? 谢谢! 如何才能得知当前路径?比如VB的App.Path? Conn.OpenSchema怎么得到字段的信息? 一个进程写在共享内存中的数据被另一个进程读出去后的问题 不同温度的液体经过相同的管道空间,是低温物体吸热多还是高温物体吸热多液体为水,温度分别为25度,35度?液体为原油,温度分别为25度,35度?在这四种情况下,液体经过相同的管道空 铜的 摩尔质量是6.35*10的-2次方kg,密度为8.9*10的3次方kg/立方米,求(1)铜原子的 质量和 体积.(2)1m³铜所含的 原子数.(3)估算铜原子的直径 matlab中使用多个矩阵的问题用matlab做题,编了个程序,但程序中需要用到两个自变量,而且每个自变量的取值都给出来了,例如函数 y=(x1,x2);现在x1=[1,2,3,4,5,6,7,8,9]; x2=[2,3,4]; 如何将y的值都列出 表示水美的词 西藏现在的温度是多少 在matlab中,如何读出矩阵中所需要的列,将其保存在新的矩阵中?例如:x=[1 1 1 1 11 1 1 2 31 1 2 1 41 2 1 1 31 2 1 2 81 2 2 1 41 2 2 2 32 1 1 2 72 1 2 1 32 1 2 2 52 2 1 1 42 2 1 2 62 2 2 1 71 1 1 1 11 1 1 2 31 1 2 1 41 1 2 2 51 2 几个描写水美的词 西藏地区温度多少海拔多高 铁受到磁体吸引,是磁场的作用吗,与带电体在磁场中运动受力相同吗? 把一元硬币放在不透明碗的碗底,移动碗的位置,使自己恰好看不见硬币.缓慢地将水倒入碗底,你会发现什么?请解释的清晰一点,别设什么ABC的, 关于pV=nkT的问题1.k值与什么有关?2.气体分子平均动能与哪个量有关?3.气体分子势能与哪个量有关? 库房温湿度超标应采取什么措施 本来碗里没有硬币,后来往碗中慢慢倒水就会有一枚硬币在水中.怎么回事?怎么变? 西藏夏季的温度暑假想去趟西藏,不知道西藏的温度,顺便说说带些什么衣服比较合适呢?(需要带毛衣么?秋裤呢?) 化学品存放温湿度超标怎么办譬如我们公司有一些化学品,如次氯酸钠,三氯氧磷,PH标准液等有存放温湿度要求,如果温湿度超标了,应该怎么办?除了调整温湿度,是不是还要对库存品进行重检? 在碗里放硬币加水的折射现象,硬币会升高吗加水后眼睛会看见硬币,看上去碗底的硬币会升高还是下降 请问三月份西藏的气候、温度是怎样的? 并联电阻的等效电阻的倒数等于()之和 在桌子上放一只空碗,在碗底放一枚硬币,移动视线,直到刚好看不到硬币,停止移动视线,保持不动,请 一道物理题求助 草,羊,老虎这些生物形成了草原生态系统的一条食物链.这条食物链是;生产者是;消费者是; 诗歌的知识要短 现代诗歌文学常识不是古代古诗!是现代诗歌! 求函数f(x)=2x^3-9x²+12x-3的单调区间和极值点. 请写明步骤谢谢还有一问。试问a为何值时,函数f(x)=asinx+(1/3)sin3x在x=兀/3处取得极值?它是极大值还是极小值?一样请写出步骤 谢谢! 两立方水水温40度,用3000度的火加热水到100度需要多长时间 PV=nRT的理解其中n为物质的量,物质的量代指什么啊?能不能把压强理解为气压啊? 磁铁的磁场强度可以计算吗哪些磁铁的磁场强度大 怎样计算 是永磁铁 3相380伏动力电,4500安培的设备,功率是2961千瓦吧,用多粗的电缆?怎么计算急! 已知函数f(x)=x^3+mx^2+nx-2的图像过点(-1,-6),且函数g(x)=f'(x)+6x的图像关于y轴对称.求m,n的值.我做出来是m=3,n=6 f ' (x)=3x^2+2mx+n,g(x)为偶函数,所以满足g(x)=g(-x),g(x)=3x^2+2mx+n+6x,所以就有3x^2+(2m+6)x+n=3x^2-(2m 磁体周围的磁场大小怎么算?就是比如半径r的球形永磁体,在距球心xm处的磁场大小怎么算?最好有公式推导和数据.另,一个永磁体和一个相同半径的无磁性的钢球相距x米的话怎么算? 实验题(月球上的环形山是怎样形成的) 我的假设:实验所需的材料:实验步骤设计:怎样使模拟的环形山大小不一,深浅不同?方法是: 为什么函数f(x)=(x-1)(x+1)²(x-2)³的极值点有三个? 地球磁场强度有多大? 关于古诗的知识,短一点! 函数f(x)=(x²-1)³+2的极值点是( ) 并联电路总电阻等于各个并联电阻倒数之和的倒数对不对 已知三相表的三根线电流怎么算功率?A线30.3安 B线28.5安 C线23.7安.怎么算功率啊? 高一数学必修一函数的性质已知f(x)=-4x的平方+4ax-4a-a的平方在区间[0,1]内有一最大值-5,求a的值. 下图是某生态系统中三种生物数量的直方图 若甲乙丙构成一条食物链 则可以表示为为什么呢 有没有规定生产者 消费者和分解者的数量 哪个最多 哪个最少呢 哪些固体与液体的反应是吸热反应 湖北省的枣阳市为什么叫“枣阳” 函数性质y=4sin(X+30°)是什么函数. 不用热字描写景物 表现天气炎热和人们的心情 湖北枣阳 请教一道一直以来都不懂的物理题.一直都没有弄懂..如果在竖直方向将弹簧测力计调零,再拉木块做匀速直线运动,弹簧测力计的示数是大于木块实际所受摩擦力还是小于?标答说是小于,可是为 两段用写景的文字表达心情,写出表达了什么心情.200字左右,要表现出心情...从别的文中摘抄... 在室温下,冰熔化成水后所具有的能量与水的能量那个高? 一道物理题.懂进.随着人们环保意识的日益提高,节水型洁具逐渐进入百姓家庭.所谓节水型洁具,是指每冲洗一次的耗水量在6L以内的洁具.某家庭新安装了一套耗水量为5L的节水洁具,而原有 请教三相电与单相电混合怎么计算电流现在一个电箱,进线是380V的,电箱分给其他支路有的是接三相电机,有的是接照明、单相插座的,请问在电箱的系统图中要计算Ijs电流是怎么算?是看成全部 若函数y=mx2-6x+2的图像与x轴只有一个公共点,求m的值. 推理得出并联电路中总电阻的倒数,等于各并联电阻的倒数之和. 单相电流计算公式 .(09·广安)小聪家最近正在装修,爸爸去订了纯铜电线,并带回了样品.小聪用手弯曲点线,感到很硬.他猜想,这种电线未出如商家所言是纯铜制成.小聪想帮助爸爸鉴别材料的真实性:他觉得只要测 为什么并联电路的总电阻是分电阻的倒数和 今天看到一个收硬币的.价格非常高,请问.目前市面上关于硬币的价格? 问一道物理难题一根一头粗一头细的木料,让细的一端着地抬起粗的一端,需用120n,让粗端着地抬起细端,需用力80n,这根木料受到的重力是 A400n B200n C100n D40n 如果有答案,请说明一下理由, matlab把多个矩阵保存在同一个文件中matlab中如何将多个矩阵保存到同一个文本文件中?我有17个同维矩阵A,B,C.想保存为以下格式,并且相邻矩阵间要有一行空行:ABC.请问您用dlmwrite怎么写的, 固体变成液体一定吸热吗(假设反应前后物质温度不变)固体变成液体,分子间距增大.但是分子间距增大,分子势能可能减小也可能增大.也就是说,固体变成液体,可能吸热也可能放热咯? 问一道关于物理的问题.今天上课老师说 因为地心引力的原因,在同一高度,把一个球扔出去,同时再向下放出一个球,两个球会同时落地.可是我就奇怪了,要使用一把枪打出一颗子弹,在同时向地 matlab中如何将多个矩阵保存到同一个文本文件中?我有17个同维矩阵A,B,C.想保存为以下格式,并且相邻矩阵间要有一行空行:ABC.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘