忍者ブログ
暇人おやじの暇なつぶやき
[6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

スクリーンの番号やposでの位置情報など
それらは後々の変更に対して容易に対応するために変数(定数)に値を保持した

ではオブジェクトIDも同じ様に保持すれば何番目かを考えなくてすむ

前回のプログラム
コメントを外して全てのボタンを表示すると、inputのオブジェクドIDは14になる
コメントしたままではIDは1
これはオブジェクトが作成された順番に自動で番号が割付られるために起こるのだが

後からボタンなどと増やすと番号が変わってしまいプログラムが複雑になる

そこでstatというシステム変数から番号を取得することでオブジェクトIDがわかる
次のプログラムがこのstatを付け加えたものだ

screen Wind_main,300,200
pos gyo1X,gyo3Y
button "1" ,*_1
obNo1 = stat
pos gyo1X,gyo0Y   // 表示枠
sdim siki,200
input siki,200
obNo2 = stat
stop

*_1
 objprm  obNo1 ," これは?"
 stop

 
変数obNo1obNo2にそれぞれオブジェクトを生成した際の番号が入り
そして、ボタンを押した際にはobNo1の表示を変更しているのだ
この変更している部分をobNo2に変更するだけでinputの内容が変わる
これで途中にいくつオブジェクトが増えてもプログラムの内容を
変更することなく対応できるのでR

PR

入力枠に対してプログラムからデータを表示する
通常は入力枠なので、当然ユーザーが入力するが

今回は電卓の機能としてボタンを押して、そのボタンの数値を表示する
昨日決めた仕様の1番
「1.数値ボタンを押したら、表示エリアに数値を表示」
これを行う

objprm命令はinputオブジェクトに対して、その内容を変更する機能がある
使い方は

objprm
p1,p2
p1=0~(0) : オブジェクトID指定
p2        : 変更するパラメータの内容

こうなる
ここで出てきた「オブジェクトID」、これは何かというとプログラムで順番に
オブジェクト(ボタンや入力枠)を配置していった際に自動で付けられる番号の
事でR

今回のプログラムでいうと
1.ボタン「1」を設置
2.入力枠を設置
している(他のボタンはコメントした)ので2つのオブジェクトが存在する

番号は0から始めるので、入力枠のオブジェクトIDは1になる

オブジェクトIDがわかれば、あとはそこに表示したいデータを指定すればOK
 objprm 1,"1"

この処理はボタンを押した際の処理に記載する

 screen Wind_main,300,200

 pos gyo1X,gyo3Y
 button "1" ,*_1

 pos gyo1X,gyo0Y   // 表示枠
 sdim siki,200
 input siki,200
stop

*_1
 objprm 1,"1"
 stop

見た目は電卓らしくなった

あとは機能をつければ電卓として動く
そこでどのような機能が必要なのかを考えてみる

1.数値ボタンを押したら、表示エリアに数値を表示
2.表示の際、数値エリアに既に数字があれば、その数値を入力した数値の前部分に足す

まずはこの二つの入力の処理を考えてましょう
そこで、わかりやすくするために、ボタン「1」と表示枠を残し、他をコメントアウトした形に
プログラムを変えてみた
コメントアウトは範囲指定する場合には/* から */(実際は半角)で囲めばOK

ボタン1を押した際の処理は「*_1」で行っている
そこでまずは1の処理をここに記載する
プログラム中での表示エリアのオブジェクトは「input」で
この表示エリアは「siki」という変数になっている
この変数にボタンを押した際の数値をいれればよい事になる
オブジェクトの中身を変更するには「objprm」命令を使用する

で、実際にどう利用するか?
それはまた明日・・・

普通の電卓は表示するスペースは上部にある
そこで表示部分を上部に配置しようと思う、
が、そこで少し考える

前回のようにpos命令に直接数値を指定している場合には
このような変更があった場合にはとても大変な作業になる

大変な作業はバグを誘発しやすい

そこで、この作業を楽にする為に、位置を変数に保持する
今回の場合はあらかじめ定まった数値であるので
定数として定義する
これには#CONST 命令を使用する

#const Wind_main 0
#const gyo1X 10
#const gyo2X 80
#const gyo3X 150
#const hoseiY 20
#const gyo0Y 0
#const gyo1Y 10+hoseiY
#const gyo2Y 35+hoseiY
#const gyo3Y 60+hoseiY
#const gyo4Y 85+hoseiY


各行における横位置(X)、と縦位置(Y)と縦の補正値を設定してみた
どうしても後で変更する際に、全部の縦位置を変更するのは計算が面倒な為に
補正値として増減分を指定した
これは定数でありながら変数の「ような」使い方でR

そして本文では

 pos gyo1X,gyo3Y

このように変更することで、いつでも位置の指定が簡単に変更できるのでR
これで前回よりも「電卓らしく」なった
dentaku.jpg

以下全ソースプログラム
#const Wind_main 0
#const gyo1X 10
#const gyo2X 80
#const gyo3X 150
#const hoseiY 20
#const gyo0Y 0
#const gyo1Y 10+hoseiY
#const gyo2Y 35+hoseiY
#const gyo3Y 60+hoseiY
#const gyo4Y 85+hoseiY

 screen Wind_main,300,200
 pos gyo1X,gyo3Y
 button "1" ,*_1
 pos gyo2X,gyo3Y
 button "2" ,*_1
 pos gyo3X,gyo3Y
 button "3" ,*_1
 pos gyo1X,gyo2Y
 button "4" ,*_1
 pos gyo2X,gyo2Y
 button "5" ,*_1
 pos gyo3X,gyo2Y
 button "6" ,*_1
 pos gyo1X,gyo1Y
 button "7" ,*_1
 pos gyo2X,gyo1Y
 button "8" ,*_1
 pos gyo3X,gyo1Y
 button "9" ,*_1
 pos gyo1X,gyo4Y
 button "0" ,*_1
 pos 220,gyo1Y
 button "+" ,*_1
 pos 220,gyo2Y
 button "-" ,*_1
 pos 220,gyo3Y
 button "*" ,*_1
 pos 220,gyo4Y
 button "/" ,*_1
 pos gyo1X,gyo0Y   // 表示枠
 sdim siki,200
 input siki,200 :a=siki

*_1
 stop






電卓らしき画面を作成するため、ざくっとボタンを配置してみた
 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
しかしこれだけのボタンがあると行数も増えてしまい、もう既にすごいステップの
プログラムって感じがしてしまう

これは整理が必要ではないか・・・

さて具体的に電卓を作成するといっても、何をどのように利用するかを
知らないとできない

そこでまずは利用できるオブジェクトがどのような物なのかを知る為に
次のプログラムを動かしてみよう

ここで 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(数値)
 コンボボックス: コンボボックスの内容変更(文字列)
 リストボックス: リストボックスの内容変更(文字列)

これらの要素を利用してプログラムしていくわけだが
まずは簡単なところで電卓みたいなものを作成してみようと思う

あ、今日はそろそろ時間なので、また明日



忍者ブログ [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:
忍者 シオ才
性別:
非公開
バーコード
ブログ内検索