イベント講座 -ビットマップ番号算出-



なぜかInfo関数に存在しない「ビットマップ番号」。ここでは、その算出方法を掲載します。 SRCのビットマップ名が「文字列 + 数字 + . + 拡張子」の順番に並んでいる事を利用しましょう。 (初級編とは違って超難しいです。ご注意下さい)



その1.Info関数でビットマップ名を取得する


ヘルプの「関数」見てください。 …と言いたいところですが、Info関数はかなり省略して書かれてありますので、具体的に書いちゃいます。

FNM = Info(マップ, X座標, Y座標, ビットマップ名)

変数:FNM (名称はなんでも良い) に代入します。X座標Y座標には実際の座標を数字で入れてください。



その2.拡張子をカットする


拡張子をカットします。まずInstr関数で「.」の位置を調べて、ファイル名の先頭から「.」の位置のいっこ前までの文字列をMid関数で切り出します。

MBMP = Mid(FNM, 1, (Instr(FNM,".") - 1))

例によって、変数:MBMP (名称はなんでも〜) に代入します。
これで「文字列 + 数字」だけになりました。


なお、指定した文字列から前の部分だけ切り出す処理は使用頻度が高いため、include.eveに以下のように書いて、ローカル関数登録しておくととても便利です。

StringCut:
If Instr(Args(1),Args(2)) Then
  Return Mid(Args(1),1,(Instr(Args(1),Args(2)) - 1))
Endif
Return Args(1)


このローカル関数を使用すると拡張子カット処理は以下のように簡略化できます。

MBMP = StringCut(FNM, ".")



その3.左から一文字ずつ切り出して、その文字が
    マイナスまたは数字かどうかを判定する



ここが一番難しいところです。マイナスも判定するのは、ローカルマップチップの場合、文字列の後に「-」をいれるからです。

一文字ずつ抜き出す方法はそれなりに応用が利きますので、覚えておくのもいいでしょう。 使用するのはForコマンドLen関数Mid関数です。

For i = 1 To Len(MBMP)
 If Mid(MBMP,i,1) = "-" OR IsNumeric(Mid(MBMP,i,1)) Then
  MNUM = Mid(MBMP,i)
  Break
 Endif
Next

2行目の部分がマイナスまたは数字かどうかを判定している部分です。「Mid(MBMP,i,1)」が切り出した文字に当たります。

マイナスかどうかを判定するのは単純に「-」と比較します。数字かどうかの判定はIsNumeric関数を使います。


これで「数字」すなわち「ビットマップ番号」が何文字目から始まっているかが分かりました。次は文字列と数字を分離します。

3行目の部分がそれに当たります。この結果、変数:MNUM (名称は〜[略]) にビットマップ番号が格納されます。



Goto  トップページ