tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル点を一つ一つ出していくためには
記事No10406
投稿日: 2011/01/14(Fri) 17:37
投稿者PAO
以前点の表示方法でご質問させていただき、
表示自体できるようになったのですが
今回なのですが、配列を読み込み、点を表示させていきたいのですが
配列には座標が入っています
Public nInputPoint(13) As Integer
    Public InputPosition(1000, 13, 2) As Integer

        For i = 0 To nInputPoint(bodyIndex) - 1
            Dim h As Graphics = PictureBox1.CreateGraphics()
            Dim myBrush As New SolidBrush(Color.Blue)
            h.FillRectangle(myBrush, Form1.InputPosition(i, Form1.bodyIndex, 0), Form1.InputPosition(i, Form1.bodyIndex, 1), 10, 10)
        Next i
        Dim
    End Sub

これが現在のプログラムなのですがこれを実行させていくと
点というか配列に入っている座標のところ全てに点が表示されてしまいます
これをすべてではなく、一つ一つ表示させていき
点が動いているようにしたいのですがどうすればいいでしょうか?

[ツリー表示へ]
タイトルRe: 点を一つ一つ出していくためには
記事No10408
投稿日: 2011/01/14(Fri) 18:31
投稿者魔界の仮面弁士
> これをすべてではなく、一つ一つ表示させていき
> 点が動いているようにしたいのですがどうすればいいでしょうか?

Timer を利用して、
 1 回目の Tick イベントでは、配列内の最初の座標に点を打ち、
 2 回目の Tick イベントでは、配列内の2番目の座標に点を打ち、
 3 回目の Tick イベントでは、配列内の3番目の座標に点を打ち、
   :
   :
といった流れで、配列内の最後の点まで処理していけば良いと思います。

最後の点まで描画した後、そこで止まるのか/逆方向に動くのか/最初の点に戻るのかは
アプリの作り方次第ですね。

[ツリー表示へ]
タイトルRe: 点を一つ一つ出していくためには
記事No10412
投稿日: 2011/01/17(Mon) 14:49
投稿者PAO
何回か試みてはいるのですが、うまくいっていません・・・
下記のプログラム(これは画像ファイルをフォトフレームみたいに一つ一つ画像を出していくもの)
Dim img As Image = Image.FromFile(m_files(m_intFileIdx))
        PictureBox1.Image = img
        m_intFileIdx += 1
        If m_intFileIdx >= m_files.Length Then m_intFileIdx = 0
        If m_img IsNot Nothing Then
            m_img.Dispose()
        End If
        m_img = img
これを元にプログラムを作ってみたのですがうまくいきませんでした・・・
どうプログラムすればよいでしょうか・・・
自分的には上記のプログラムと下記のプログラムを
合わせればできると思っているのですが・・・
Public nInputPoint(13) As Integer
    Public InputPosition(1000, 13, 2) As Integer

        For i = 0 To Form1.nInputPoint(bodyIndex) - 1
            Dim h As Graphics = PictureBox1.CreateGraphics()
            Dim myBrush As New SolidBrush(Color.Blue)
            h.FillRectangle(myBrush, Form1.InputPosition(i, Form1.bodyIndex, 0), Form1.InputPosition(i, Form1.bodyIndex, 1), 10, 10)
        Next i
        Dim
    End Sub

[ツリー表示へ]
タイトルRe^2: 点を一つ一つ出していくためには
記事No10422
投稿日: 2011/01/30(Sun) 14:31
投稿者南場智子
配列とか宣言をよく理解すれば簡単なはずです。

例 画像(100枚) とゆう配列があれば100枚のトコを変数にするんです。
dim 画像ナンバーカウント as integerとかにする。
カウントの上限をこえた時の処理も必要ですね。

[ツリー表示へ]
タイトルRe^3: 点を一つ一つ出していくためには
記事No10423
投稿日: 2011/01/30(Sun) 19:20
投稿者南場とも子
こんな感じ。
昔のベーシックなら、もっと簡単かもね。

Option Strict On
Option Explicit On

'VisualBasic2010
'PictureBox1をフォームに入れといてね
'Timer1コンポーネントをフォームに入れといてね

Public Class Form1

    '少し難しいですょ↓↓
    '<<難しい場合は1次元配列でも同様の処理ができます>>
    Dim Ten_hyouji_counnter As Integer = 2

    Const Ten_hyouji_suu As Integer = 360 '線を表示する総数
    Dim Ten_List(Ten_hyouji_suu - 1) As Point 'Ten_Listを宣言する
    Dim cyusin_ten As New Point(220, 220) '中心点座標をインスタンスする

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        With Me 'フォーム1の設定
            .FormBorderStyle = Windows.Forms.FormBorderStyle.FixedToolWindow 'スタイル
            .Size = New Size(500, 500) 'フォーム1の大きさ
            .Location = New Point(200, 100) 'フォーム1の表示位置
            .Text = "配列使用例"
        End With
        With PictureBox1 'ピクチャーボックスの設定
            .Size = New Size(Width, Height) 'フォーム1と同じ大きさにする
            .BackColor = Color.Black
            .Location = New Point(0, 0) '念のため一応必要です
        End With
        With Timer1 'タイマーの設定
            .Interval = 10
            .Start()
        End With

        'TenListに表示点の情報を入れる>>座標(x、y)
        Dim x, y, m, k As Integer
        Dim r As Double 'ラジアン
        m = 220 '中心点からの長さ
        k = 90 '角度
        For i = 0 To Ten_hyouji_suu - 1 '表示したい点の数だけ配列に入れる
            r = k * Math.PI / 180 'ラジアンは小数点を使用します
            x = m + CInt(m * Math.Cos(r)) '表示点の横座標を計算します
            y = m + CInt(m * Math.Sin(r)) '表示点の縦座標を計算します
            Ten_List(i) = New Point(x, y) '配列に入れていく
            k += 1 '角度を1度ずつ増やす
        Next

    End Sub

    Sub open_graphics()
        'グラッフィクスを必用なぶんだけ表示する
        Dim map As Bitmap = New Bitmap(Width, Height)
        Dim g As Graphics = Graphics.FromImage(map)
        g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
        For i = 0 To Ten_hyouji_counnter
            g.DrawLine(Pens.YellowGreen, cyusin_ten, Ten_List(i)) '配列Ten_Listから情報を得る
        Next
        PictureBox1.BackgroundImage = map
        g.Dispose()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        open_graphics()
        Ten_hyouji_counnter += 1
        If Ten_hyouji_counnter > Ten_hyouji_suu - 1 Then
            Timer1.Stop()
            MsgBox("終了です")
            Close()
        End If
    End Sub
End Class

[ツリー表示へ]