まず、DataGridの1行1行に一本の線が引けるだけの座標の情報があって
その座標の情報から、ボタンを押した回数だけLineメソッドを使って
PictureBoxに線を描画したいのです。
しかし実際ボタンを押すと
1本目→1本目消えて2本目現れる→2本目消えて3本目現れる→・・・
というようになってしまいます。
それと、ボタン一回で全ての線の描画もしてみたいのですがどうしたらよいでしょうか?
コントロールを動的に作成したいと言うことでしょうか?
こんな感じ?
コントロールの配列を作成する
http://jeanne.wankuma.com/tips/control/02-arraycontrol.html
#↑ここの掲示板でよくお見かけする、じゃんぬねっとさんのHPでした。
ボタンにはどういうコードをかいているのでしょうか?
ボタンのコードです。
それと線というのは少々語弊がありまして、
結果的には線を繋げてのグラフのような物を作りたいと考えています。
言葉足らずで申し訳ございません。
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
ボタンを押すたびにグラフ自体を書いているので撰も消えてしまいます。
グラフの作成と、線の描画は分けましょう。
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
なるほど!
あらかじめフォームの方で線の準備をしておいてグラフだけを
ボタンを押したときに作成すればよかったんですね。
どうもありがとうございました。
ツイート | ![]() |