下記のようなサンプルプログラムを見つけたのでお借りして
Picture1(0)、Picture1(1)、Timer1を配置して実行したところ
Picture1(0)とPicture1(1)の繋ぎ目がどうしても目立ってしまうのですが
なにか解決する方法があれば教えていただきたいのですが。。。
それと参考のため、座標は固定してLineのみ動かすには
どうしたらよいのでしょうか?教えて下さい。
Option Explicit
Const TTT = 80
Private Sub Form_Load()
Dim n As Integer
Me.Width = TTT * 120 'フォーム・ピクチャボックスの大きさ設定
Me.Height = 6720
For n = 0 To 1
Picture1(n).Width = Me.Width
Picture1(n).Height = 5550
Picture1(n).Left = 0
Picture1(n).Top = 240
Picture1(n).BackColor = RGB(0, 0, 0) '背景色を黒に設定
SCALE_DRAW n
Next
Picture1(1).Left = Picture1(0).Left + Picture1(0).Width
Timer1.Interval = 50
Timer1.Enabled = True
End Sub
Sub SCALE_DRAW(n)
Dim OLD_X As Integer, OLD_Y As Integer
Picture1(n).AutoRedraw = True
Picture1(n).DrawWidth = 1
Picture1(n).DrawStyle = 0
Picture1(n).ForeColor = RGB(50, 110, 50)
For OLD_X = 0 To 10000 Step 300
Picture1(n).Line (OLD_X, 0)-(OLD_X, 5550)
Next OLD_X
For OLD_Y = 0 To 5550 Step 300
If OLD_Y = 2700 Then '水平位置基準線
Picture1(n).DrawWidth = 1.3 '若干太め
Picture1(n).DrawStyle = 2 '鎖線
Picture1(n).ForeColor = RGB(0, 220, 0) '明るい色
Else '標準目盛線
Picture1(n).DrawWidth = 1 '標準の太さ
Picture1(n).DrawStyle = 0 '目盛標準線
Picture1(n).ForeColor = RGB(50, 110, 50) '目盛標準色
End If
Picture1(n).Line (0, OLD_Y)-(10000, OLD_Y)
Next OLD_Y
Picture1(n).ForeColor = RGB(255, 255, 255)
OLD_Y = 0
OLD_X = 0
End Sub
Private Sub Timer1_Timer()
Draw
End Sub
Private Sub Draw()
Dim Y As Integer
Static OLD_X As Integer
Static OLD_Y As Integer
Y = Int(Rnd * 3500)
'描画が端に来たらPictureを切り替える
If OLD_X > Picture1(0).Width Then
If Picture1(0).Left < Picture1(1).Left Then
Picture1(0).Left = Picture1(1).Left + Picture1(1).Width
Picture1(0).Cls
SCALE_DRAW (0)
Else
Picture1(1).Left = Picture1(0).Left + Picture1(0).Width
Picture1(1).Cls
SCALE_DRAW (1)
End If
OLD_X = 0
End If
'常に右側のPictureに描画
If Picture1(0).Left < Picture1(1).Left Then
Picture1(1).Line (OLD_X, OLD_Y)-(OLD_X + TTT, Y)
Picture1(0).Left = Picture1(0).Left - TTT
Picture1(1).Left = Picture1(0).Left + Picture1(0).Width
Else
Picture1(0).Line (OLD_X, OLD_Y)-(OLD_X + TTT, Y)
Picture1(1).Left = Picture1(1).Left - TTT
Picture1(0).Left = Picture1(1).Left + Picture1(1).Width
End If
OLD_X = OLD_X + TTT
OLD_Y = Y
End Sub
繋ぎ目はPicture1(0)とPicture1(1)の
Appearanceを「フラット」に、「BorderStyle」をなしにセットするか
コードで
Picture1(0).Appearance = 0
Picture1(0).BorderStyle = 0
Picture1(1).Appearance = 0
Picture1(1).BorderStyle = 0
とします。
>それと参考のため、座標は固定してLineのみ動かすには
>どうしたらよいのでしょうか?教えて下さい。
なるほどそう来ましたか。(^^;
確かにオシロスコープなどではスケールは固定していますからね。
Frameを細くしてBackColorを線の色に設定して、PictureBoxの上に置く
位しか思いつきません。。。。。。
回答ありがとうございます。境界を消すことができました。
>Frameを細くしてBackColorを線の色に設定して、PictureBoxの上に置く
Frameを線状にして目盛りとして使用するということでしょうか?
やってみたのですがPictureBox上に配置するとPictureBoxと共に
左に流れていってしまうのですが・・・
>やってみたのですがPictureBox上に配置するとPictureBoxと共に左に
>流れていってしまうのですが・・・
あいやいや、PictureBoxでは無くFormの上に直接載せます、
載せた後は右クリックで「最前面に移動」を。
要するにPictureBoxより前面に出るものであれば、
Frameで無くてもTextBoxでも違うPictureBoxでもいいのですが。
なるほど。
よくわかりました。
ありがとうございました。
ツイート | ![]() |