Visual Basic

ソフトを作る過程で必要になったサブルーチンなど。
ここの情報はかなり古いです。.NET以降だと使えないかもしれませんよ、あしからず。


Index

文字列末の \ を取り除く (CheckRoot)

リストボックスに項目があるかチェック (CheckList)

0byte のファイルを作る

0 1 0 1 ... と繰り返す

二重起動を防止

フォームを画面中央に配置

ファイル全体を変数に高速格納


文字列末の \ を取り除く (CheckRoot)
Public Function CheckRoot(s1 As String) As String

	'文字列末の \ を取り除く(ルートのときの対策)
	If Right(s1, 1) = "\" Then s1 = Left(s1, Len(s1) - 1)

	CheckRoot = s1 '結果を返す

End Function

または、こんな方法もあります。1行でスッキリ。…かな?
Public Function CheckRoot(s1 As String) As String

	'文字列末の \ を取り除く(ルートのときの対策)
	CheckRoot = Left(s1, Len(s1) + (Right(s1, 1) = "\"))

End Function

更に、こんな方法も。こちらは逆に \ を加えるので、上のと使い方が異なります。
Public Function CheckRoot(s1 As String) As String

	'ルート以外のときは、文字列末に \ を加える
	CheckRoot = s1 & Right("\", -(Right(s1, 1) <> "\"))

End Function

上のと結果は同じですが、こっちの方が更にスッキリか…な? IIf はあまり使用例を見たことがないです。
Public Function CheckRoot(s1 As String) As String

	'ルート以外のときは、文字列末に \ を加える
	CheckRoot = s1 & IIf(Right(s1, 1) = "\", "", "\")

End Function
で、これは何?
例えば App.Path でパスを取得した際、ルートでは C:\ となりますが、フォルダでは C:\TEST などとなります。
Open App.Path & "\test.dat" For Output As #1
例えば上記を実行する際、App.Path が C:\TEST というパスを返せばいいのですが、 ルートだった場合は C:\ と返してきます。結果 C:\\test.dat と \ が二重になってしまい、 エラーになってしまいます。これを回避するために CheckRoot を使うわけです。
Open CheckRoot(App.Path) & "\test.dat" For Output As #1
こうすることで、ルートでもエラーを回避できます。



リストボックスに項目があるかチェック (CheckList)
Public Function CheckList(obj As Object) As Boolean

	'リストボックスに項目があるかチェック
	'あれば True 無ければ False を返す

	CheckList = (obj.List(0) <> "")

End Function
使い方
リストボックスに項目があるかどうかを確認したいときに使います。
If CheckList(List1) Then
	MsgBox "リストボックスには項目があるにゃ。"
Else
	MsgBox "リストボックスには項目はないにゃ。"
End If
このような処理が複数無ければ、関数にしないで下記のように使う手もあります。…というかこれでいいかw
If (List1.List(0) <> "") Then MsgBox "項目はあるにゃ♪"



0バイトのファイルを作る
オープンしてクローズするだけ ^^; FileName には任意のファイル名が入ります。
Open FileName For Output As #1
Close #1



0 1 0 1 ... と繰り返す
実行するたびに 0 → 1 → 0 → 1 ... と繰り返します。 ゲームなら何かを点滅させるのに使えますね。
n = n + 1 - n * 2
又は
n = Switch(n = 0, 1, n = 1, 0)
又は
n = not n
いちばん下のだけでいいような ^^; Boolean なら False True の入れ替えになります。



二重起動を防止
Private Sub Form_Load()

	'二重起動を防止
	If App.PrevInstance Then End

End Sub



フォームを画面中央に配置
VB 5.0 以降ではプロパティがあった気が…。With を使うのは個人的な趣味です。
Top の -200 は個人的に中央より少し上に配置した方が良い気がしているため。
Private Sub Form_Load()

	'フォームを画面中央に配置
	With Screen
		Left = (.Width - Width) / 2
		Top = (.Height - Height) / 2 - 200
	End With

End Sub



ファイル全体を変数に高速格納
テキストファイルを改行コード等も含めて丸ごと読み込むのに便利です。 1ラインずつ読み込むのと違いループ処理も必要ないので簡潔かつ高速です。
Dim s1 As String	'変数を宣言

Open "test.txt" For Binary As #1
	s1 = String(LOF(1), 0)
	Get #1, 1, s1
Close #1

MsgBox s1		'試しに表示♪
当然ながら、上記の例ではファイル test.txt がカレントに無いとエラーになります。

s1 = String(LOF(1), 0) の部分は、予め読み込むサイズをセットする必要があるためで、 例えば変数宣言のところで、Dim s1 As String * 1024 と宣言すれば 1024バイトだけを 読み込むようにもできます。(この場合、s1 = String(LOF(1), 0) は不要)

LOF() は Open ステートメントで開いたファイルの長さをバイト単位で返す関数です。 ()内はファイル番号です。



トップページ Tips トップ

© 1998-2010 Miecat. All rights reserved.