none
PrintPreviewDialogの不思議 RRS feed

  • 質問

  • 初めて投稿します。yama.y.yamaと申します。宜しくお願いします。

    現在、下記環境でアプリケーションを作成しております。

     ・WinXP-Pro

     ・VB.NET 2003

    PrintPreviewDialogを使用して印刷プレビュー画面を表示した際に、2つの問題が発生しており困っております。ご存知の方がいらっしゃいましたらご教授頂きたいと思います。

    ①プレビュー画面表示時に用紙の右辺・下辺にゴミのようなものが見えます。印刷データには無いものでwindows をマウスを使って画面からはみ出させると無くなる。画面の残像が見えてしまっている様にも見えるのですが、この現象を解消する方法はありますでしょうか?

    ②プレビュー画面表示時に、プレビュープロセスが起動されてプレビューが表示されるのですが、タスクバーからプレビュー画面を呼び出した側のボタンが消えてしまう。プレビュー画面のボタンは存在している。プレビュー画面を閉じたら呼出側のボタンが表示される。(呼出側のボタンにプレビュー画面のボタンが重なっているようなイメージ)。スタートバーの設定は、「同様のタスクバーボタンをグループ化する」のチェックははずしてあります。これを、呼出側のボタンとプレビュー画面のボタンの両方が表示されるようにする為の方法はありますでしょうか?

    宜しくお願いします。

     

    2007年2月16日 9:02

すべての返信

  • 私のところでは問題なく動作します。ごみの問題は、白い印刷領域と縁取りの間の細い領域が描画が変わる時がありますが。

    yama.y.yamaさんのところで新規にプロジェクトを作り、簡単なプレビューアプリを作り、再現するかどうかを確かめてください。再現するのであればその簡単なほうのソースをアップし、再現しないのであれば、ご自身でおかしいほうのコードを少しずつ減らして、どこが問題か確かめるしかないかと。

    2007年2月18日 12:14
  • おっちぃ 様

    返信ありがとう御座います。また、回答が遅くなりまして、大変申し訳御座いません。

    アドバイス頂いた簡単なプレビューアプリを作って再現性を試して見ましたが、再現してしまいました。

    簡単なアプリは、WEB上にあった「PrintPreviewDialog」を使用したプレビュー表示を使って試して見たのですが、同じ現象が発生するようです。

    おっちぃさんの環境では再現しないとの事でしたが、環境の問題なのでしょうか?

    以下ソースです。

    大変お手数ですが、宜しくお願い申し上げます。

     

    ●使用オブジェクト:Button1オブジェクト

    ●サンプルソース

    Public Class Form1
        Inherits System.Windows.Forms.Form

    #Region " Windows フォーム デザイナで生成されたコード "

        Public Sub New()
            MyBase.New()

            ' この呼び出しは Windows フォーム デザイナで必要です。
            InitializeComponent()

            ' InitializeComponent() 呼び出しの後に初期化を追加します。

        End Sub

        ' Form は、コンポーネント一覧に後処理を実行するために dispose をオーバーライドします。
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub

        ' Windows フォーム デザイナで必要です。
        Private components As System.ComponentModel.IContainer

        ' メモ : 以下のプロシージャは、Windows フォーム デザイナで必要です。
        'Windows フォーム デザイナを使って変更してください。 
        ' コード エディタを使って変更しないでください。
        Friend WithEvents Button1 As System.Windows.Forms.Button
        Friend WithEvents PrintDocument1 As System.Drawing.Printing.PrintDocument
        Friend WithEvents PrintDocument2 As System.Drawing.Printing.PrintDocument
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            Me.Button1 = New System.Windows.Forms.Button
            Me.PrintDocument1 = New System.Drawing.Printing.PrintDocument
            Me.PrintDocument2 = New System.Drawing.Printing.PrintDocument
            Me.SuspendLayout()
            '
            'Button1
            '
            Me.Button1.Location = New System.Drawing.Point(112, 120)
            Me.Button1.Name = "Button1"
            Me.Button1.TabIndex = 0
            Me.Button1.Text = "Button1"
            '
            'PrintDocument1
            '
            '
            'Form1
            '
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 12)
            Me.ClientSize = New System.Drawing.Size(292, 266)
            Me.Controls.Add(Me.Button1)
            Me.Name = "Form1"
            Me.Text = "Form1"
            Me.ResumeLayout(False)

        End Sub

    #End Region

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            Dim Previewer As New PrintPreviewDialog
            Previewer.Document = PrintDocument1
            Previewer.ShowDialog() 'プレビュー実行

        End Sub


        Private Sub PrintDocument1_PrintPage_1(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            Dim f As Font
            Dim i As Integer
            Dim Y As Single '次の印字縦位置
            Dim X As Single '次の印字横位置
            Dim MaxHeight As Integer '現在の行で一番背が高い文字の高さ
            Dim Lines As Integer

            Y = e.MarginBounds.Top

            For Lines = 0 To 4

                X = e.MarginBounds.Left
                MaxHeight = 0

                '段々と文字を大きくして1行を印刷する
                For i = 0 To 9
                    f = New Font("MS明朝", 10 + (i * 2), FontStyle.Bold)
                    MaxHeight = Math.Max(MaxHeight, f.GetHeight(e.Graphics))
                    e.Graphics.DrawString("あ", f, Brushes.Red, X, Y)
                    X += e.Graphics.MeasureString("あ", f).Width
                Next

                '同じ大きさの文字で一行を印刷する
                Y += MaxHeight
                f = New Font("MS明朝", 12, FontStyle.Bold)
                e.Graphics.DrawString("この行はすべて同じ大きさで印字されます。", f, Brushes.Red, e.MarginBounds.Left, Y)
                Y += f.GetHeight(e.Graphics)

            Next

        End Sub

        Private Sub PrintPreviewControl1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        End Sub

        Private Sub PrintPreviewControl1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs)

        End Sub

        Private Sub PrintPreviewControl2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        End Sub
    End Class

     

    2007年2月20日 15:45
  • 再現しましたか。私のところでは、提示されたソースで問題なしです。

    で、タスクバーのほうの問題は、ShowInTaskBarプロパティをTrueにされているのでしょうか?

    とりあえず、バージョンあわせでも。

    Microsoft Development Environment 2003 Version 7.1.3091

    Microsoft .NET Framework 1.1 バージョン 1.1.4322 SP1

    です。

    2007年2月20日 16:26