我想实现打印三行页眉如下所示
'--------------------------------------------------
第一行:                 入库单(这行字体要比下面两行大些)
第一行: 项目一:xxx     项目二:xxx     项目三:xxx   
第一行: 项目四:xxx     项目五:xxx     项目六:xxx
'--------------------------------------------------
我只想到两种方式
1.Header = "...|入库单" & vbLf & "项目二:xxx" & vbLf & "项目五:xxx|..."
用上面的可以实现三行页眉,但不知道如何来设每一行的字体大小!
2.Header = "...|{\fs18 入库单 \LINE\fs12 项目二:xxx \LINE\fs12 项目五:xxx}|..."
用上面的可以实现三行页眉,但是会在显示汉字时把汉字变成不可认的Unicode格式的字符!
-------------------------------------------如果不用.header,换成用.Paragraph="xxxx",对于每一行中的三个项目,又不能很好的放到最左边,正中间,最右边。不知如何是好了,请大家帮忙!

解决方案 »

  1.   

    用XML不是很好吗?
    比如:
    <XML>
    <页眉 字体="黑体" 颜色="FF0000" 大小="18" 粗体="True" X="100" Y="30">
    入库单
    </页眉>
    <页眉 字体="宋体" 颜色="000000" 大小="12" 粗体="False" X="0" Y="50" Value="">
    项目一:
    </页眉>
    <页眉 字体="宋体" 颜色="000000" 大小="12" 粗体="False" X="40" Y="50" Value="">
    项目二:
    </页眉>
    <页眉 字体="宋体" 颜色="000000" 大小="12" 粗体="False" X="80" Y="50" Value="">
    项目三:
    </页眉>
    </XML>然后用吧XML信息读出,用API来画图不就可以了吗
      

  2.   

    你好SupermanKing(人类)  不过对于项目一,二,三要分别用XY来指定位置。
    不象用"|"分隔符,自把它们放到最左边,最中间,最右边。而不用是事去计算它们的开始位置!这对于是先不知道用什么样的纸,也不知道项目是多长的字符串来说非常方便!
    这是我的一点想法!另外vsprint还有一个问题不好解决
    “对于打印双行表头的表来说,打印合并部分非常不好处理”,以前在网上看了一个vsprint实现打印的例子,但要事先确定每页最多打印的行数。还有我也看了vsprint的帮助,找到一个例子,这回虽然不用事先指定行数了吧,但对每页的双层表头的第一层和第二层要合并的部分又不好处理了,最后想改用.RenderControl = vsflexgrid1.hWnd来实现,但它的表格线条都太不好看了,又不知道怎么来改。现在真有那种鱼与熊掌不能兼得的感觉!
      

  3.   

    呵呵,不知道你说什么。我以为你是自己用VB写控件来打印呢。我以前开发过一个控件是专门打印用的,在VB里调用,有一个
    编辑器,只要在编辑器中创建一个页面,输入纸张大小,然后
    就可以插入页眉、页脚,在页眉中还可以插入其他对象,如文
    字、图片、变量区域、表格区域,可以用鼠标托动对象到纸张
    的任何地方,还可以对对象设置相关的属性。最后可以将信息
    保存成XML作为打印脚本,然后在VB里加载控件,用控件的
    LoadXML方法再入脚本,这时用XMLItem集合设置变量内容和数
    据集,然后用PlayPrint开始打印,纸张数量会根据数据集里的
    数据数量而定,自动排表,这时页眉和页脚的页数变量会根据
    页数递增。不知道你是不是要自己开发,所以不就告诉你一些开发时大体
    的方向,希望能对你有帮助。
      

  4.   

    首先谢谢你的回复
    可以是我说的不是很明白,我不是自已开发打印控件。
    我只是对一个SQL查询进行打印,
    打印出来样子如下
    -----------------------------
    日期 |单号|       金额      |
         |    |入库金额|销售金额|
    -----------------------------
    050201 R1   30
    050203 C6             50 ....
    其中,日期,单号,需要上下合并
    金额需要左右合并。请问你是如实现打印这样的表的?-----
    你做的那个控件在网上有下载的吗?收费不?
      

  5.   

    呵呵,我以前是搞用友二次开发的,所以控件是基于用友软件的。
    没有什么市场价值,所以也就没有公布。
    不过如果你有意思按我上面说的方向去开发也不难,就是要花些时
    间来写码。
    不过像你说的用SQL来打印数据我到没有想过,所以也没试过,我都
    是自己用程序打印数据的,可能帮不上忙了。
      

  6.   

    你作过用友呀,佩服。现在在那高就呀!在做什么工作!
    ---------
    简单说吧,有一个VSflexgrid1:
    VSFlexGrid1.FixedRows = 2
    VSFlexGrid1.MergeCells = flexMergeFixedOnly
    VSFlexGrid1.MergeRow(0) = True要求对VSflexgrid的数据进行打印。
    打印出来样子要如下:(每页都要有表头字段的名字)
    -----------------------------
    日期 |单号|       金额      |
         |    |入库金额|销售金额|
    -----------------------------
    050201 R1   30
    050203 C6             50 
    ...
    -----------------------------实际上最简单的办法就是用.RenderControl = vsflexgrid1.hWnd来实现。但它打出来的表格线太不好看了!有没有其它方法打印vsflexgrid。(不要人为事先规定每页打印的行数!)