----グリッド コントロールは Visual Basic で最も一般的なコントロールの 1 つで、VB3.0 から VB5.0 まで利用できます。これは、VB 愛好家にとってお気に入りのツールの 1 つでもあります。これは、特にデータベース アプリケーションの場合、データをテーブル形式で表示および参照するために使用できます。ただし、問題は、Grid には編集機能や印刷機能がなく、列の位置を相互に交換できないことです。作者は、グリッドをさらに良く、より強力にするために、これらの機能をグリッドに追加しようとしました。以下に改善方法とソースプログラムを示しますので、読者は手順に従ってソースプログラムを書くだけでグリッドに印刷機能を持たせることができます。筆者はこのプログラムをHP5/100Window95環境のVB5.0でデバッグし、合格しました。
----Grid コントロールに印刷を追加するには、1. コントロールを直接印刷する、2. PRinter を通じて印刷機能を実現する、3. MS-Word や MS-Excel を呼び出して印刷を実現する、の 3 つの方法があります。
----まず、アプリケーションを開き、FORM1 に DATA コントロール DATA1 を追加し、DATA1 の CONNECT 属性を dBASEIII に設定し、次に DATABASENAME 属性を D:/PJXM.DBF に設定します。次に、FORM1 に MSFLEXGRID スペース GRID1 を追加し、GRID1 の DATASOURCE 属性を DATA1 に設定します。これにより、GRID1にデータベースPJXM.DBFの情報が表示されます。
----方法 1: フォーム メソッドを直接印刷し、FORM1 にコマンド ボタン (コマンド) を追加し、CAPTION 属性をダイレクト印刷に設定して、次のコードを記述します。
サブコマンド_クリック
Form1.printform
エンドサブ
----このように、FORM1の印刷ではGRID1のデータが印刷できますが、残念ながらGRID1に表示されているデータ部分しか印刷できません。ハードコピーは他のコントロールも印刷します。また、フォントなどを柔軟に制御することもできません。
----方法 2: PRINTER を使用して印刷します。この方法
----1. 印刷コマンドボタン (command1) と関数 (prnt1) を追加して、印刷機能を実現します。リーダーは、これを少し変更するだけで標準関数または処理に記述できます。
Functionprnt1(xAsInteger,yAsInteger,
fontAsSingle、txtAsString)
プリンター.CurrentX=x
プリンター.現在Y=y
printer.FontBold=False
プリンター.FontSize=フォント
プリンター.Printtxt
エンドファンクション
サブコマンド1_click
DimfntAsSingle
ディンパ整数
Pp=0'開始ページ番号を0に設定します
Dimstry,strx,strx1,stry1,linw,page1,pAsInteger
Statica(8)AsInteger' は印刷する列の数を定義します
ss$="内部決済保証金明細書"'ヘッダーを定義
カン=0
フォーリ=0To8
a(i)=1500' は各列の幅を定義します
kan=kan a(i)' テーブルの合計幅を計算します
次
page1=50' はページごとの行数を定義します
strx=200
strx1=200' は X 方向の開始位置を定義します
ストリー=1400
stry1=1400' は Y 方向の開始位置を定義します
linw=240' は線幅を定義します
fnt=8'フォントサイズを定義
printer.fontname="宋体"'フォントを定義
dd=prnt1(4000,700,18,ss$)'タイトルを印刷します
プリンター.ライン(strx-50,stry-30)
-(strx kan-10,stry-30)
Forj=0Togridrow-1'gridrow は印刷する行数です
グリッド1.行=j
strx=strx1
プリンター.ライン(strx-50,stry-30)
-(strx kan-10,stry-30)
p=p1
フォーリ=0To8
グリッド1.col=i
dd=prnt1(strx,stry,fnt,grid1.text)
strx=strx a(i)
次
Ifp>page1Then'nextpage
p=0
strx=strx1
'line最終行
printer.Line(strx-50,stry linw)
-(strx kan-10,stry linw)
ストリー=ストリー1
'リネコル
フォルン=0To8
printer.Line(strx-30,stry-30)
-(strx-30,stry (page1 2)*linw)
strx=strx a(n)
次
printer.Line(strx-30,stry-30)
-(strx-30,stry (page1 2)*linw)
pp=pp1
foot$="th" cstr(pp) "ページ"
dd=prnt1(strx-30-1000,stry (ページ 1 2)
*linw 100,10,foot$)'ページコーナー番号を印刷します
プリンター.NewPage'次のページ
dd=prnt1(4000,700,18,ss$)'タイトルを印刷します
strx=strx1
ストリー=ストリー1
printer.Line(strx-50,stry-30)-
(strx kan-10,stry-30)'printfirstrow
それ以外
stry=トライライン
EndIf
次
st=試してみる
Ifp<page1Then' 最後のページに残っている空白行をマークします
Foro=pToppage1 1
strx=strx1
プリンター.ライン(strx-50,stry-30)
-(strx kan-10,stry-30)
stry=トライライン
次
EndIf
ストリー=ストリー1
strx=strx1
stry=stry1'linecol
フォルン=0To8
printer.Line(strx-30,stry-30)-
(strx-30,stry (page1 2)*linw)
strx=strx a(n)
次
printer.Line(strx-30,stry-30)-
(strx-30,stry (page1 2)*linw)
pp=pp1
foot$="th" cstr(pp) "ページ"
dd=prnt1(strx-30-1000,stry (ページ 1 2)
*linw 100,10,foot$)'ページコーナー番号を印刷します
printer.EndDoc'印刷の終了
エンドサブ
----この方法では、柔軟なプログラミングにより、フォント、フォントスタイル、線の形状、ページ、用紙サイズなどを簡単に調整できます。満足のいく結果を印刷できます。 MICROSOFTWORD と MICROEXCEL がコンピュータにインストールされている場合、それを使用する最も魅力的な方法は、VB を介して GRID テーブルを MICROSOFTWORD と MICROEXCEL に送信することです。 MICROSOFTWORD テーブルと MICROEXCEL テーブルを生成します。このように、MICROSOFTWORD や MICROEXCEL の印刷・編集機能を最大限に活用して、より理想的な印刷結果を得ることができます。以下に一つずつ紹介していきます。
----方法 3: MICROSOFTWORD フォームを生成して印刷する
----1. 宣言を記入します。
DimmswordAsObject
----2. 印刷コマンド ボタン (command2) を追加し、CAPTION を「WORD テーブルの生成」に設定します。
「フォーマット」には以下のコードを書きます。
PrivateSubcommand2_Click()
screen.MousePointer=11
Setmsword=CreateObject("word.basic")
DimAppID、ReturnValue
appID=Shell("d:/office97/office/WINWORD.EXE",1)
'MicrosoftWord を実行します。
msword.AppActivate「MicrosoftWord」
'msword.AppActivate"MicrosoftWord",1
満杯
Screen.MousePointer=0
EndSub
----2. 以下の処理を書きます full()
サブフル()
DimiAsInteger、jAsInteger、
ColAsInteger、rowAsInteger
DimcellcontentAsString
Me.Hide
Cols=4'テーブル内の列の数
row=gridrow' はテーブル内の行数を出力します。
msword.file新しいデフォルト
msword.MsgBox"MS_WORD レポートを作成しています。
お待ちください...","",-1
msword.leftpara
msword.screenupdating0
msword.tableinserttable,col,row,,,16,167
msword.startofdocument
forj=0togridrow'テーブル内の行数
グリッド1.行=j
フォーリ=1トコル
Gri1d.col=i
IfIsNull(grid1.text)Then
セルコンテンツ$=""
それ以外
cellcontent$=grid1.text
EndIf
msword.Insertcellcontent$
msword.nextcell
ネクスティ
次へ
msword.tabledeleterow
msword.startofdocument
msword.tableselectrow
msword.tableHeadings1
msword.centerpara
'msword.startdocument
msword.screenrefresh
msword.screenupdating1
msword.MsgBox"終了","",-1
ミー・ショー
EndSub
----方法 4: フォームを MICROSOFTEXCEL に送信して印刷する
----1. 印刷コマンド ボタン (command3) を追加し、CAPTION を「EXCEL テーブルの生成」に設定します。
「フォーマット」には以下のコードを書きます
PrivateSubcommand3_Click()
DimiAsInteger
DimjAsInteger
DimxlAppAsExcel.application
DimxlBookAsExcel.Workbook
DimxlSheetAsExcel.Worksheet
SetxlApp=CreateObject("Excel.Application")
xlApp.Visible=True
'SetxlBook=xlApp.Workbooks.Add
'エラー発生時再開次へ
SetxlBook=xlApp.Workbooks.Add'Open("d:/text2.xls")
SetxlSheet=xlBook.Worksheets(1)
xlSheet.Cells(6,1)="i"
Fori=0Togridrow
グリッド1.行=i
Forj=0To6
Grid1.Col=j
IfIsNull(Grid1.Text)=FalseThen
xlSheet.Cells(i 5,j 1)=Grid1.Text
EndIf
次へ
ネクスティ
ExitSub->