DOBON.NET DOBON.NETプログラミング掲示板過去ログ

PrintDocument プレビューを生成中を非表示

分類:[.NET]

いつもお世話になっております。

開発環境:VB2010

PrintDocumentの「印刷中」ダイアログは非表示できますが、
PrintPreviewDialogの「プレビューを生成中」ダイアログは
非表示にできないでしょうか?

いろいろなところで、無理なようなことが記載されていますが。
http://dobon.net/vb/dotnet/graphics/hideprintingdialog.html

アドバイスの程、よろしくお願いします。
■No29132に返信(kohaさんの記事)
> PrintDocumentの「印刷中」ダイアログは非表示できますが、
> PrintPreviewDialogの「プレビューを生成中」ダイアログは
> 非表示にできないでしょうか?

.NET 4 はどうだか分かりませんが、少なくとも .NET 3.5 までには
非表示にする機能は用意されていなかったはずです。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=61251&KLOG=102
2011/10/04(Tue) 08:56:10 編集(投稿者)

■No29132に返信(kohaさんの記事)

PictureBoxに表示するサンプルです。
Wankumaさんの掲示板に以前載せたものです。
1ページしか表示してないので、pics(0)部分をページ切り替え時に変更すると
よいです。

    Private pics() As Image = Nothing
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim conbak = PrintDocument1.PrintController
        Dim con as New PreviewPrintController
        PrintDocument1.PrintController = con
        PrintDocument1.Print()
        PrintDocument1.PrintController = conbak

        pics = (From pginf In con.GetPreviewPageInfo Select pginf.Image).ToArray
        PictureBox1.Refresh()
    End Sub

    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        e.Graphics.Clear(Color.DimGray)
        If pics Is Nothing Then Exit Sub
        e.Graphics.FillRectangle(Brushes.White, 10, 10, e.ClipRectangle.Width - 20, e.ClipRectangle.Height - 20)
        Dim destrect = New Rectangle(10, 10, e.ClipRectangle.Width - 20, e.ClipRectangle.Height - 20)
        e.Graphics.DrawImage(pics(0), New Rectangle(10, 10, e.ClipRectangle.Width - 20, e.ClipRectangle.Height - 20),
                                    New Rectangle(HScrollBar1.Value, VScrollBar1.Value, destrect.Width, destrect.Height), GraphicsUnit.Pixel)
        e.Graphics.DrawRectangle(Pens.Black, 10, 10, e.ClipRectangle.Width - 20, e.ClipRectangle.Height - 20)
    End Sub

    Private Sub VScrollBar1_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles VScrollBar1.ValueChanged
        PictureBox1.Refresh()
    End Sub

    Private Sub HScrollBar1_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles HScrollBar1.ValueChanged
        PictureBox1.Refresh()
    End Sub
■No29133に返信(魔界の仮面弁士さんの記事)
> ■No29132に返信(kohaさんの記事)
>>PrintDocumentの「印刷中」ダイアログは非表示できますが、
>>PrintPreviewDialogの「プレビューを生成中」ダイアログは
>>非表示にできないでしょうか?
>
> .NET 4 はどうだか分かりませんが、少なくとも .NET 3.5 までには
> 非表示にする機能は用意されていなかったはずです。
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=61251&KLOG=102

ありがとうございます。
いろいろ調べましたが、 .NET 4.0 でも機能はないようです。
■No29136に返信(shuさんの記事)
> 2011/10/04(Tue) 08:56:10 編集(投稿者)
>
> ■No29132に返信(kohaさんの記事)
>
> PictureBoxに表示するサンプルです。
> Wankumaさんの掲示板に以前載せたものです。
> 1ページしか表示してないので、pics(0)部分をページ切り替え時に変更すると
> よいです。
>
> Private pics() As Image = Nothing
> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
> Dim conbak = PrintDocument1.PrintController
> Dim con as New PreviewPrintController
> PrintDocument1.PrintController = con
> PrintDocument1.Print()
> PrintDocument1.PrintController = conbak
>
> pics = (From pginf In con.GetPreviewPageInfo Select pginf.Image).ToArray
> PictureBox1.Refresh()
> End Sub
>
> Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
> e.Graphics.Clear(Color.DimGray)
> If pics Is Nothing Then Exit Sub
> e.Graphics.FillRectangle(Brushes.White, 10, 10, e.ClipRectangle.Width - 20, e.ClipRectangle.Height - 20)
> Dim destrect = New Rectangle(10, 10, e.ClipRectangle.Width - 20, e.ClipRectangle.Height - 20)
> e.Graphics.DrawImage(pics(0), New Rectangle(10, 10, e.ClipRectangle.Width - 20, e.ClipRectangle.Height - 20),
> New Rectangle(HScrollBar1.Value, VScrollBar1.Value, destrect.Width, destrect.Height), GraphicsUnit.Pixel)
> e.Graphics.DrawRectangle(Pens.Black, 10, 10, e.ClipRectangle.Width - 20, e.ClipRectangle.Height - 20)
> End Sub
>
> Private Sub VScrollBar1_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles VScrollBar1.ValueChanged
> PictureBox1.Refresh()
> End Sub
>
> Private Sub HScrollBar1_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles HScrollBar1.ValueChanged
> PictureBox1.Refresh()
> End Sub
>

ありがとうごうざいます。
上記ソースで画像として扱えることができました。
画像とした場合、拡大、フィットなどの各機能を作る必要がありますが、
参考にさせてもらいます。
2011/10/05(Wed) 09:50:24 編集(投稿者)

「プレビューを生成中」ダイアログを非表示にする方法はないようなので、
1.そのまま使う
2.shu様に投稿してもらった方法で画像として扱う
の2通りしかないと思われます。

ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板