国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

基于VB的通用折行打印程序

2019-11-18 17:47:01
字體:
來源:轉載
供稿:網友
----幾乎所有數據庫應用軟件,都需要打印單證和報表。常見的方法是利用VB的CrystalReports(水晶報表)方式,通過TextBox等數據綁定控件,調用PRint方法直接輸出。雖然CrystalReport這一個功能強大、樣式豐富且無編程方式的報表編制程序能適應大部分單證、報表打印的需要,但是CrystalReports引擎是一個動態鏈接庫,需許多文件支持和調用更多系統資源,大大增加系統負擔。

----另一種解決辦法是通過Printer對象的Print方法,直接打印字符串。這雖然減少了系統資源的開銷,但它不能直接用于打印復雜的單證和報表。本文通過兩個實例,闡述一個通用折行打印程序的編程和在單證及報表的應用。

----二.編程實現及實例

----為便于闡述的方便,我們先建立一個access數據庫Standards.mdb,其內SN表由以下幾個字段組成:

----標準號(文本,17)

----標準名稱(文本,255)

----英文名稱(文本,255)

----實施日期(日期,8)

----修定日期(日期,8)

----發布日期(日期,8)

----代替標準(文本,50)

----通用折行打印程序編制操作如下:

----1.在VB5.0編程環境中,新建一個工程Project1;

----2.在Project1中添加Moduel,在Moduel模塊中定義一個記錄最大折行數的公用變量Rowlab和Function函數(以下程序都經過實際運行測試,可以原樣復制使用);

PublicrowlabAsInteger   
'定義一個公用變量
Functionprnt11(XAsInteger,YAs
Integer,FontAsSingle,TxtAsString,ValAsInteger)
DimstrAsString,str1AsString,
str2AsString,iAsInteger
Printer.CurrentX=X
Printer.CurrentY=Y
Printer.FontBold=False
Printer.FontSize=font
str=txt
str2=str
i=0
rowlab=0
IfLen(Trim(str))=0Then
  rowlab=1 '待打印字符串為空的標志
Else
 DoWhileLen(str)>0
  Printer.CurrentX=X
  Printer.CurrentY=Y rowlab*240
  rowlab=rowlab 1
  IfLen(str)>=valThen
    str1=Mid(str,1,val)
    Printer.Printstr1
    i=i 1
    str=Mid(str2,i*val 1)
  Else
   Printer.Printstr
   ExitDo
  EndIf
 Loop
EndIf
EndFunction

----3.在Project1中新建一個窗體Form1,窗體上添加一個Data控件Data1,一個MSFlexGrid控件MSFGrid1,7個TextBox和兩個命令按鈕CmdPrnt1、CmdPrnt2。設置Data控件的屬性:

..DatabaseName="Standards.mdb"
..RecordSourse="SN"
 MSFGrid1屬性:
   .DataSource="Data1"
 Text1屬性:
   .DataSource="Data1"
   .DataField="標準號"
 Text2~Text7類同。

----CmdPrnt1、CmdPrnt2分別為打印單條記錄和多條記錄的按鈕。

----實例1:文字串定位折行打印在口岸聯檢部門中應用非常廣泛。下述例子是用CmdPrnt1的Click事件代碼實現了對文字串定位折行打印:

PrivateSubCmdPrnt1_Click()
DimstrAsString,str1AsString,txtAsString
DimstrxAsInteger,stryAsInteger,iAsInteger
strx=200
stry=0
txt=Space(20) "中國出入境檢驗檢疫標準目錄檢索STEMS2000"
Printer.FontName="黑體"
dd=prnt11(strx,stry,10,txt,50)
stry=stry rowlab*240
Printer.Line(0,stry)-(9000,stry)
Printer.FontName="宋體"
txt="標準號:" Space(2) Trim(Text1) Space(3)
"發布日期:" Trim(Text4) Space(3) "實施日期:"
Trim(Text6) Space(3) "修定日期:" Trim(Text5)' Chr(13)
stry=stry 240
dd=prnt11(strx,stry,10,txt,70)
stry=stry rowlab*240
txt="代替標準:"
dd=prnt11(strx,stry,10,txt,10)
dd=prnt11(strx 1000,stry,10,Trim(Text7),60)
stry=stry rowlab*240
txt="標準名稱:"
dd=prnt11(strx,stry,10,txt,10)
dd=prnt11(strx 1000,stry,10,Trim(Text4),38)
stry=stry rowlab*240
txt="英文名稱:"
dd=prnt11(strx,stry,10,txt,10)
dd=prnt11(strx 1000,stry,10,Text5,72)
Printer.EndDoc
EndSub

----注:Prnt11函數原形:prnt11(XAsInteger,YAsInteger,FontAsSingle,TxtAsString,ValAsInteger),其各參數含義如下:

----X、Y為待打印字符串左上角起始座標;

----Font為 Fori=2To4
   kan=kan a(i)
 Next
 gridrow=Datdatact1.Recordset.RecordCount
 Ifgridrow=0Then
  MsgBox"無滿足條件記錄打印!"
  ExitSub
EndIf
 Printer.FontName="黑體"
 dd=prnt11(3300,700,fnt,ss$,26)'打印標題
 dd=prnt11(500,stry-250,fnt,"標準號",26)
 dd=prnt11(2690,stry-250,fnt,"標準名稱",26)
 dd=prnt11(6690,stry-250,fnt,"英文名稱",26)
 Printer.Line(strx-20,stry-30)-(10460,stry-30)
 Printer.FontName="宋體"
 Forj=1Togridrow '打印gridrow條記錄
   MSFGrid1.Row=j
   strx=strx1
   Fori=2To4'假設只打印2-3列
    MSFGrid1.Col=i
    dd=prnt11(strx,stry,fnt,
MSFGrid1.Text,IIf(i=3,13,55))
    Ifii<rowlabThen
'ii記錄同一記錄內字段最大打印行
     ii=rowlab
    EndIf
    strx=strx a(i)
   Next
   p=p ii
   rowlab=ii
   ii=1'重新初始化
   Ifp>page1Then
     p=0
     strx=strx1
     Forn=2To4
      strx=strx a(n)
     Next
     pp=pp 1
     stry=stry rowlab*linw
     foot$="第" CStr(pp) "頁"
     dd=prnt11(strx/2,stry 3*linw,10,foot$,26)
     stry=stry1
     Printer.NewPage
     Printer.FontName="黑體"
     dd=prnt11(3300,700,fnt,ss$,26)
     dd=prnt11(500,stry-250,fnt,"標準號",26)
     dd=prnt11(2690,stry-250,fnt,"標準名稱",26)
     dd=prnt11(6690,stry-250,fnt,"英文名稱",26)
     Printer.Line(-20,stry-30)-(10460,stry-30)
     '打印起始線
     Printer.FontName="宋體"
     strx=strx1
    Else
     stry=stry rowlab*linw
    EndIf
   Next
   Ifp<page1Then
     Forp=0Topage1 1
      strx=strx1
     Next
   EndIf
   strx=strx1
   Forn=2To4
     strx=strx a(n)
   Next
   pp=pp 1
   foot$="第" CStr(pp) "頁"
   dd=prnt11(strx/2,stry 3*linw,10,foot$,26)
   Printer.EndDoc
 EndSub

----以上程序在簡體中文Windows98、VB5.0環境中調試通過。->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岗巴县| 江城| 盐边县| 乐安县| 高陵县| 和龙市| 宾阳县| 九江县| 土默特左旗| 玉屏| 洪雅县| 休宁县| 云霄县| 小金县| 林州市| 江山市| 桂林市| 佛学| 台南县| 壤塘县| 鸡东县| 天镇县| 连州市| 娱乐| 乌兰察布市| 巴楚县| 长丰县| 卢氏县| 龙川县| 余庆县| 亚东县| 凯里市| 云安县| 敦化市| 福清市| 长春市| 鄄城县| 紫云| 独山县| 上饶市| 定远县|