PictureとPictureの繋ぎ目を消すには?

解決


ぷち  2004-12-22 01:29:30  No: 87523

下記のようなサンプルプログラムを見つけたのでお借りして
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


ねろ  2004-12-22 03:13:51  No: 87524

繋ぎ目は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の上に置く
位しか思いつきません。。。。。。


ぷち  2004-12-22 18:03:35  No: 87525

回答ありがとうございます。境界を消すことができました。

>Frameを細くしてBackColorを線の色に設定して、PictureBoxの上に置く
Frameを線状にして目盛りとして使用するということでしょうか?
やってみたのですがPictureBox上に配置するとPictureBoxと共に
左に流れていってしまうのですが・・・


ねろ  2004-12-22 18:12:19  No: 87526

>やってみたのですがPictureBox上に配置するとPictureBoxと共に左に
>流れていってしまうのですが・・・
あいやいや、PictureBoxでは無くFormの上に直接載せます、
載せた後は右クリックで「最前面に移動」を。
要するにPictureBoxより前面に出るものであれば、
Frameで無くてもTextBoxでも違うPictureBoxでもいいのですが。


ぷち  2004-12-24 18:14:20  No: 87527

なるほど。
よくわかりました。
ありがとうございました。


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

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






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