線を同時に描画するには?

解決


ポール  2005-06-22 22:06:48  No: 90608

まず、DataGridの1行1行に一本の線が引けるだけの座標の情報があって
その座標の情報から、ボタンを押した回数だけLineメソッドを使って
PictureBoxに線を描画したいのです。
しかし実際ボタンを押すと
1本目→1本目消えて2本目現れる→2本目消えて3本目現れる→・・・
というようになってしまいます。
それと、ボタン一回で全ての線の描画もしてみたいのですがどうしたらよいでしょうか?


ななし  2005-06-23 01:36:07  No: 90609

コントロールを動的に作成したいと言うことでしょうか?
こんな感じ?

コントロールの配列を作成する
http://jeanne.wankuma.com/tips/control/02-arraycontrol.html

#↑ここの掲示板でよくお見かけする、じゃんぬねっとさんのHPでした。


LESIA  2005-06-23 13:41:22  No: 90610

ボタンにはどういうコードをかいているのでしょうか?


ポール  2005-06-23 20:04:40  No: 90611

ボタンのコードです。
それと線というのは少々語弊がありまして、
結果的には線を繋げてのグラフのような物を作りたいと考えています。
言葉足らずで申し訳ございません。

Private Sub Command1_Click()
Dim cx As Integer, cy As Integer, lx As Integer, ly As Integer
Dim sx As Integer, sy As Integer, ex As Integer, ey As Integer

    cx = 1000       'グラフの原点(X)
    cy = 2800       'グラフの原点(Y)
    lx = 4000       'グラフのX軸範囲
    ly = 2500       'グラフのY軸範囲
    ex = 0
    ey = 0
    sx = 0
    sy = 0
    
Picture1.BackColor = QBColor(15)                  'グラフの背景を明るい白に設定
Picture1.Line (cx, cy)-(cx + lx, cy - ly), , B    'グラフの範囲をボックス囲にする

Picture1.DrawStyle = 2

'縦軸の目盛りをつける
For i = 0 To 10
    Picture1.Line (cx, cy - 500 * i)-(cx + lx, cy - 500 * i)
    Picture1.CurrentX = cx - 350
    Picture1.CurrentY = cy - 250 * i - 80
    Picture1.Print Format(i * 1, "0.00")
    Next i
    
'横軸の目盛りをつける
For i = 0 To 5
    Picture1.Line (cx + i * 800, cy)-(cx + i * 800, cy - ly)
Next i

For i = 0 To 10
    Picture1.CurrentX = cx - 30 + i * 400 '/ (n - 1)
    Picture1.CurrentY = cy + 50
    DataGrid1.Col = 0
    DataGrid1.Row = i
    Picture1.Print DataGrid1.Text
Next i

Picture1.DrawStyle = 0          'これ以降の線を実線とする

'グラフ描画の最初の点を設定
DataGrid1.Col = 1
DataGrid1.Row = 0            '最初のデータ

rec.MoveFirst
dt = Val(rec!フィールド2) * 500 / 2
sx = cx
sy = cy - dt
DataGrid1.Row = 0

'グラフの描画
    R = (Rnd * 255) \ 1
    G = (Rnd * 255) \ 1
    B = (Rnd * 255) \ 1

    For j = 0 To 9

        DataGrid1.Col = j
        dt = Val(rec!フィールド3) * 500 / 2
        ex = cx + (j * 400)
        ey = cy - dt
    
        Picture1.Line (sx, sy)-(ex, ey), RGB(R, G, B)
        sx = ex
        sy = ey
        
        If rec.EOF = False And rec.BOF = False Then
            rec.MoveNext
        End If
    Next j
    
'End If

End Sub


LESIA  2005-06-23 20:23:24  No: 90612

ボタンを押すたびにグラフ自体を書いているので撰も消えてしまいます。
グラフの作成と、線の描画は分けましょう。

Private Sub Form_Load()
Dim cx As Integer, cy As Integer, lx As Integer, ly As Integer
Dim sx As Integer, sy As Integer, ex As Integer, ey As Integer

    cx = 1000       'グラフの原点(X)
    cy = 2800       'グラフの原点(Y)
    lx = 4000       'グラフのX軸範囲
    ly = 2500       'グラフのY軸範囲
    ex = 0
    ey = 0
    sx = 0
    sy = 0
    
Picture1.BackColor = QBColor(15)                  'グラフの背景を明るい白に設定
Picture1.Line (cx, cy)-(cx + lx, cy - ly), , B    'グラフの範囲をボックス囲にする

Picture1.DrawStyle = 2

'縦軸の目盛りをつける
For i = 0 To 10
    Picture1.Line (cx, cy - 500 * i)-(cx + lx, cy - 500 * i)
    Picture1.CurrentX = cx - 350
    Picture1.CurrentY = cy - 250 * i - 80
    Picture1.Print Format(i * 1, "0.00")
    Next i
    
'横軸の目盛りをつける
For i = 0 To 5
    Picture1.Line (cx + i * 800, cy)-(cx + i * 800, cy - ly)
Next i

For i = 0 To 10
    Picture1.CurrentX = cx - 30 + i * 400 '/ (n - 1)
    Picture1.CurrentY = cy + 50
    DataGrid1.Col = 0
    DataGrid1.Row = i
    Picture1.Print DataGrid1.Text
Next i
End Sub

Private Sub Command1_Click()
Dim cx As Integer, cy As Integer, lx As Integer, ly As Integer
Dim sx As Integer, sy As Integer, ex As Integer, ey As Integer

Picture1.DrawStyle = 0          'これ以降の線を実線とする

'グラフ描画の最初の点を設定
DataGrid1.Col = 1
DataGrid1.Row = 0            '最初のデータ

rec.MoveFirst
dt = Val(rec!フィールド2) * 500 / 2
sx = cx
sy = cy - dt
DataGrid1.Row = 0

'グラフの描画
    R = (Rnd * 255) \ 1
    G = (Rnd * 255) \ 1
    B = (Rnd * 255) \ 1

    For j = 0 To 9

        DataGrid1.Col = j
        dt = Val(rec!フィールド3) * 500 / 2
        ex = cx + (j * 400)
        ey = cy - dt
    
        Picture1.Line (sx, sy)-(ex, ey), RGB(R, G, B)
        sx = ex
        sy = ey
        
        If rec.EOF = False And rec.BOF = False Then
            rec.MoveNext
        End If
    Next j
    
'End If

End Sub


ポール  2005-06-24 02:23:44  No: 90613

なるほど!
あらかじめフォームの方で線の準備をしておいてグラフだけを
ボタンを押したときに作成すればよかったんですね。
どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加