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

■35361 / 親記事)  画像のスクロール
  
□投稿者/ ま〜 付き人(53回)-(2023/01/30(Mon) 14:51:42)
  • アイコン環境/言語:[VS2022 Basic Windows10] 
    分類:[.NET] 

    お世話になります

    PictureBox内に画像を下から少しづつスクロールして表示したのですが
    何か良い方法はありますでしょうか?


マルチポストを報告
違反を報告
引用返信 削除キー/
■35362 / ResNo.1)  Re[1]: 画像のスクロール
□投稿者/ 魔界の仮面弁士 大御所(1530回)-(2023/01/30(Mon) 15:22:43)
  • アイコンNo35361に返信(ま〜さんの記事)
    > PictureBox内に画像を下から少しづつスクロールして表示したのですが

    Windows Forms で良いのですよね?

    複数の PictureBox が縦方向に並んでいて、
    それが順次スクロールされていく感じでしょうか。
    それとも、PictureBox よりも大きなサイズの画像があって、
    それがスクロール表示されるようなイメージでしょうか。

    前者の場合、Panel や Form を AutoScroll にすればスクローラブルになります。
    https://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=34662&no=0&KLOG=4

    後者の場合、ユーザーへのスクロール操作も許可するのであれば、
    このサイト(DOBON.NET)の プログラミング > .NET Tips > 画像、印刷(GDI+)
    にある『スクロールバーを付けて画像を表示する』が該当します。


    スクロールバーが付いたら、あとはフォームに Timer を使って、
    時間経過に応じてスクロール位置を調整するコードを書けばよいでしょう。
    プログラミング > .NET Tips > フォーム(System.Windows.Forms)
    『AutoScrollをTrueにしてスクロールバーを表示させた時、指定した位置までスクロールする』
    あたりが参考になるかと思います。


    あるいは、PictureBox よりも大きなサイズの画像があって、
    その一部領域をスクロールしながら描画したいといった目的なら、
    巨大画像の TextureBrush を事前に用意しておき、スクロール位置を
    表すフィールドを、Timer の Tick イベントで定期的に更新して、
    PictureBox1.Invalidate() を呼び出すようにします。それによって
    PictureBox1 の Paint イベントが呼び出される他の出、
    描画先の座標をずらしながら、用意した TextureBrush を
    e.Graphics.FillRectangle すると、比較的滑らかに描画できます。
    http://dobon.net/vb/bbs/log3-39/23844.html
違反を報告
引用返信 削除キー/
■35363 / ResNo.2)  Re[2]: 画像のスクロール
□投稿者/ ま〜 付き人(54回)-(2023/01/30(Mon) 17:25:56)
  • アイコンいつもありがとうございます。

    言葉足らず(文字足らず)ですみません

    人間は関与しない形で同じサイズの画像を下から徐々に出して行き上方向に消えていくのを作りたいです

    https://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=34662&no=0&KLOG=4

    が該当するのでしょうか?


違反を報告
引用返信 削除キー/
■35364 / ResNo.3)  Re[3]: 画像のスクロール
□投稿者/ 魔界の仮面弁士 大御所(1531回)-(2023/01/30(Mon) 18:36:24)
  • アイコンNo35363に返信(ま〜さんの記事)
    > 人間は関与しない形で同じサイズの画像を下から徐々に出して行き上方向に消えていくのを作りたいです

    やりたいことは分かりましたが、質問内容は何ですか?
    手順的な面は既に回答していますが、どの点で詰まっている状況なのかを
    具体的に説明していただかないと、回答しづらいです。


    Timer の使い方は分かりますか?
     → Tick イベント、Interval プロパティ、Start/Stop メソッド


    PictureBox への描画方法は分かりますか?
     プログラミング > .NET Tips > 画像、印刷(GDI+)
      コントロールのGraphicsオブジェクトを使って、画像を表示する
      画像の一部を切り取って(トリミングして)表示する
      ワールド変換により画像を平行移動、拡大、縮小、回転して表示する
違反を報告
引用返信 削除キー/
■35365 / ResNo.4)  Re[4]: 画像のスクロール
□投稿者/ ま〜 付き人(55回)-(2023/01/31(Tue) 13:04:21)
  • アイコンいつもありがとうございます

    > Timer の使い方は分かりますか?
    >  → Tick イベント、Interval プロパティ、Start/Stop メソッド

    ここは昔(VB6)と変わらないので何とか使えてます

    https://dobon.net/vb/dotnet/graphics/transform.html
    を参考になんとかできました。ありがとうございます

    記事中にあります

    'ワールド変換行列を単位行列にリセット
    g.ResetTransform()

    の仕組みが分からないのですがこれはどう考えれば宜しいでしょうか?



違反を報告
引用返信 削除キー/
■35366 / ResNo.5)  Re[5]: 画像のスクロール
□投稿者/ 魔界の仮面弁士 大御所(1532回)-(2023/02/06(Mon) 13:51:46)
  • アイコンNo35365に返信(ま〜さんの記事)
    > ここは昔(VB6)と変わらないので何とか使えてます
    >
    > 'ワールド変換行列を単位行列にリセット
    > g.ResetTransform()
    > の仕組みが分からないのですがこれはどう考えれば宜しいでしょうか?

    VB6 時代の描画命令でも、座標系の変更はできましたよね。
    回転はなくてスケーリング程度ですが。

    Private Command1_Click()
     '座標系をリセットする
     Picture1.Scale
     '左上から 四分の一程度右下にずらした位置を、原点座標とする
     Picture1.Scale (-50, -50)-(150, 150)

     '赤箱はボックス中央に描かれる
     Picture1.Line (0, 0)-(100, 100), vbRed, BF

     '座標系をリセットする(左上が原点の Twips 座標系)
     Picture1.Scale

     '青箱はボックス左上に描かれる
     '(赤箱と同じ指定だが、座標系が異なるので描画位置も変化する)
     Picture1.Line (0, 0)-(100, 100), vbBlue, BF
    End Sub


    VB6 で座標系をユーザー定義単位系に変更する場合
     Picture1.ScaleMode = vbUser
     Picture1.Scale (x1, y1)-(x2, y2)
    などと書きました。

    引数付きの Scale メソッドは、
    ScaleLeft, ScaleTop, ScaleWidth, ScaleHeight プロパティを
    一括指定するためのものです。
    http://rucio.a.la9.jp/main/kiso/Scale.htm

    で、変更した座標系を元の「左上原点の Twips 座標系」に戻す場合、
     Picture1.Scale '引数無しの Scale メソッド呼び出し
    もしくは、
     Picture1.ScaleMode = vbTwips
    などを使ってリセットできます。

    そして .NET の g.ResetTransform() というのは、この
    「元の座標系に戻すリセット処理」に相当します。


    .NET の Grapchis と VB6 の描画命令に互換性は無いので、
    細かい違いはありますが、ひとまず概念的な話ということで…。
違反を報告
引用返信 削除キー/
■35367 / ResNo.6)  Re[6]: 画像のスクロール
□投稿者/ ま〜 付き人(56回)-(2023/02/07(Tue) 19:32:31)
  • アイコンご指導の下色々やってみました。
    なるほど、なるほどって感じで
    やっと理解できました。

    ほんといつもありがとうございます。

    クローズします。
解決み!
違反を報告
引用返信 削除キー/



スレッド内ページ移動 / << 0 >>

このスレッドに書きこむ

Mode/  Pass/


- Child Tree -