VB程序設計1000問(三)
11、如何讓用戶自行輸入方程式,并計算其結果?
假設我們要讓使用者在“方程式”欄位中自由輸入方程式,然后利用方程式進行計算,則引用ScriptControl控件可以很方便地做到。
( ScriptControl 控件附屬于VB 6.0,如果安裝后沒有看到此一控件,可在光盤的 CommonToolsVBScript 目錄底下找此一控件, 其.文件名為Msscript.ocx。) 假設放在窗體上的ScriptControl控件名稱為ScriptControl1,則在“計算”按鈕的Click事件中編寫如下代碼:
Dim Statement As String Statement = "X=" + Text1.Text + vbCrLf + _ "Y=" + Text2.Text + vbCrLf + _ "MsgBox ""計算結果="" & Y " ScriptControl1.ExecuteStatement( Statement )
12、如何解決VB中的Grid控件的打印問題
---- Grid 控件是Visual Basic最常見控件之一, 從VB3.0 到VB5.0 都有該控件。 也是VB愛好者最喜愛的工具之一。用它可以以表格的形式 顯示、瀏覽數據,特別是數據庫應用,直接綁定即可顯示瀏覽數據庫信息。然而,美中不足的是Grid 沒有編輯和打印功能,列與列的位置不能相互交換。筆者曾嘗試著給Grid 增添了這些功能,使之錦上添花,功能更強大。下面給出改進方法及源程序,讀者只需按步驟寫下源程序即可使你的Grid 具有打印功能。該程序筆者在HP5/100Window95環境下用VB5.0 調試通過。
---- 給Grid 控件增加打印方法有三種:1 是直接打印控件的方法,2 是通過 printer 來實現打印功能,3 是通過調用MS-WORD 及MS-EXCEl 來 實 現 打 印。
---- 首先,打開一個應用,在FORM1中增加DATA 控件DATA1,把DATA1的CONNECT 屬性設為dBASE III,再把DATABASENAME屬性設為D:PJXM.DBF。然后再在FORM1中增加MSFLEXGRID空間GRID1,并把GRID1的DATASOURCE 屬性設為DATA1。這樣數據庫PJXM.DBF 的信息就會在GRID1中顯示出來。
---- 方法一:直接打印窗體法,在FORM1中增加命令按鈕(command),CAPTION屬性設為直接打印,再寫入下列編碼:
| Sub command_click Form1.printform End sub |
---- 這樣即可通過打印窗體FORM1的方法把GRID1的數據打印出來,遺憾的是只能打印GRID1中顯示的數據部分,顯示不出來的則無法打印, 而且這種打印方法很象屏幕硬拷貝把其他控件也打印出來。也不能靈活的控制字體等。
---- 方法二:通過PRINTER實現打印。這種方法
---- 1、加入打印命令按鈕(command1)、函數(print1)即可實現打印功能,寫入下面代碼,讀者稍加改動可寫成標準的函數或過程。
| Function prnt1 (x As Integer, y As Integer, font As Single, txt As String) printer.CurrentX = x printer.CurrentY = y printer.FontBold = False printer.FontSize = font printer.Print txt End Function Sub command1_click Dim fnt As Single Dim pp as integer Pp=0'設置開始頁碼0 Dim stry,strx,strx1,stry1,linw,page1,p As Integer Static a(8) As Integer'定義打印的列數 ss$ = "內部結算存入款對帳單"'定義表頭 kan = 0 For i = 0 To 8 a(i) = 1500'定義每列寬 kan = kan + a(i)'計算表格總寬度 Next page1 = 50'定義每頁行數 strx = 200 strx1 = 200'定義X方向起始位置 stry = 1400 stry1 = 1400'定義Y方向起始位置 linw = 240'定義行寬 fnt = 8'定義字體大小 printer.fontname = "宋體"'定義字體 dd = prnt1(4000, 700, 18, ss$)'打印標題 printer.Line (strx - 50, stry - 30) -(strx + kan - 10, stry - 30) For j = 0 To gridrow - 1'gridrow為所要打印的行數 grid1.row = j strx = strx1 printer.Line (strx - 50, stry - 30) -(strx + kan - 10, stry - 30) p = p + 1 For i = 0 To 8 grid1.col = i dd = prnt1(strx, stry, fnt, grid1.text) strx = strx + a(i) Next If p > page1 Then'next page p = 0 strx = strx1 'line last line printer.Line (strx - 50, stry + linw) -(strx + kan - 10, stry + linw) stry = stry1 'line col For n = 0 To 8 printer.Line (strx - 30, stry - 30) -(strx - 30, stry + (page1 + 2) * linw) strx = strx + a(n) Next printer.Line (strx - 30, stry - 30) -(strx - 30, stry + (page1 + 2) * linw) pp=pp+1 foot$="第 "+cstr(pp)+"頁" dd = prnt1(strx - 30-1000, stry + (page1 + 2) * linw+100, 10, foot$)'打印頁角碼 printer.NewPage'next page dd = prnt1(4000, 700, 18, ss$) '打印標題 strx = strx1 stry = stry1 printer.Line (strx - 50, stry - 30)- (strx + kan - 10, stry - 30)' print first row Else stry = stry + linw End If Next st = stry If p < page1 Then '在最后頁剩余劃空行 For o = p To page1 + 1 strx = strx1 printer.Line (strx - 50, stry - 30) -(strx + kan - 10, stry - 30) stry = stry + linw Next End If stry = stry1 strx = strx1 stry = stry1 'line col For n = 0 To 8 printer.Line (strx - 30, stry - 30)- (strx - 30, stry + (page1 + 2) * linw) strx = strx + a(n) Next printer.Line (strx - 30, stry - 30)- (strx - 30, stry + (page1 + 2) * linw) pp=pp+1 foot$="第 "+cstr(pp)+"頁" dd = prnt1(strx - 30-1000, stry + (page1 + 2) * linw+100, 10, foot$)'打印頁角碼 printer.EndDoc'打印結束 Endsub |
---- 這種方法通過靈活的編程可以方便地調整字體、字型、線形、頁面、紙張大小等。可打印出比較滿意的效果。如果你的計算機上裝有MICROSOFT WORD 和MICRO EXCEL,最精彩的用法還是把GRID 的表格通過VB發送到MICROSOFT WORD 及MICRO EXCEL。生成MICROSOFT WORD 和MICRO EXCEL 表格。這樣就可以充分利用MICROSOFT WORD 和MICRO EXCEL的打印、編輯功能打印出更理想的效果。下面逐一介紹。
---- 方法三:通過生成MICROSOFT WORD表格打印
---- 1、在declaration 中寫入: Dim msword As Object
---- 2、 加入打印命令按鈕(command2),CAPTION 設為"生成WORD 表格",寫入下面代碼,
| Private Sub command2_Click() screen.MousePointer = 11 Set msword = CreateObject("word.basic") Dim AppID, ReturnValue appID = Shell("d:office97officeWINWORD.EXE", 1) ' Run Microsoft Word. msword.AppActivate "Microsoft Word" 'msword.AppActivate "Microsoft Word", 1 full Screen.MousePointer = 0 End Sub ---- 2、寫入以下過程full() Sub full() Dim i As Integer, j As Integer, col As Integer, row As Integer Dim cellcontent As String Me.Hide cols = 4'表格的列數 row = gridrow'打印表的行數 msword.filenewdefault msword.MsgBox "正在建立MS_WORD報表, 請稍候.......", "", -1 msword.leftpara msword.screenupdating 0 msword.tableinserttable , col, row, , , 16, 167 msword.startofdocument for j=0 to gridrow' 表格的行數 grid1.row=j For i = 1 To cols Gri1d.col=i If IsNull(grid1.text) Then cellcontent$ = "" Else cellcontent$ = grid1.text End If msword.Insert cellcontent$ msword.nextcell Next i Next j msword.tabledeleterow msword.startofdocument msword.tableselectrow msword.tableheadings 1 msword.centerpara 'msword.startdocument msword.screenrefresh msword.screenupdating 1 msword.MsgBox " 結束", "", -1 Me.Show End Sub |
---- 方法四:通過發送到MICROSOFT EXCEL實現表格打印
---- 1、加入打印命令按鈕(command3),CAPTION 設為"生成EXCEL 表格",寫入下面代碼
| Private Sub command3_Click() Dim i As Integer Dim j As Integer Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True 'Set xlBook = xlApp.Workbooks.Add 'On Error Resume Next Set xlBook = xlApp.Workbooks.Add 'Open("d:ext2.xls") Set xlSheet = xlBook.Worksheets(1) xlSheet.Cells(6, 1) = "i" For i = 0 To gridrow grid1.Row = i For j = 0 To 6 Grid1.Col = j If IsNull(Grid1.Text) = False Then xlSheet.Cells(i + 5, j + 1) = Grid1.Text End If Next j Next i Exit Sub |