プロが教える店舗&オフィスのセキュリティ対策術

下記のサイトに書かれている言語を今のバージョン(Visual Basic 2017)で使えるようにしたいです。
http://www.ritsumei.ac.jp/~hoshino/2002b/VB/VB00 …

ここに書かれているプログラムは流れるテロップを表示させるといったものですが、VariantをObjectに換えることはできました。ボタンのtrueとfalseの設定も上手くいきました。
ですが、テロップを流すところが上手くいきません。テロップが流れる速さ(文字/秒)を設定するところも上手くいきませんでした。

Private Sub cmdStart_Click()

Call TelopInit ' TelopInit() が呼ばれます。

pT = 1

cmdStop.Enabled = True
cmdStart.Enabled = False
cmdReStart.Enabled = False

Call TimerInit ' TimerInit() が呼ばれます。

End Sub

Private Sub TelopInit()
Dim a As Variant

' 全角スペースを先頭と終端に追加します。
text = String(tLen - 1, " ") + Text1.? + " "

len_text = Len(?) ' Len() は文字列の長さを調べます。

For i = 1 To len_text ' 行末の処理です。
a = Mid(text, i, 1) ' text の i 番目の文字を a に代入する。

If Asc(a) = 10 Or Asc(a) = 13 Then ' 行末ならば,
sa(i) = " " ' 全角スペースを sa(i) に代入する。
Else
sa(i) = a ' そうでなければ,a の値(文字)を代入する。
End If
Next i

End Sub


Private Sub Timer1_Timer()
Dim tBuff As Variant

For i = pT To pT + tLen - 1
If pT <= len_text Then
tBuff = tBuff + sa(?) ' tBuff に表示する文字列を貯えます。
End If
Next i

Label1.Caption = ?
pT = pT + 1 ' 1文字分 pT の値を進めます。

If (pT > Len(text)) Then ' 文字列をすべて表示したかどうかの判定
Beep
Timer1.Enabled = False
cmdStart.Enabled = True
cmdReStart.Enabled = False
cmdStop.Enabled = False
cmdClear.Enabled = True
Text1.Visible = ?
End If
End Sub

このプログラムを今のバージョンで運用できるようにするにはどうすればよろしいでしょうか。お願いいたします。

A 回答 (1件)

このころのVBと、今のVBとは違い過ぎます。


これをどうやったら、等と中途半端なやり方では、なかなかできません。

(1) 元のプログラムがどんな原理で動いているのかを理解する
(2) 新しいVBを使って一から作る

の方がおそらく確実にできます。


いくつか助言するなら
> Option Base 1

現在、Option Baseは廃止されています。
配列は常に0から始まります。
1から始まるのを使いたかったら、自作します。

> Private Sub cmdStart_Click()

VB6までは、cmdStartをクリックしたら、 cmdStart_Click を実行する、となっていましたが、
VB.Net以降では、プロシージャ名と動作には直接関係はありません。
VB6のようにしたかったら、 Handlesを使うか、AddHandler を使います。
また、引数も決まった形のものになります。

ほかの 〜 _ 〜 プロシージャも同様。


> VariantをObjectに換えることはできました

これは、元のプログラムが謎。
文字列なのだから、Stringを使えばいいのに、何故variantなんだろう?

> ?

ところどころにある ? は、適切なものに置き換える必要があります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!