可以
Set Picture1.Picture = MSFlexGrid1.Picture可以看到其数据内容
Printer.PaintPicture MSFlexGrid1.Picture, 0, 0就打印了
分页有些麻烦,不过也能实现,一会给你贴代码参考参考

解决方案 »

  1.   

    代码多了些,变量也没定义,不能直接用,参考而已
    总体思想就是把Grid的图形发到pictureBox中去,按分页的次数发。
    然后重设Grid,再发一次
     SendMessage MFGridPrv.hwnd, WM_VSCROLL, SB_LINEUP, 1
    滚动来实现重设Grid
    以下代码供参考
    Private Sub ScrollDown5()
                '第五个按钮的集合代码
                    Dim i As Integer
                    nMFGridCurRowTop = 1      'MFGridPrv当显示行顶行row值记录下一将显示的row
                    nMFGridCurPos = 0           '当前位置标识,0首,1尾,-1 中间,初始化为0
                    nMFGridFullType = -2         '当前所有行与MFGridPrv关系,0刚好相等,-1没有占满,1多出
                    nMFGridRowNum = 0       '记录MFGridPrv中显示的行数,滚动依据,显示不全的不在其中
                    nMFGridDisplayHeight = 0 '记录MFGridPrv所有显示出来的行的总行高
                    
                    nMFGridCurPosLat = 0          '下一步位置标识,0首,1尾,-1 中间,初始化为0
                    nMFGridFullTypeLat = -2        '下一步所有行与MFGridPrv关系,0刚好相等,-1没有占满,1多出
                    nMFGridRowNumLat = 0       '记录下一步MFGridPrv中显示的行数,滚动依据,显示不全的不在其中
                    nMFGridDisplayHeightLat = 0 '记录下一步MFGridPrv所有显示出来的行的总行高             '重设高度
                    MFGridPrv.Height = nMFGridHeightOri
                 '移回首行
                 For i = 0 To MFGridPrv.Rows - 1
                    SendMessage MFGridPrv.hwnd, WM_VSCROLL, SB_LINEUP, 1
                 Next i
                 If nMFGridCurPage = 0 Then
                    
                    Me.ToolbarPtn.Buttons(4).Enabled = False
                 End If
                 Me.ToolbarPtn.Buttons(5).Enabled = True
                 For i = 0 To nMFGridCurPage - 1
                    subScrollDown
                    
                    If nMFGridCurPos = 1 Then
                        nMFGridCurPage = i
                        Exit For
                    End If
                 Next i
                 
    End Sub
    Private Sub subScrollDown()
                Dim i As Integer
                If nMFGridCurPos <> 1 Then  '不到尾部时
                    Me.ToolbarPtn.Buttons(4).Enabled = True
                    
                    '检查当前状态
                    subGetMFGridDisplayRow
                    'MsgBox nMFGridRowNumRe & "  " & MFGridPrv.Height
                    'SendMessage MFGridPrv.hwnd, WM_VSCROLL, SB_PAGEDOWN, 1
                '当前所有行与MFGridPrv关系,0刚好相等,-1没有占满,1多出
                    If nMFGridFullType = 1 Then '多出
                        '检查下一步的状态
                        subGetMFGridDisplayRowLat
                        If nMFGridCurPosLat = 1 Then
                            MFGridPrv.Height = nMFGridDisplayHeightLat
                            Me.ToolbarPtn.Buttons(5).Enabled = False
                            Me.ToolbarPtn.Buttons(4).Enabled = True
                        End If
                        For i = 0 To nMFGridRowNum - 1
                            SendMessage MFGridPrv.hwnd, WM_VSCROLL, SB_LINEDOWN, 1
                        Next i
                        
                        'SendMessage MFGridPrv.hwnd, WM_VSCROLL, SB_PAGEDOWN, 1
                    End If
                    If nMFGridFullType = 0 Then '刚好
                        '检查下一步的状态
                        subGetMFGridDisplayRowLat
                        If nMFGridCurPosLat = 1 Then
                            MFGridPrv.Height = nMFGridDisplayHeightLat
                            Me.ToolbarPtn.Buttons(5).Enabled = False
                            Me.ToolbarPtn.Buttons(4).Enabled = True
                        End If
                        For i = 0 To nMFGridRowNum - 1
                            SendMessage MFGridPrv.hwnd, WM_VSCROLL, SB_LINEDOWN, 1
                        Next i
                    End If
                    If nMFGridFullType = -1 Then '没占满
                            Me.ToolbarPtn.Buttons(5).Enabled = False
                            Me.ToolbarPtn.Buttons(4).Enabled = True
                    End If
                    
                    'SendMessage MFGridPrv.hwnd, WM_VSCROLL, SB_PAGEDOWN, 1
                End If
    End Sub
    Private Sub subGetMFGridDisplayRow()
        '函数名:subGetMFGridDisplayRow
        '入口参数:无
        '出口参数:无
        '功能:得到MFGridPrv当前显示的行数,显示一半的不在其中,此为前滚
        '编写日期:2002.9.4
        '编写人:yuiee
        '备注:只对MFGridPrv使用
        Dim nRowHeightTmp As Integer   '当前行高 ,为动态变量
        Dim nCaluHeight As Integer '动态行高nRowHeight相加的和
        Dim nMFGridHeight As Integer    '控件高
        Dim nNumTmp As Integer      '行数
        Dim nDisplayHeightTmp         '显示出来的行的总行高
        Dim nTypeTmp As Integer        '数据与MFGridPrv关系
        Dim bExitNo As Boolean          '
        Dim i As Integer
        '初始高度在调用此过程前设定
        nMFGridHeight = nMFGridHeightOri
        
        
        
        nRowHeightTmp = MFGridPrv.RowHeight(0) '标头高
        nMFGridFullType = -2
        bExitNo = True
        For i = nMFGridCurRowTop To MFGridPrv.Rows - 1
            MFGridPrv.Row = i
            
            nDisplayHeightTmp = nRowHeightTmp
            nMFGridRowNumRe = nRowHeightTmp
            nRowHeightTmp = nRowHeightTmp + MFGridPrv.RowHeight(i)
            If nRowHeightTmp > nMFGridHeight Then
                nMFGridFullType = 1
                bExitNo = False
                Exit For
            Else
                nNumTmp = nNumTmp + 1
            End If
            
        Next i
        If nMFGridFullType = 1 Then
            If nMFGridCurRowTop <> 1 Then
                nMFGridCurPos = -1 '中间
            Else
                nMFGridCurPos = 0
            End If
        End If
        If nMFGridFullType = -2 Then
            nMFGridRowNumRe = nRowHeightTmp
            If nRowHeightTmp < nMFGridHeight Then
                nMFGridFullType = -1        '小于
            Else
                nMFGridFullType = 0     '刚好
            End If
            nMFGridCurPos = 1       '到尾部
        End If
        nMFGridRowNum = nNumTmp    If nMFGridCurPos <> 1 Then
        '得到下一步起始点
            nMFGridCurRowTop = i
        End If    
        
    End Sub
      

  2.   

    好,好厉害丫~~~~在下佩服佩服,但是
    Set Picture1.Picture = MSFlexGrid1.Picture可以看到其数据内容
    Printer.PaintPicture MSFlexGrid1.Picture, 0, 0
    怎么报打印机错误啊?
      

  3.   

    没错呀?后边加上
    Printer.EndDoc
    不然怎么打呀?
    图片打印应该会吧?Picture1中有要打的图片,就打它也行呀
    呵呵,挖苦哦呀?我也是被逼无奈,才出此下策哦,那么长的代码,5555
      

  4.   

    MSFlexGrid1.Row = 1
    MSFlexGrid1.Col = 1
    MSFlexGrid1.Text = "aaaaaaaaaaaa"
    'Set Picture1.Picture = MSFlexGrid1.Picture
    Printer.PaintPicture MSFlexGrid1.Picture, 0, 0
    Printer.EndDoc
    一点都没变的代码