忍者ブログ
暇人おやじの暇なつぶやき
[1] [2] [3] [4]
×

[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命令と最終行の処理後は入力待ちになるので、ボタンを押してもプログラムは
終わらないで、入力待ちのまま動き続けるのだ!!



忍者ブログ [PR]
カレンダー
08 2024/09 10
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
フリーエリア
最新CM
最新TB
プロフィール
HN:
忍者 シオ才
性別:
非公開
バーコード
ブログ内検索