×[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
電卓らしき画面を作成するため、ざくっとボタンを配置してみた
screen 0,300,200
pos 10,60
button "1" ,*_1
pos 80,60
button "2" ,*_1
pos 150,60
button "3" ,*_1
pos 10,35
button "4" ,*_1
pos 80,35
button "5" ,*_1
pos 150,35
button "6" ,*_1
pos 10,10
button "7" ,*_1
pos 80,10
button "8" ,*_1
pos 150,10
button "9" ,*_1
pos 45,85
button "0" ,*_1
pos 220,10
button "+" ,*_1
pos 220,35
button "-" ,*_1
pos 220,60
button "*" ,*_1
pos 220,85
button "/" ,*_1
pos 10,130
sdim siki,200
input siki,200 :a=siki
*_1
stop
画面を配置しただけなので、ボタンの処理は全て同じ処理に分岐している
実行してみると、なんとかくそれっぽくなっているw
しかしこれだけのボタンがあると行数も増えてしまい、もう既にすごいステップの
プログラムって感じがしてしまう
これは整理が必要ではないか・・・
PR
さて具体的に電卓を作成するといっても、何をどのように利用するかを
知らないとできない
そこでまずは利用できるオブジェクトがどのような物なのかを知る為に
次のプログラムを動かしてみよう
ここで button とmes については既に何回も登場しているので
今回のプログラムには入れていない
wmoji=""
input wmoji,100,20
mesbox wmoji,100,60
p=0
chkbox "strings",p
a=1:objsize 120,24
wmoji="APPLE\nORANGE\nGRAPE"
listbox a,120,wmoji
a=0:objsize 120,24
combox a,120,wmoji
このプログラムを起動すると画面に様々なボックスが表示される
電卓を作る際には、ボタンで数字と演算記号を作成し、入力された
数値、計算結果を表示する領域が必要になる
そこで、buttonオブジェクトと一行の表示を行うinputオブジェクトを
利用すれば電卓らしきものは出来そうな感じがするのでR
さてボタン以外に利用できるオブジェクトには次のものがある
button |
ボタン表示 |
input |
入力ボックス表示 |
mesbox |
メッセージボックス表示 |
chkbox |
チェックボックス表示 |
listbox |
リストボックス表示 |
combox |
コンボボックス表示 |
これらを画面に配置してプログラムを進めていくのでR
これらのオブジェクトと非常に関係が有る命令は「obj」ではじまっているので
ヘルプを見るとわかりやすいが、中でも「 objprm」は非常に重宝するので
その使い方を覚えておこう
例)
button "aaa",*aaa
stop
*aaa
objprm 0 ,"bbb"
これは、ボタンを押すとボタンに表示されているテキスト「aaa」を
「bbb」に変えてしまうプログラムでR
objprmで指定できる内容は次のようになっている
ボタン: ボタン文字列の変更(文字列)
入力ボックス(数値) : 入力内容の変更(数値)
入力ボックス(文字列) : 入力内容の変更(文字列)
チェックボックス : チェックの ON/ OFF(数値)
コンボボックス: コンボボックスの内容変更(文字列)
リストボックス: リストボックスの内容変更(文字列)
これらの要素を利用してプログラムしていくわけだが
まずは簡単なところで電卓みたいなものを作成してみようと思う
あ、今日はそろそろ時間なので、また明日
button命令でボタンを表示することかできた
ではこのボタンを、大きいボタンや小さいボタンにしたい
そうサイズを変更したいのだ
これには特別な命令が用意されている
「 objsize 」
この命令はオブジェクトサイズという、オブジェクトのサイズを変更するもの
ボタンじゃなくてオブジェクト?はて、なんのことだろうか
まずは次のプログラムを実行してみよう
button "規定値",*shori1
mes "aaa"
objsize 100,24,10
button "100*24",*shori1
objsize 128,48,10
mes "aaa"
button "128*48",*shori1
*shori1
メッセージ表示とボタンの表示を行うプログラムだが
objsize命令が次の行の命令に作用しているようだが、最後のボタンでは
2行前の命令に対して作用している
objsize 128,48,10
mes "aaa"
button "128*48",*shori1
mesについては作用していない事がわかる
これでなんとなくオブジェクトがわかっただろうか
まーこれじゃわかるわけ無いか>_<
goto 行け
gosub 行って戻って来い
似ているようで違う命令
ボタンの例でも記載したように
button gosub " shori1 ",*shori1
button命令の場合gosubを記載しなければgotoが基本
button " shori1 ",*shori1
botton命令の場合gosubにあまり意味はないように感じる
というのはbuttonの待ちの仕組みと戻り場所が特殊な感があるからだ
普通gosub命令はその処理(=サブルーチン)を行いreturn命令の後に、gosubを発行した
次の行に戻る
例
gosub *shori1
mes "本処理1"
stop
*shori1
mes "サブ処理1"
return
この一行目を
button gosub "ボタン" , *shori1
すると、先ほどとは逆の表示になる
しかし、ボタンを押した後では"本処理1"の表示はされない
何故か?それはボタンの待つ処理がstop命令又はプログラムの最後だからだ
つまりサブルーチンを終えて帰る場所がstopになる
次のように変更してみるとそれがよくわかる
button gosub "ボタン" , *shori1
mes "本処理1"
goto *shori9
stop
*shori1
mes "サブ処理1"
return
*shori9
mes "本処理9"
またこのコードではサブルーチン「shori1」が本プログラム中にある
3行目のgotoで、サブルーチンを飛び越えている
通常はgosubでのサブルーチンは本プログラム処理の最後にまとめて
記載するのがわかりやすいプログラムになる
とはいえこのbutton命令でのgosubは所謂イベントドリブンな処理が
組めるので非常に重宝することは間違いないでしょう
といっても仲間・・・(略
さて、button 命令にはgosubを記載できる
例)
button gosub "文字",*shori1
gosubとは、サブルーチン、つまり別の処理を行いまた戻って来いという意味である
したがって、例のような場合にはボタンを押したら*shori1の処理を行って戻ってきなさい
となる
また、*shori1側ではサブルーチンなので戻る為のreturnを記載する
button gosub "文字",*shori1
stop
*shori1
mes "shori1"
return
さて、この戻るという処理とボタンの処理には不思議な動作がある
次のコードを見てみよう
button gosub "文字",*shori1
mes "stop"
stop
*shori1
mes "shori1"
return
ボタンの後にメッセージを表示するようにしてみた
これは机上で考えるとボタンを押したら*shori1へ行き「shori1」を表示して
戻る、戻ったら「stop」を表示しなさい という仕様になる
しかし実際にこれを動かすと、ボタンを押しても「stop」は表示されない
これはボタン命令が待つ仕組みはstop、もしくはプログラムの最終行になる為
戻りが直近の「stop」に戻るものと思われるからだ
この当たり注意が必要でR
筆者使用環境はバージョン3.1だが、他のバージョンではもしかしたら
違う動きをするかもしれない、色々と試すのもプログラミングの醍醐味・・・かな
といってもauでおなじみの仲間さんが主演のドラマではない
前回のhspのコードの動きのことでR
button "文字",*shori1
*shori1
mes "shori1"
この処理、本来の目的はボタンを押したらメッセージを表示したい という仕様
なのであるが、F5で起動するとボタンの下にすでにshori1が表示されている
VBやDelphi などでは押したら何をする、という形でプログラムがほぼ自動で書ける
しかし、ベーシックを基本としているhspやLGPではプログラムは基本的に順序通りに
処理される
今回の場合も
button "文字",*shori1 ←ボタンを表示しろ、押されたらshori1へ移動しろ
*shori1 ←shori1はここだよ
mes "shori1" ←shori1を表示しろ
という3行のプログラムを順序通りに処理しており、3行終了した段階で入力待ちになる
そこで、ここで入力待ちしたいという場合にはstop命令を記載する
button "文字",*shori1
stop
*shori1
mes "shori1"
2行目に「stop」を記載することで本来の目的にあったプログラムになるのでR
stop命令と最終行の処理後は入力待ちになるので、ボタンを押してもプログラムは
終わらないで、入力待ちのまま動き続けるのだ!!
|
カレンダー
S |
M |
T |
W |
T |
F |
S |
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
|
最新記事
(05/30)
(09/07)
(09/04)
(09/02)
(08/31)
最古記事
(01/24)
(01/25)
(01/26)
(01/28)
(01/29)
|