- 日時: 2007/09/16 18:47
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[印刷関係][][] * * キーワード:改ページ処理,,,,, * ***********************************************************************************
元質問:改ページしても1枚の紙に印刷されて.. - 浦島太郎 2005/07/20-11:05 No.1910
テキストファイルを開いて印刷をしようとしていますが、改ページができません 行間隔を7oとって、20行で改ページのつもりなんですが、1枚の紙に2度打 ちされるばかりです。
----------------------------------------------------------------------------------- Re^3: 改ページしても1枚の紙に印刷.. - 花ちゃん 2005/07/20-15:48 No.1916 ----------------------------------------------------------------------------------- > 例の実行結果を教えてください。もう一度考えてみます。
サンプルがあるのですから、ご自分で色々設定を変えて見て試して頂いたら、ご理解できるかと 思うのですが、e.HasMorePages は、VB6.0 の改ページ動作とは違います(ヘルプ参照) 従ってPrintDocument1_PrintPage イベントに送るデータは1ページ分づつになり PrintDocument1_PrintPage イベントを抜けた時に改ページが行れます。その時に e.HasMorePages =True に設定するともう一度PrintDocument1_PrintPage イベント を呼び出し 残りの文書を印刷できるようになるのです。 下記を一度試して見て下さい。
Private prpg As Integer '印字ページのフラグ Private count As Integer '印字済み行数 Private pgMax As Integer = 45 '印字する総行数 Private pagno As Integer '印字ページの番号 Private kara As Integer Private myText(45) As String
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer '実際はテキストファイルを行毎に配列に入れて下さい。 For i = 0 To 45 myText(i) = i & " 印刷する文書の1行分のデータ" Next
PrintDocument1.Print()
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, _ ByVal e As System.Drawing.Printing.PrintPageEventArgs) _ Handles PrintDocument1.PrintPage
Dim i As Integer Dim g As Graphics = e.Graphics Dim ln As Integer = 0
'ミリメートルを長さの単位に指定します。 g.PageUnit = GraphicsUnit.Millimeter Select Case prpg Case 0 '1ページ分のデータを印字
For i = kara To kara + 9 ln += 1 g.DrawString(myText(i), _ New Font("MS Pゴシック", 12), Brushes.Black, 20, ln * 25) count += 1 Next i e.HasMorePages = True Case 1 '残りの行数を印字 e.HasMorePages = False
For i = kara To pgMax ln += 1 g.DrawString(myText(i), _ New Font("MS Pゴシック", 12), Brushes.Black, 20, ln * 25) Next i '追加分ここから '印刷プレビューでもこのイベントは呼び出されるので初期化が必要 kara = 0 prpg = 0 count = 0 Exit Sub '追加分ここまで End Select If ((pgMax - count) / 10) > 1 Then kara = i prpg = 0 '次のページを印字 Else kara = i prpg = 1 '最後のページを印字 End If End Sub
----------------------------------------------------------------------------- 投稿時間:2005/07/21(Thu) 10:31 投稿者名:花ちゃん
念の為、印刷プレビュー等を表示する場合、再度 PrintDocument3_PrintPage イベントが 呼ばれますので使用したカウント用変数は、PrintDocument3_PrintPage イベント内の最後に 印刷した後でクリアしておいて下さい、でないとプレビューしてから印刷すると印刷物が ないので印刷されません。 (どちらのサンプル(下記の魔界の仮面弁士さんの投稿コードも)でも必要です)
|