用DATA控件显示,然后逐条记录打印。
PRINTER.PRINT DATA1.RECORDSET!字段名

解决方案 »

  1.   

    输出到MSFlexGrid控件,然后自己做打印功能:
    例子:简单的预览和打印功能:
    你在Form中间加一个PictureBox,设Appearance=0,大小比例与一张打印纸相似。
    再加两个按钮:“预览“(Preview)和“打印“(Print)按钮。Sub SetData(obj As Object)
        If TypeOf obj Is Picture Then
            obj.Cls
        End If
        
        On Error GoTo exit_data
        
        Dim CX, CY, i, curY, curX
        Dim StepRow, lColor, adjRowHeight, iBottomRight
        
        lColor = obj.ForeColor
        '首行显示公司名称
        CX = 4
        obj.Font.Bold = False
        obj.Font.Size = 9
        obj.CurrentY = CX
        obj.CurrentX = obj.Width / 2 - obj.TextWidth("地球")
        'obj.ForeColor = RGB(256, 0, 0)
        obj.Print "地球公司"
        StepRow = obj.TextHeight("A")
        '标题
        CX = CX + StepRow
        obj.Font.Bold = True
        obj.Font.Size = 2 * 9
        obj.CurrentY = CX
        obj.CurrentX = obj.Width / 2 - obj.TextWidth("存款")
        obj.ForeColor = RGB(256, 0, 0) '红色
        obj.Print "存款单据"
        StepRow = obj.TextHeight("A")
        '首部信息第一行
        obj.ForeColor = lColor '恢复
        CX = CX + StepRow
        obj.Font.Bold = False
        obj.Font.Size = 9
        obj.CurrentY = CX: obj.CurrentX = 150
        obj.Print "左"
        obj.CurrentY = CX: obj.CurrentX = obj.Width / 2 - obj.TextWidth("中") / 2
        obj.Print "中"
        obj.CurrentY = CX: obj.CurrentX = obj.ScaleWidth - 150 - obj.TextWidth("右")
        obj.Print "右"    
        '=================画行线=================
        curY = CX + StepRow: curX = 150
        
        For i = 1 To 5
            If i = 1 Then
                obj.DrawWidth = 2
            Else
                obj.DrawWidth = 1
            End If
            obj.Line (curX, curY)-(obj.ScaleWidth - 150, curY)
            iBottomRight = curY
            '~~~~~
            adjRowHeight = obj.TextHeight("A") + 3
            curY = curY + adjRowHeight + 4
        Next
        
        '=============画竖线=================
        curY = CX + StepRow: curX = 150
        For i = 1 To 2
            obj.DrawWidth = 1
            obj.Line (curX, curY)-(curX, iBottomRight)
            curX = curX + obj.Width / 2 - obj.TextWidth("中") / 2
        Next
        obj.Line (obj.ScaleWidth - 150, curY)-(obj.ScaleWidth - 150, iBottomRight)
        
        '==============打印数据==================
        Dim str
        str = "打印数据"
        curY = CX + StepRow + ((adjRowHeight + 4) / 2) - obj.TextHeight("A") / 2
        curX = (150 + obj.Width / 2) / 2 - obj.TextWidth(str) / 2
        obj.CurrentY = curY
        obj.CurrentX = curX
        obj.Print str
        
        '...
        
        Exit Sub
        
    exit_data:
        MsgBox Error
        Exit Sub
    End SubPrivate Sub Preview_Click()
        SetData Pic
    End SubPrivate Sub Print_Click()
        SetData Printer
        Printer.EndDoc
    End Sub
    你可以按以上方法将Grid的内容打印出来。效果不错的。
      

  2.   

    如何打印msflexgrid上所有的记录呢?
      

  3.   

    如果想偷懒1.查询
    2.保存为文件(格式化)
    3.RICHedit.loadfile
    4.richedit.edit
      

  4.   

    如果想偷懒1.查询
    2.保存为文件(格式化)
    3.RICHedit.loadfile
    4.richedit.print
      
      

  5.   

    要我去画一条条线有点麻烦,
    有没有更简单一点的可以把msflexgrid所有记录打印出来的方法?
      

  6.   

    用Crystal做个报表不就行了。既能重复使用,又能做到美观。
      

  7.   

    用datagrid或MSFlexGrid 作屏幕显示,打印(自己做一个报表)报表时,提出满足条件的记录,就能实现这个功能
      

  8.   

    2.调用printer对象,不难
    3。直接操作open将prn设备打开,输出打印,也很容易
    4。水晶报表
      

  9.   

    Crystal报表我不会用啊,谁有列子?
      

  10.   

    调用excel对象,把数据填进去,再用excel在后台打印出来。
      

  11.   

    用EXCEL中的数据倒入然后打印。
      

  12.   

    建议使用Data Enviroment和Report
    Help中有例子。
    效果很好。
      

  13.   

    使用activereport,你会得到满意的效果的
      

  14.   

    告诉你吧,用vsflexgrid+vsview最最简单,打出来的又好看
      

  15.   

    option explicitprinvate mlngtopmargin as long
    private mlngleftmargin as long
    private mlngheaderfontsize as long
    private mlngbodyfontsize as long
    private mstrheaderfontname as long
    private mstrbodyfontname as long
    private db as database
    private rs as recordset
    private sub form_load()
        printer.scalemode=vbpoints
        mlngtopmargin=72
        mlngleftmargin=72
        mlngheaderfontsize=18
        mlngbodyfontsize=12
        mstrheaderfontname="Arial"
        mstrbodyfontname="Times New Roman"
        set db=opendatabase(app.path & \你的数据库)
    end subprivate sub printheader()    printer.currentX=mlngleftmargin
        printer.currentY=mlbgtopmargin
        with printer.font
            .name=mstrheaderfontname
            .size=mlbgheaderfontsize
            .bold=true
        end withprinter.print "employee report"
        printer.line(mlngleftmargin,mlngropmargin+24)-(printer.scalewidth-72,mlngtopmargin+24)end sub
    private sub printdata()
    set rs=db.openrecordset("tblemployee")
    with printer.font
        .name=mstrbodyfontname
    .size=mlngbodyfontsize
    .body=false
    end with
    do until rs.EOF
    printer.currentX=mlngleftmargin
    printer.print rs!firstname & " " & rs! lastname;
    printer.currentX=mlngleftmargin+144
    printer.print format(rs!salestodate,"$0.00")
    rs.movenext
    loop
    end sub
    private sub cmdprint_click()printerheader
    printer.currentY=printer.currentY+24
    printdata 
    printer.enddoc
    end sub你可以修改这个代码以支持多页打印。监视printer对象的currentY属性的状态就可以作到这一点,当currenty的值接近1英寸或如scaleheight属性所付给的值时,实行printer对象的newpage方法,并再次执行printheader子程序,然后接着输出。
      

  16.   

    我做了兩個月報表了﹐建議使用datareport
      

  17.   

    在access中可直接打印,用报表-新建-报表向导(或设计)
    如在vb中可用Data控件.
      

  18.   

    用DataReport或 Crystal报表
      

  19.   

    怎么没人提及用报表控件啊,那样多好啊([email protected])
      

  20.   

    如果是Access
    那么用Access本身的查询打印不就行了吗.