アクセス数 累計:000,125,018 昨日:000,000,099 本日:000,000,040
|
|
|
|
【Amazon ランキング:ゲーム - PS Vita】
|
|
前回印刷ダイアログの使い方を説明しましたが、印刷ダイアログには「印刷範囲」が指定できることに気づいたと思います。
この入力項目はプロパティで使用できるようにできるのですが、実際の印刷ロジックは自分でコーディングしないといけません。ここではそのコーディング例を紹介します。他の印刷処理でもページ管理の部分はさほど変わらないと思いますので参考にしてみてください。 |
|
印刷範囲の有効化 |
印刷範囲を有効化するには PrinterDialog の [AllowSomePages][AllowSelection] プロパティに true
を設定します。
[VB]
dlog.AllowCurrentPage = True
dlog.AllowSomePages = True
dlog.AllowSelection = True
[C#]
dlog.AllowCurrentPage = true
dlog.AllowSomePages = true;
dlog.AllowSelection = true;
※AllowCurrentPage は印刷ダイアログの[UseEXDialog]を true にした場合に表示されます。
|
印刷範囲の設定 |
印刷範囲を有効化した後は、実際に印刷できる範囲を PrinterSettings に定義しておきます。こうしておくこと印刷できないページが指定された場合にエラーが表示されるようになります。
[VB]
dlog.PrinterSettings.MinimumPage = 1
dlog.PrinterSettings.MaximumPage = MAX_PAGE_COUNT
dlog.PrinterSettings.FromPage = 1
dlog.PrinterSettings.ToPage = MAX_PAGE_COUNT
[C#]
dlog.PrinterSettings.MinimumPage = 1;
dlog.PrinterSettings.MaximumPage = MAX_PAGE_COUNT;
dlog.PrinterSettings.FromPage = 1;
dlog.PrinterSettings.ToPage = MAX_PAGE_COUNT;
|
選択内容の確認 |
プリンタダイアログで「すべて」「ページ指定」「選択した部分」のどれが選択されたかを知るには PrinterSetting.PrintRange
プロパティを参照します。この値は列挙体になっていますので必要に応じて判定してください。
[VB]
Select Case (dlog.PrinterSettings.PrintRange)
Case PrintRange.AllPages
' すべてのページ
Case PrintRange.CurrentPage
' 現在のページ
Case PrintRange.Selection
' 選択した部分
Case PrintRange.SomePages
' 印刷範囲指定
End Select
[C#]
switch (dlog.PrinterSettings.PrintRange)
{
case PrintRange.AllPages:
// すべてのページ
break;
case PrintRange.CurrentPage:
// 現在のページ
break;
case PrintRange.Selection:
// 選択した部分
break;
case PrintRange.SomePages:
// 印刷範囲指定
break;
}
※PrintRange.CurrentPage は印刷ダイアログの[UseEXDialog]を true にした場合に選択状態にできます。
|
VB[Form1.vb] |
Imports System.Drawing.Printing
Public Class Form1
Private Const MAX_PAGE_COUNT As Integer = 5
' ページ番号、部数
Private _pageNumber As Integer = 0
Private _copyNumber As Integer = 0
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Using doc As PrintDocument = New PrintDocument
Using dlog As PrintDialog = New PrintDialog
' プリンタオブジェクト設定
dlog.Document = doc
' 印刷範囲の指定を有効にする
dlog.AllowCurrentPage = True
dlog.AllowSomePages = True
dlog.AllowSelection = True
' 印刷可能なページ数を指定する。
dlog.PrinterSettings.MinimumPage = 1
dlog.PrinterSettings.MaximumPage = MAX_PAGE_COUNT
dlog.PrinterSettings.FromPage = 1
dlog.PrinterSettings.ToPage = MAX_PAGE_COUNT
dlog.UseEXDialog
' プリンタダイアログ表示
If dlog.ShowDialog(Me) <> Windows.Forms.DialogResult.OK Then
Return
End If
' 印刷ページ設定
Select Case (dlog.PrinterSettings.PrintRange)
Case PrintRange.AllPages
' すべてのページ
_pageNumber = 1
doc.PrinterSettings.FromPage = 1
doc.PrinterSettings.ToPage = MAX_PAGE_COUNT
Case PrintRange.CurrentPage
' 現在のページ(サンプルとして2ページ目とします)
_pageNumber = 2
doc.PrinterSettings.FromPage = 2
doc.PrinterSettings.ToPage = 2
Case PrintRange.Selection
' 選択した部分(サンプルとして2~3とします)
_pageNumber = 2
doc.PrinterSettings.FromPage = 2
doc.PrinterSettings.ToPage = 3
Case PrintRange.SomePages
' 印刷範囲指定
_pageNumber = dlog.PrinterSettings.FromPage
End Select
End Using
' PrintPage イベントハンドル追加
AddHandler doc.PrintPage, AddressOf doc_PrintPage
' 部数初期化
_copyNumber = 1
' 印刷実行
doc.Print()
End Using
End Sub
' 印刷イベント処理
Private Sub doc_PrintPage(ByVal sender As Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs)
' 印刷範囲枠を描画
e.Graphics.DrawRectangle(Pens.Black, e.MarginBounds)
' ページ数印刷
e.Graphics.DrawString(String.Format("{0}ページ", _pageNumber), _
New Font("MSゴシック", 20, FontStyle.Bold, GraphicsUnit.Point), _
Brushes.Black, e.MarginBounds.X, e.MarginBounds.Y)
' 注意!!
' ヘルプにはCollate プロパティに「部単位」で印刷にチェック状態が設定されるとあるが
' 実際にはtrue にならないので注意してください。
If e.PageSettings.PrinterSettings.Collate Then
' 部単位で印刷する場合
If _pageNumber < e.PageSettings.PrinterSettings.ToPage Then
e.HasMorePages = True
' ページ番号加算
_pageNumber = _pageNumber + 1
Else
If _copyNumber < e.PageSettings.PrinterSettings.Copies Then
e.HasMorePages = True
' ページ番号初期化
_pageNumber = e.PageSettings.PrinterSettings.FromPage
' 部数加算
_copyNumber = _copyNumber + 1
Else
e.HasMorePages = False
End If
End If
Else
If _copyNumber < e.PageSettings.PrinterSettings.Copies Then
e.HasMorePages = True
' 部数加算
_copyNumber = _copyNumber + 1
Else
If _pageNumber < e.PageSettings.PrinterSettings.ToPage Then
e.HasMorePages = True
' 部数初期化
_copyNumber = 1
' ページ番号加算
_pageNumber = _pageNumber + 1
Else
e.HasMorePages = False
End If
End If
End If
End Sub
End Class
|
|
C#[Form1.cs] |
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;
namespace Print_CS
{
public partial class Form1 : Form
{
private const int MAX_PAGE_COUNT = 5;
// ページ番号、部数
private int _pageNumber = 0;
private int _copyNumber = 0;
public Form1()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
using (PrintDocument doc = new PrintDocument())
{
using (PrintDialog dlog = new PrintDialog())
{
// プリンタオブジェクト設定
dlog.Document = doc;
// 印刷範囲の指定を有効にする
dlog.AllowCurrentPage = true;
dlog.AllowSomePages = true;
dlog.AllowSelection = true;
// 印刷可能なページ数を指定する。
dlog.PrinterSettings.MinimumPage = 1;
dlog.PrinterSettings.MaximumPage = MAX_PAGE_COUNT;
dlog.PrinterSettings.FromPage = 1;
dlog.PrinterSettings.ToPage = MAX_PAGE_COUNT;
// プリンタダイアログ表示
if (dlog.ShowDialog(this) != DialogResult.OK)
return;
// 印刷ページ設定
switch (dlog.PrinterSettings.PrintRange)
{
case PrintRange.AllPages:
// すべてのページ
_pageNumber = 1;
doc.PrinterSettings.FromPage = 1;
doc.PrinterSettings.ToPage = MAX_PAGE_COUNT;
break;
case PrintRange.CurrentPage:
// 現在のページ(サンプルとして 2ページ目とします)
_pageNumber = 2;
doc.PrinterSettings.FromPage = 2;
doc.PrinterSettings.ToPage = 2;
break;
case PrintRange.Selection:
// 選択した部分(サンプルとして 2~3 とします)
_pageNumber = 2;
doc.PrinterSettings.FromPage = 2;
doc.PrinterSettings.ToPage = 3;
break;
case PrintRange.SomePages:
// 印刷範囲指定
_pageNumber = dlog.PrinterSettings.FromPage;
break;
}
}
// PrintPage イベントハンドル追加
doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
// 部数初期化
_copyNumber = 1;
// 印刷実行
doc.Print();
}
}
// 印刷イベント処理
void doc_PrintPage(object sender, PrintPageEventArgs e)
{
// 印刷範囲枠を描画
e.Graphics.DrawRectangle(Pens.Black, e.MarginBounds);
// ページ数印刷
e.Graphics.DrawString(String.Format("{0}ページ", _pageNumber),
new Font("MS ゴシック", 20, FontStyle.Bold, GraphicsUnit.Point),
Brushes.Black, e.MarginBounds.X, e.MarginBounds.Y);
// 注意!!
// ヘルプには Collate プロパティに「部単位」で印刷にチェック状態が設定されるとあるが
// 実際には true にならないので注意してください。
if (e.PageSettings.PrinterSettings.Collate)
{
// 部単位で印刷する場合
if (_pageNumber < e.PageSettings.PrinterSettings.ToPage)
{
e.HasMorePages = true;
// ページ番号加算
_pageNumber = _pageNumber + 1;
}
else
{
if (_copyNumber < e.PageSettings.PrinterSettings.Copies)
{
e.HasMorePages = true;
// ページ番号初期化
_pageNumber = e.PageSettings.PrinterSettings.FromPage;
// 部数加算
_copyNumber = _copyNumber + 1;
}
else
{
e.HasMorePages = false;
}
}
}
else
{
if (_copyNumber < e.PageSettings.PrinterSettings.Copies)
{
e.HasMorePages = true;
// 部数加算
_copyNumber = _copyNumber + 1;
}
else
{
if (_pageNumber < e.PageSettings.PrinterSettings.ToPage)
{
e.HasMorePages = true;
// 部数初期化
_copyNumber = 1;
// ページ番号加算
_pageNumber = _pageNumber + 1;
}
else
{
e.HasMorePages = false;
}
}
}
}
}
}
|
|
|
※このページで紹介しているサンプルコードについて管理者は動作保障をいたしません※
※サンプルコードを使用する場合は、自己責任でお願いします※
|
【楽天 ランキング:パソコン・周辺機器 - パソコン周辺機器】
|
|
|
|
このサイトはフリーソフトのMerge HTMLで作成されています。
このサイトはリンクフリーです。
|
ページの先頭に戻る |
Copyright© 2010-2015 Jun.Shiozaki All rights reserved. |
|
|
|