C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: 印刷プレビューにて、マウスホイールでの拡大縮小について


(過去ログ 103 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■61520 / inTopicNo.1)  印刷プレビューにて、マウスホイールでの拡大縮小について
  
□投稿者/ TOM (4回)-(2011/08/18(Thu) 10:40:02)

分類:[VB.NET/VB2005 以降] 

お世話になっております。
今回、ご質問したいのは、印刷プレビューで、マウスホイールを使用してプレビュー内を拡大、縮小する件についてです。
現在、マウスホイールを使用して拡大、縮小は出来ています。
問題なのは、拡大や縮小を行う基準が、プレビュー内の左上となっている点です。
できれば、マウスのカーソル位置を基準に拡大縮小を行いたいのですが、どなたか解る方がいられましたらご教授願います。

開発環境はvb.net 2010 になります。

ちなみに、マウスホイールのイベント時の処理は下記のように記述しています。

Private Sub PrevDialog_MouseWheel(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles revDialog.MouseWheel

    'スクロールホイールがあるマウス
        If (My.Computer.Mouse.WheelExists) Then

	    'コントロールキーが押されている
            If (System.Windows.Forms.Control.ModifierKeys And Keys.Control) = Keys.Control Then

                If e.Delta > 0 Then
		  '拡大処理
                    If (PrevDialog.PrintPreviewControl.Zoom + 0.05F) < 5.0F Then
                        PrevDialog.PrintPreviewControl.Zoom += 0.05F
                    End If
                Else
		    '縮小処理
                    If (PrevDialog.PrintPreviewControl.Zoom - 0.05F) > 0.1F Then
                        PrevDialog.PrintPreviewControl.Zoom -= 0.05F
                    End If
                End If
            End If
        End If
End Sub

以上、宜しくお願いします。

引用返信 編集キー/
■61521 / inTopicNo.2)  Re[1]: 印刷プレビューにて、マウスホイールでの拡大縮小について
□投稿者/ くり太郎 (45回)-(2011/08/18(Thu) 11:48:57)
くり太郎 さんの Web サイト
やったことはないのですが、マウスの位置を取得して、描画域の左上の座標を調整するなどでできないんでしょうか?
引用返信 編集キー/
■61522 / inTopicNo.3)  Re[2]: 印刷プレビューにて、マウスホイールでの拡大縮小について
□投稿者/ TOM (6回)-(2011/08/18(Thu) 13:03:32)
No61521 (くり太郎 さん) に返信
> やったことはないのですが、マウスの位置を取得して、描画域の左上の座標を調整するなどでできないんでしょうか?

そうなんです。そういう感じで対応できるのであれば、そうしたいのですが・・・。その方法がわからなくて。
引用返信 編集キー/
■61523 / inTopicNo.4)  Re[3]: 印刷プレビューにて、マウスホイールでの拡大縮小について
□投稿者/ くり太郎 (46回)-(2011/08/18(Thu) 13:39:21)
くり太郎 さんの Web サイト
No61522 (TOM さん) に返信
> ■No61521 (くり太郎 さん) に返信
>>やったことはないのですが、マウスの位置を取得して、描画域の左上の座標を調整するなどでできないんでしょうか?
>
> そうなんです。そういう感じで対応できるのであれば、そうしたいのですが・・・。その方法がわからなくて。

自分で試せていないので、外しているかもしれませんが・・・

マウスイベント発生時のマウスポインターの座標については、以下のプロパティから取得できそうですよ

http://msdn.microsoft.com/ja-jp/library/system.windows.forms.mouseeventargs_members(v=VS.80).aspx

左上の位置の設定については、以下のプロパティの設定で何とかならないでしょうか?
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.printpreviewcontrol_members(v=VS.80).aspx
引用返信 編集キー/
■61535 / inTopicNo.5)  Re[4]: 印刷プレビューにて、マウスホイールでの拡大縮小について
□投稿者/ TOM (7回)-(2011/08/18(Thu) 17:22:05)
No61523 (くり太郎 さん) に返信
> ■No61522 (TOM さん) に返信
>>■No61521 (くり太郎 さん) に返信
> >>やったことはないのですが、マウスの位置を取得して、描画域の左上の座標を調整するなどでできないんでしょうか?
>>
>>そうなんです。そういう感じで対応できるのであれば、そうしたいのですが・・・。その方法がわからなくて。
>
> 自分で試せていないので、外しているかもしれませんが・・・
>
> マウスイベント発生時のマウスポインターの座標については、以下のプロパティから取得できそうですよ
>
> http://msdn.microsoft.com/ja-jp/library/system.windows.forms.mouseeventargs_members(v=VS.80).aspx

 マウスの位置は取得出来ました。ありがとうございます。

>
> 左上の位置の設定については、以下のプロパティの設定で何とかならないでしょうか?
> http://msdn.microsoft.com/ja-jp/library/system.windows.forms.printpreviewcontrol_members(v=VS.80).aspx

 どのプロパティに設定すれば良いのかわかりません。リンク先に飛んでも、全てが表示されてしまって・・・。

 もし、怪しいプロパティがわかれば、教えて頂けると助かります。
引用返信 編集キー/
■61537 / inTopicNo.6)  Re[5]: 印刷プレビューにて、マウスホイールでの拡大縮小について
□投稿者/ くり太郎 (47回)-(2011/08/18(Thu) 19:13:46)
くり太郎 さんの Web サイト
No61535 (TOM さん) に返信
>>左上の位置の設定については、以下のプロパティの設定で何とかならないでしょうか?
>>http://msdn.microsoft.com/ja-jp/library/system.windows.forms.printpreviewcontrol_members(v=VS.80).aspx
>
>  どのプロパティに設定すれば良いのかわかりません。リンク先に飛んでも、全てが表示されてしまって・・・。
>
>  もし、怪しいプロパティがわかれば、教えて頂けると助かります。

うーん ClientRectangle とかかなぁ・・・
生のプレビュー部分を示すとあるので、おそらく Top, Left, Location あたりでも良いような気もしますけど
引用返信 編集キー/
■61538 / inTopicNo.7)  Re[6]: 印刷プレビューにて、マウスホイールでの拡大縮小について
□投稿者/ TOM (8回)-(2011/08/18(Thu) 19:46:07)
No61537 (くり太郎 さん) に返信
> ■No61535 (TOM さん) に返信
> >>左上の位置の設定については、以下のプロパティの設定で何とかならないでしょうか?
> >>http://msdn.microsoft.com/ja-jp/library/system.windows.forms.printpreviewcontrol_members(v=VS.80).aspx
>>
>> どのプロパティに設定すれば良いのかわかりません。リンク先に飛んでも、全てが表示されてしまって・・・。
>>
>> もし、怪しいプロパティがわかれば、教えて頂けると助かります。
>
> うーん ClientRectangle とかかなぁ・・・
> 生のプレビュー部分を示すとあるので、おそらく Top, Left, Location あたりでも良いような気もしますけど

ありがとうございます。
ちょっと頑張ってその辺りの設定を色々と変えて試してみたいと思います。
引用返信 編集キー/
■61540 / inTopicNo.8)  Re[5]: 印刷プレビューにて、マウスホイールでの拡大縮小について
□投稿者/ 魔界の仮面弁士 (2317回)-(2011/08/18(Thu) 20:34:25)
No61535 (TOM さん) に返信
>  もし、怪しいプロパティがわかれば、教えて頂けると助かります。

MouseWheel イベントの処理中に、PrevDialog.PrintPreviewControl.Handle で得たハンドルに対して:
 (1) GetScrollInfo API で、垂直/水平スクロール領域の情報を得る。
 (2) Zoom プロパティを +0.05 する。
 (3) Zoom 結果を即座に反映させるため、PrevDialog.Update() を呼び出す。
 (4) GetScrollInfo API を再度呼び出し、垂直/水平スクロール領域の情報を得る。
のようにした場合、1 と 4 からスクロール領域の変化が得られました。

あとは、スクロールボックスのサイズを再計算してセットし直してやれば、
位置変更ができるかもしれません。(位置変更についてはまだ試していません)
引用返信 編集キー/
■61547 / inTopicNo.9)  Re[7]: 印刷プレビューにて、マウスホイールでの拡大縮小について
□投稿者/ shu (942回)-(2011/08/18(Thu) 23:44:26)
PictureBox + VScrollBar + HScrollBarを使って
そこにプレビューイメージを表示してしまえばいろいろ可能だと思います。
その分PrintPreviewControlに実装されている機能の実装が必要になりますが。

簡易的に表示する部分のみです。

    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

引用返信 編集キー/
■61555 / inTopicNo.10)  Re[6]: 印刷プレビューにて、マウスホイールでの拡大縮小について
□投稿者/ TOM (9回)-(2011/08/19(Fri) 10:28:11)
No61540 (魔界の仮面弁士 さん) に返信
> ■No61535 (TOM さん) に返信
>> もし、怪しいプロパティがわかれば、教えて頂けると助かります。
>
> MouseWheel イベントの処理中に、PrevDialog.PrintPreviewControl.Handle で得たハンドルに対して:
>  (1) GetScrollInfo API で、垂直/水平スクロール領域の情報を得る。
>  (2) Zoom プロパティを +0.05 する。
>  (3) Zoom 結果を即座に反映させるため、PrevDialog.Update() を呼び出す。
>  (4) GetScrollInfo API を再度呼び出し、垂直/水平スクロール領域の情報を得る。
> のようにした場合、1 と 4 からスクロール領域の変化が得られました。
>
> あとは、スクロールボックスのサイズを再計算してセットし直してやれば、
> 位置変更ができるかもしれません。(位置変更についてはまだ試していません)

ありがとうございます。スクロールで対処するやりかたですね。詳しく説明して頂いてありがとうござます。試してみます。
引用返信 編集キー/
■61556 / inTopicNo.11)  Re[8]: 印刷プレビューにて、マウスホイールでの拡大縮小について
□投稿者/ TOM (10回)-(2011/08/19(Fri) 10:30:40)
No61547 (shu さん) に返信
> PictureBox + VScrollBar + HScrollBarを使って
> そこにプレビューイメージを表示してしまえばいろいろ可能だと思います。
> その分PrintPreviewControlに実装されている機能の実装が必要になりますが。
>
> 簡易的に表示する部分のみです。
>
> 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

ソースでのご説明ありがとうございます。大変助かります。PictureBoxを使用すると、色々出来そうですね。皆様に頂いたご意見を上手く活用して挑戦してみます。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -