| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1092 人关注过本帖
标题:请教高手打印预览的问题,还望赐教
只看楼主 加入收藏
yibai111a
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-11-15
收藏
 问题点数:0 回复次数:5 
请教高手打印预览的问题,还望赐教
VB6+ACCESS
想问下打印报表的时候,VB6有什么好的方法可以实现打印预览?
有没第三方控件来方便的实现?
最后能详细点,举例
谢谢!!!
搜索更多相关主题的帖子: 打印 预览 
2008-11-16 09:40
三断笛
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:31
帖 子:1621
专家分:1617
注 册:2007-5-24
收藏
得分:0 
Datareport不预览?我用的水晶报表
2008-11-16 10:44
meihonganddulon
Rank: 1
来 自:河南郑州
等 级:新手上路
帖 子:54
专家分:4
注 册:2008-7-18
收藏
得分:0 
ActiveReports
2008-11-17 11:36
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4943
专家分:30067
注 册:2008-10-15
收藏
得分:0 
模块代码
程序代码:
Public 行间距  As Long
Public 上边距 As Long
Public 左边距 As Long
Public 下边距 As Long
Public 右边距 As Long
Public 行数 As Long

Public 间隔 As Long    '每一线在当前字段之前多少
Public 页宽 As Long
Public 页高 As Long

Public Sub init()
    '数据定义,单位为缇.如果你数据是写在设置文件里的,在这里处理,如果是A4纸,按A4纸的长宽换算为 缇
    
    间隔 = 30
    页高 = 14742
    页宽 = 10206
    左边距 = 1134
    右边距 = 1134
    上边距 = 1134
    下边距 = 1134
    行间距 = 250
    
    '计算行数
    行数 = (页高 - 上边距 - 下边距) / 行间距 - 2
    
End Sub

Public Sub 打印(rs As Recordset, 标题 As String, 表格头() As String, wz() As Long, printyn As Boolean)
    Dim obj As Object
    'Dim obj As PictureBox          '写代码时用的
    If printyn Then     '真,打印
        Set obj = Printer
    Else                '假,模拟显示
        Load 模拟显示
        Set obj = 模拟显示.载入         '此函数返回一个新的 picturebox 对象
    End If
    
    Dim i As Long
    Dim j As Long
    
    Do
    With obj
        '显示标题
        i = LenB(StrConv(标题, vbFromUnicode))
        .Font.Size = 12
        .CurrentY = 上边距
        .CurrentX = (页宽 - 左边距 - 右边距 - i * 20) / 2
        obj.Print 标题
        
        .Font.Size = 9
        .Font.Bold = True
        For j = 0 To rs.Fields.Count - 1
            .CurrentY = 3 * 行间距 + 上边距
            .CurrentX = wz(j) + 间隔 + 左边距
            obj.Print 表格头(j)
        Next j
        obj.Line (左边距, 3 * 行间距 + 上边距 - 间隔)-(页宽 - 右边距, 3 * 行间距 + 上边距 - 间隔)
        
        .Font.Bold = False
        For i = 2 To 行数
        
            For j = 0 To rs.Fields.Count - 1
                .CurrentY = (i + 2) * 行间距 + 上边距
                .CurrentX = wz(j) + 间隔 + 左边距
                
                obj.Print rs.Fields(j)
            Next j
            obj.Line (左边距, (i + 2) * 行间距 + 上边距 - 间隔)-(页宽 - 右边距, (i + 2) * 行间距 + 上边距 - 间隔)
            rs.MoveNext
            If rs.EOF Then
                i = i + 1       '因为用 exit for 退出循环后,i不会自动+1,所以要手动+1,为了画最后一根横线
                Exit For
            End If
        Next i
            obj.Line (左边距, (i + 2) * 行间距 + 上边距 - 间隔)-(页宽 - 右边距, (i + 2) * 行间距 + 上边距 - 间隔)
            
        '画竖线
            obj.Line (左边距, 3 * 行间距 + 上边距 - 间隔)-(左边距, (i + 2) * 行间距 + 上边距 - 间隔)
        For j = 1 To rs.Fields.Count - 1
            'obj.Line (300, wz(j))-(300 + i * 200, wz(j))
            obj.Line (wz(j) + 左边距, 3 * 行间距 + 上边距 - 间隔)-(wz(j) + 左边距, (i + 2) * 行间距 + 上边距 - 间隔)
        Next j
        obj.Line (页宽 - 右边距, 3 * 行间距 + 上边距 - 间隔)-(页宽 - 右边距, (i + 2) * 行间距 + 上边距 - 间隔)
    
    End With

    If Not rs.EOF Then  '没有到最下页
        If printyn Then     '真,打印
            obj.NewPage
        Else                '假,模拟显示
            Load 模拟显示
            Set obj = 模拟显示.载入
        End If
    Else
        If printyn Then
            obj.EndDoc
        Else
            模拟显示.Show
            Call 模拟显示.刷新
        End If
        Exit Do
    End If
    
    Loop
    
End Sub


模拟显示的窗体
控件:5个按钮 command1--command5
一个combobox , 一个 Label
三个 Picturebox ,一个是1,然后2放在1里面,还有一个叫 xxx(0)
一个竖滚动条(VS),一个横滚动条(HS)
代码如下:
程序代码:
Option Explicit
Public 页数 As Long        '当前页数
Public 总页数 As Long      '总页数

Private Sub Combo1_Click()
Select Case Combo1.ListIndex
    Case 0
        Picture2.Width = 页宽 / 2
        Picture2.Height = 页高 / 2
    Case 1
        Picture2.Width = 页宽
        Picture2.Height = 页高
    Case 2
        Picture2.Width = 页宽 * 2
        Picture2.Height = 页高 * 2
End Select

    If Picture1.Width > Picture2.Width Then
        hs.Visible = False
        hs.Value = 0
        Picture2.Left = (Picture1.Width - Picture2.Width) / 2
    Else
        hs.Visible = True
        hs.Value = 0
        Picture2.Left = 120
    End If
    
    Call 刷新
End Sub

Private Sub Command1_Click()
    Unload Me
End Sub

Private Sub Command2_Click()
    If 页数 > 1 Then 页数 = 页数 - 1
    Call 刷新
End Sub

Private Sub Command3_Click()
    If 页数 < 总页数 Then 页数 = 页数 + 1
    Call 刷新
End Sub

Private Sub Command4_Click()
页数 = 总页数
Call 刷新
End Sub

Private Sub Command5_Click()
页数 = 1
Call 刷新
End Sub

Private Sub Form_Load()    
    Combo1.AddItem "50%"
    Combo1.AddItem "100%"
    Combo1.AddItem "200%"
    
    Combo1.ListIndex = 1
End Sub

Private Sub Form_Resize()
On Error Resume Next
    Picture1.Width = Me.Width - Picture1.Left - 240
    Picture1.Height = Me.Height - Picture1.Top - 720
    
    hs.Width = Picture1.Width - vs.Width
    hs.Top = Picture1.Height - hs.Height - 60
    
    vs.Height = Picture1.Height - hs.Height
    vs.Left = Picture1.Width - vs.Width - 60
    
    If Picture1.Width > Picture2.Width Then
        hs.Visible = False
        hs.Value = 0
        Picture2.Left = (Picture1.Width - Picture2.Width) / 2
    Else
        hs.Visible = True
        hs.Value = 0
        Picture2.Left = 120
    End If
End Sub

Private Sub hs_Change()
If hs.Visible Then
    Picture2.Left = 120 - hs.Value * (Picture2.Width / 15)
End If
End Sub

Private Sub Picture2_Paint()
    Call 刷新
End Sub

Private Sub vs_Change()
    Picture2.Top = 120 - vs.Value * (Picture2.Height / 15)
End Sub

Public Sub 刷新()
    If 页数 < 1 Then 页数 = 1
    If 页数 > 总页数 Then 页数 = 总页数
    
    Picture2.PaintPicture xxx(页数).Image, 0, 0, Picture2.Width, Picture2.Height, 0, 0, 页宽, 页高
'    Picture2.PaintPicture xxx(页数).Image, 0, 0, xxx(页数).Width * bl, xxx(页数).Height * bl

    Label1.Caption = 页数 & " / " & 总页数
End Sub

Public Function 载入() As PictureBox
Dim i As Long
总页数 = 总页数 + 1
i = 总页数
    Load xxx(i)
    xxx(i).Width = 页宽
    xxx(i).Height = 页高
Set 载入 = xxx(i)

End Function

授人于鱼,不如授人于渔
早已停用QQ了
2008-11-17 22:22
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4943
专家分:30067
注 册:2008-10-15
收藏
得分:0 
调用方法:
call 打印(表,标题,表格列标题(),表格各列位置(),是否是打印)
最后一格,真就是打印,假就是模拟显示.
表格列标题() 和 表格各列位置() ,表里有几列,就要定义为多少个元素.
这里面的坐标及长度单位全是以缇为单位.

今天临时写的.如有错误,难免.没有经过详细调试.

授人于鱼,不如授人于渔
早已停用QQ了
2008-11-17 22:27
快速回复:请教高手打印预览的问题,还望赐教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016509 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved