VB中实现“所见即所得”功能
http://www.ccidnet.com/tech/guide/2001/07/31/58_2812.html

解决方案 »

  1.   

    报表生成器如何调用呢?
    在Show窗体前可以 定义窗体的大小
    如:
       frm.height =8000
       frm.width=6000
       frm.show
      

  2.   

    printform  只能打印屏幕上的可见部分。如果你的表太大了超过一屏,那么
    用printform肯定不行。建议你在excel或access中建一表,把窗体中所填值传过去,再调用excel或access中的打印功能属性打印。你所说height属性改回去的情况,可能是你的窗体的BorderStyle设成了2,设成1就可以了。
    希望以上的废话能对你有所帮助。
      

  3.   

    printform好像只打印屏幕显示的那部分窗体。我做了个函数,需要在窗体上有个data控件,设置好recordsource,就是data控件有数据就行了,然后放一个按钮printm或者是菜单printm,要不然调用 printm_click() 里面的代码也可以,编的不好,大家别笑话我。去掉了一部分代码,预览和设置字体的Dim heightRec As Double
    Dim recPos As Integer
    Dim pagChg As BooleanPrivate Sub printm_Click()
    If Data1.Recordset.RecordCount = 0 Then Exit Sub
    If Data1.Recordset.BOF = False Then Data1.Recordset.MoveFirst
    Do
    Loop Until print_A_page = True
    End SubFunction print_A_page() As Boolean
    If Data1.Recordset.EOF = True Then Data1.Recordset.MoveFirst
    Data1.Recordset.AbsolutePosition = recPos
    pagChg = False
    Do While Data1.Recordset.EOF = False
        If pagChg = False Then
            print0
            Data1.Recordset.MoveNext
        Else
            print_A_page = False
            Printer.EndDoc
            Exit Function
        End If
    Loop
    print_A_page = True
    End FunctionSub print0()
    Dim tempStr As String
    Dim AddStr As String
    Dim LineLen As Double
    Dim WordLen As Double
    Dim i As Integer
    Dim want_print As Boolean
    If Printer.CurrentY + heightRec > Printer.Height Then
        recPos = Data1.Recordset.AbsolutePosition
        pagChg = True
        Exit Sub
    End IfheightRec = Printer.CurrentY
    Printer.CurrentX = Printer.Width / 50
    Printer.CurrentY = Printer.CurrentY + Printer.Height / 100
    Printer.Line (Printer.CurrentX, Printer.CurrentY)-(Printer.Width * 49 / 50, Printer.CurrentY)
    Printer.CurrentX = Printer.Width / 50
    Printer.CurrentY = Printer.CurrentY + Printer.Height / 100
    tempStr = Data1.Recordset.Fields(0).Name & "  " & Data1.Recordset.Fields(0)
    LineLen = Printer.TextWidth(tempStr)
    AddStr = ""
    WordLen = 0
    For i = 1 To Data1.Recordset.Fields.Count - 1
        AddStr = "    " & Data1.Recordset.Fields(i).Name & "  " & Data1.Recordset.Fields(i)
        WordLen = Printer.TextWidth(AddStr)
        If LineLen + WordLen < (Printer.Width * 48 / 50) Then
            tempStr = tempStr & AddStr
            LineLen = LineLen + WordLen
         Else
            Printer.Print tempStr
            Printer.CurrentX = Printer.Width / 50
            Printer.CurrentY = Printer.CurrentY + Printer.Height / 100
            tempStr = Data1.Recordset.Fields(i).Name & "  " & Data1.Recordset.Fields(i)
            LineLen = Printer.TextWidth(tempStr)
            AddStr = ""
            WordLen = 0
        End If
        If i = Data1.Recordset.Fields.Count - 1 Then Printer.Print tempStr
    Next i
    heightRec = Printer.CurrentY - heightRec
    End Sub
      

  4.   

    不是不是,我找到了问题的关键了!!form的高度属性最大值是15360*11520
    可printer的A4纸张是11704*16832可见!!下半截,超过了form的基本属性了~~~所以不管怎么使都打不出来了
    我也没解决这个问题~~~我想可能用纸张缩放大小适应
    或不用fromprint,直接用语句打印~
      

  5.   

    谢谢了!正如 xo2000(xo) starbattler(小石头)所说我的表太大了超过一屏,以前就怀疑Printform  只能打印屏幕上的可见部分。现在终于得到证实了!但调用excel或access对我似乎又难了点,毕竟我还是个菜鸟!而且程序最终要发布到客户手中,他们的应用水平也不高,也不可能要求他们预装excel之类,那能不能用笨一点的办法,用printers集合直接在纸上绘出来,我以前试过,可后来不知怎么只走纸,不打印zhangbin888(防火墙) 的程序我试了,也是只走纸,不打印,不知我什么地方搞错了另外说几句题外话,本人非计算机专业,但一直喜欢,可现在在一家国企工作,好不容易争取到这方面的工作,编一套网络售气系统,但我现在真的很苦恼,本来半路出家底子就极差,身边的环境更是恶劣,因为公司以传统制造业为主,习惯了"重硬轻软"(刚接到项目不到两周,就有人"关心"的问:搞定了吗?),所以不能上网,没有培训,身边更没有一个懂行的人(全公司唯一一个号称搞软件的"电脑专家",只懂VF3.0,现在也搞行政了),公司把大家都当包身工一样,一周上六天班,哪怕你闲坐着,有时候自己都想放弃了,瞎混吧,可又不甘,跳槽?原专业实在没兴趣,也忘得差不多了,搞编程,没有专业文凭,根本就没人认你!各位指点指点吧!我应该怎么办?上学习班?考认证?到底怎么取得第一块敲门砖?怎么提高自己的能力?
      

  6.   

    哈哈,只走纸吧~~`碰巧我又知道了,哈哈,我刚刚也遇到了~~是你的printer.currentX没设置,或是,设得太右,超过了纸张大小,只要一碰到一行是这样的,下面的所有行,他都不打了,所以你要注意你的printer.currentX,printer.currentY的控制~~考证书!!!而且要考全国认证的证书,高程啊,系分啊~~~
    国家认证证书就现在来说就是,上岗证考出了证书,哪里都能去!!!别去考什么微软的认证,垃圾!!!
    考国家颁发的认证!
      

  7.   

    我在以前做过一个档案系统,用过printer对象,在程序中动态的控制打印的信息,我的办法是用两个picturebox嵌套,即Picture1是Picture2的父窗口或称为容器控件,调整picture2.width,height属性等同打印机的宽和高,Picture2.scalemode=5--inch',picture2.AutoRedraw=True。接下来你就可以
    真接在picture2上绘制图像了,
    绘制好后用 {Printer.PaintPicture Picture2.Image, 10, 10}语句在打印机
    上打印就用的是A4的纸,在vb中想用好的打印,不要怕多的代码,尤其是一些用报表没法子实现的功能.
      

  8.   

    但是PaintPicture只能打印图像啊,textbox和line、shape打不出来怎么办?