テクニカルノート12:NS Basic/CEで出来る粋な事

June 22, 202

© NSB Corporation. All rights reserved.

Go to English page.  

NS Basic/CEの開発環境は、とても単純なインストラクションの中にパワーを秘めています。一旦この環境に慣れると、他の言語では難しいことが、NS Basic/CEで容易に出来るようになるでしょう。

以下に我々が今までに見つけた、粋なことを紹介します。「私はこんな事を発見した!」という方は当社まで連絡下さい。

 

1. 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つのステートメントになります。

 

2. 必要時にオブジェクトを作成

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のデザインも容易にします。

 

3. サブルーチン作成も必要時に

これはとても荒っぽいやり方で、上で紹介した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の例では、変数の値を実行時にプログラムから変更しました。ここでは、我々が作成するボタンにサブルーチンを追加する事で、コードを変更しています。ボタンがタップされると、イベントが作成した新しいサブルーチンに送られます。

 

4. コントロール配列の使用

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