|
テクニカルノート12:NS Basic/CEで出来る粋な事June 22, 202© NSB Corporation. All rights reserved. |
NS Basic/CEの開発環境は、とても単純なインストラクションの中にパワーを秘めています。一旦この環境に慣れると、他の言語では難しいことが、NS Basic/CEで容易に出来るようになるでしょう。
以下に我々が今までに見つけた、粋なことを紹介します。「私はこんな事を発見した!」という方は当社まで連絡下さい。
EXECUTE
を使用して、パラメータを参照として使う
Private Sub setupButton(name, text)
execute name & ".borderstyle=1"
execute name & ".drawText" & chr(34) & text & chr(34)
end sub
このサブルーチンはボタンに text という名前をセットし、ボックスの周りに線を引きます。これはボタンの名前と見せたいテキストと共に呼ばれます。CHR(34)
は引用符(")。
EXECUTE
は、 それがプログラム中のステートメントの様に 、文字列を取りインタプリタに送ります。
もし以下をする場合、
SetupButton("myButton","Tap here")
これはサブルーチン内で実行されるものです:
myButton.drawText "Tap Here"
この2つの実行ステートメントは、2つの文字列の間をリターン(vbCrLF)でつなげる事で、1つのステートメントになります。
NS Basic/CEは、プロジェクトを作成する時点だけでなく、いつでもオブジェクトを作成する事を可能にします。前出のサンプルは以下のように変更する事により、ボタンオブジェクトを作成して、セットアップも行います。
Private Sub setupButton(name, text, x,y,w,h)
addObject "PictureBox",name, x,y,w,h
execute name & ".borderstyle=1"
execute name & ".drawText" & chr(34) & text & chr(34)
end sub
オブジェクトは必要時だけ作成すればよいので、メモリの需要を低く保てます。また、UIのデザインも容易にします。
これはとても荒っぽいやり方で、上で紹介した2つを基に構築されています。以下のコードはスクリーン上に、n 個のボタンを作成します。すべてクリック可能です。
Option Explicit
dim count,i
count=inputbox("How many do you want?")
for i=1 to count
makeButton "B" & i,cstr(i),i
next
Private Sub makeButton(name, prompt,b)
dim code
addObject "PictureBox",name & "Btn",(b mod 25)*25, int(i/25)*25,20,20
execute name & "Btn.borderstyle=1"
execute name & "Btn.drawText" & chr(34) & prompt & chr(34)
code="sub " & name & "Btn_click()" & vbcrlf & "print " & chr(34) & "click at " & name & chr(34) & vbcrlf & "end sub"
execute code
end sub
この例では先の2つの例で行った事が全て含まれていて、さらにもう一つ追加しています。実行時環境は変数とコードから成り立っています。1の例では、変数の値を実行時にプログラムから変更しました。ここでは、我々が作成するボタンにサブルーチンを追加する事で、コードを変更しています。ボタンがタップされると、イベントが作成した新しいサブルーチンに送られます。
NS Basic でコントロールの配列を作成出来るかは、すぐに分かるものではないでしょう。このプログラムは6つのコマンドボタンを作成し、それらを cmdButtons と呼ばれる配列に納める為に、set コマンドを実行します。(Terry Myhrer 氏による寄稿)
option explicit
dim cmdButtons(5), index
updatescreen
for index = 0 to 5
MakeButton(index)
cmdButtons(index).caption = "Button " & cstr(index)
next
sub ButtonClick(byval number)
if cmdButtons(number).caption = "Clicked" then
cmdButtons(number).caption = "Button " & cstr(number)
else
cmdButtons(number).caption = "Clicked"
end if
end sub
sub MakeButton(byval number)
dim name, code
name = "btnButton" & cstr(number)
addobject "CommandButton", name, 10, number * 30, 100, 25
execute " Set cmdButtons(" & cstr(number) & ") = " & name
code = "Sub " & name & "_Click()" & vbcrlf & " ButtonClick " & cstr(number) & vbcrlf & "end sub"
execute code
end sub