作者:王寿兵 文章摘要: 我们在用Visual FoxPro或Power Builder 等开发工具开发各种管理系统时,都要打印出一些各式各样的报表,在设计报表时,有时会遇到如下问题:报表的纵向数据列数太多,常用的宽行打印机(如LQ-1600K系列)使用最宽的纸张也无法在同一页面内打印出所有列; -------------------------------------------------------------------------------- 正文: VB6.0中调用API函数创建和使用逻辑字体 我们在用Visual FoxPro或Power Builder 等开发工具开发各种管理系统时,都要打印出一些各式各样的报表,在设计报表时,有时会遇到如下问题:报表的纵向数据列数太多,常用的宽行打印机(如LQ-1600K系列)使用最宽的纸张也无法在同一页面内打印出所有列;如果将打印机设为横向打印,纸张长度设大,虽然可在连续的几页纸上横向打印出来,但是这样的报表一方面不美观,另一方面连续的纸张容易分开,使报表同一页面分成几页,也不适于打印分发给职工的工资条。从STAR-AR3240打印机在DOS环境下能打印出24×12点阵的汉字得到启发,打印报表时采用纵横比可变的字体打印,就可灵活控制报表的页面在一页纸上打印出所有的数据列。例如要打印分发给职工的工资条,当工资的项目较多时,就需要用横向变倍的字体打印。 因为Windows 系统采用的是TrueType字体,可以平滑的无级变倍,但是纵横比不为1的汉字毕竟不是标准汉字,在Windows的系统字库中没有,然而Windows系统提供了丰富的API(应用程序接口)函数,调用CreateFont()创建理想的逻辑字体,用这些字体打印报表就可满足我们的需要。 要调用API函数,选取相应的函数,先申明,后调用。Windows系统中CreateFont()的定义如下: BOOL CreateFont( //创建逻辑字体,成功返回True,否则返回False。 int nHeight, // 所创建字体的字符高度 int nWidth, // 字体的字符平均宽度 int nEscapement, // 字符输出方向与水平向右的方向所成角度, 以0.1度为单位 int nOrientation, // 字符与基线的角度,以0.1度为单位 int nWeight, // 字符颜色的深浅度 BYTE bItalic, // 斜体属性标志(0:正常字体,非0:斜体) BYTE bUnderline, //下划线属性标志(0:无下划线,非0:有下划线) BYTE cStrikeOut,//删除线属性标志(0:无删除线,非0:有删除线) BYTE nCharSet, //字符集标识0:ANSI字符集,1:系统缺省字符集 BYTE nOutPrecision, // 输出精度 BYTE nClipPrecision, // 剪切精度 BYTE nQuality, // 输出品质 BYTE nPitchAndFamily, // 字符间距 LPCTSTR lpszFacename // 现有系统TrueType字体名称 ) 为了显示和打印用户创建的字体,还需要调用另外几个API函数:TextOut()、SelectObject()、DeleteObject(),它们的定义分别如下: BOOL TextOut( //用当前选定字体向输出设备输出字符串 HDC hdc, // 字符输出设备的句柄 int nXStart, // X-轴起始位置 int nYStart, // Y--轴起始位置 LPCTSTR lpString, // 待输出字符串的首地址 int cbString // 输出的字符个数 ); //输出成功返回True,否则返回False。 HGDIOBJ SelectObject( //为指定的字符设备设定对象(字体) HDC hdc, // 输出设备的句柄 HGDIOBJ hgdiobj // 对象的句柄 ); BOOL DeleteObject( //删除指定的逻辑对象 HGDIOBJ hObject // 对象的句柄 ); //删除成功返回True,否则返回False。 为节省篇幅,本程序仅完成了字体的创建、在屏幕上显示和简单的字符串打印示例,将其功能逐步扩充,可编制出字体灵活的报表打印程序,以满足用水平压缩字体打印超宽报表的要求。 程序的源代码如下: '在窗口体上创建3个ComboBox控件,分别命名为char_type,char_size,char_vhp; '再创建3个CommandButton控件,分别命名为cmd_prn,cmd_pre,cmd_quit '最后创建一个4个Label控件和1个Shape控件,Shape控件定义为矩形(Rectangle) Option Explicit Private Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" (ByVal H As Long, ByVal W As Long, ByVal E As Long, ByVal O As Long, ByVal W As Long, ByVal I As Long, ByVal u As Long, ByVal S As Long, ByVal C As Long, ByVal OP As Long, ByVal CP As Long, ByVal Q As Long, ByVal PAF As Long, ByVal F As String) As Long
复制本页网址和标题,发送给你QQ/Msn的好友一起分享
上一篇:VB6.0使用ADO对象连接数据库
下一篇:VB6.0中类聚集关系的实现