　■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■
　□　　　　　　　　　　　　　　　　　　　　　　　　　　 TM　　　　　　　 □
　■　　　　　　　　ＧＵＩ　Ｅｖｏｌｕｔｉｏｎ　ＲＥＭＩＸ　　　　　　　　■
　□　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　□
　■　　　　　　　　　　　　拡張ライブラリシリーズ　　　　　　　　　　　　■
　□　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　□
　■　　　　　Ｃｏｐｙｒｉｇｈｔ（Ｃ）　ｂｙ　ＮＯＩ’ｚ（高橋英彦）　　　■
　□　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　□
　■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■


　ＤＩＳＫ２には三つのディレクトリが有ります。

　ＬＩＢＲＡＲＹ￥（拡張ライブラリキット）
　ＳＡＭＰＬＥ￥（ＧＵＩ　Ｅｖｏｌｕｔｉｏｎの説明書に記述のサンプル）
　ＳＡＭＰＬＥ２￥（実際にＧＵＩ　Ｅｖｏｌｕｔｉｏｎを使って作ったゲーム）

　先ずＬＩＢＲＡＲＹ￥の説明をしていきます。

　　　　　　　　　　　　■■■■ＬＩＢＲＡＲＹ■■■■

　○スクロールバー

　ＢＡＲ￥にあるＢＡＲ．ＢＡＳとＢＡＲ２．ＢＡＳがスクロールバーのルーチンで
す。

　ＢＡＲ．ＢＡＳ（縦スクロールバー）
　ＢＡＲ２．ＢＡＳ（横スクロールバー）

　■特徴

　スクロールバーを使用することにより、よりグラフィカルな数値入力等が出来るよ
うになる。

　■制限

　スクロールバーを取り付ける制限は有りませんが、スクロールバーを１１個以上取
り付ける場合は、変数の宣言をしなければいけません。プログラムの始め（ＣＬＥＡ
Ｒ文の後に）に

DIM SBX(?),SBY(?),SBLX(?),SBLY(?),SMAX(?),PAGE(?),LK(?)
DIM NBAR(?),ONBAR(?)
　　　　　（？は個数）

を加えましょう。

　■その他

　ＧＵＩ　Ｅｖｏｌｕｔｉｏｎ　ＲＥＭＩＸの標準ボタンを描くルーチンが必要です。

　■取り付け方

　先ずバーのルーチンをロードして全てをポケットインします。（このとき行番号も意
識しておくといいでしょう）そして貴方のプログラムにマージしてください。

　次にバーを宣言しておきます。

BAR　　　　　　 スクロールバーの個数
SBX(BAR)        スクロールバーを表示させるＸ座標
SBY(BAR)　　　　スクロールバーを表示させるＹ座標
SBLX(BAR)　　　 スクロールバーの横幅
SBLY(BAR)       スクロールバーの縦幅
SMAX(BAR)       最大値
PAGE(BAR)       ページ値
BUTTON          １と言う数字を入れておけばＵＰ，ＤＯＷＮボタンは表示されない

GOSUB *SCROOLBAR_PUT（ＢＡＲ２．ＢＡＳのばあいはGOSUB *SCROOLBAR_PUT2）

　例えば．

BAR=0:SBX(BAR)=100:SBY(BAR)=100:SBLX(BAR)=15:SBLY(BAR)=200:SMAX(BAR)=30:PAGE(BAR)=8:BUTTON=0

GOSUB *SCROOLBAR_PUT
　続けて二個目を取り付ける場合は、

BAR=1:SBX(BAR)=116:SBY(BAR)=100:SBLX(BAR)=15:SBLY(BAR)=200:SMAX(BAR)=30:PAGE(BAR)=8:BUTTON=0

GOSUB *SCROOLBAR_PUT2

　などとしてもいいでしょう。

次にコンピューターにスクロールバーがあることを認識させなければいけませんので、
メインループの部分に

BAR=?   '?にはスクロールバーの個数
IF MX>=SBX(BAR) AND MY>=SBY(BAR)+NBAR(BAR)*LK(BAR) AND MX<=SBX(BAR)+SBLX(BAR) AND MY<=SBY(BAR)+NBAR(BAR)*LK(BAR)+SBLY(BAR)*PAGE(BAR)/SMAX(BAR) THEN GOSUB *SCROOLBAR_MOVE
'　BUTTONが0ならば下の２行も組み込む
IF MX>=SBX(BAR) AND MY>=SBY(BAR)+SBLY(BAR)+2 AND MX<=SBX(BAR)+SBLX(BAR) AND MY<=SBY(BAR)+SBLY(BAR)+15 THEN GOSUB *SCROOLBAR_UP
IF MX>=SBX(BAR) AND MY>=SBY(BAR)+SBLY(BAR)+18 AND MX<=SBX(BAR)+SBLX(BAR) AND MY<=SBY(BAR)+SBLY(BAR)+31 THEN GOSUB *SCROOLBAR_DOWN

を、スクロールバーを一個につき一個書きましょう。ちなみに↑はＢＡＲの？にバーの
個数を変えるだけでいいのです。一見複雑そうに見えるけど一番上の？をかえるだけで
いいという簡単なものであったりします。

例．

5550 WHILE MOUSE(2,0)=0:WEND:MX=MOUSE(0):MY=MOUSE(1)
5560 IF MX>=0 AND MY>=0 AND MX<=100 AND MY<=19 THEN GOSUB *PULLNUMBER0
5570 IF MX>=600 AND MY>=0 AND MX<=619 AND MY<=19 THEN GOSUB *QUIT
5580 BAR=0
5590 IF MX>=SBX(BAR) AND MY>=SBY(BAR)+NBAR(BAR)*LK(BAR) AND MX<=SBX(BAR)+SBLX(BAR) AND MY<=SBY(BAR)+NBAR(BAR)*LK(BAR)+SBLY(BAR)*PAGE(BAR)/SMAX(BAR) THEN GOSUB *SCROOLBAR_MOVE:GOTO 5550
5600 IF MX>=SBX(BAR) AND MY>=SBY(BAR)+SBLY(BAR)+2 AND MX<=SBX(BAR)+SBLX(BAR) AND MY<=SBY(BAR)+SBLY(BAR)+15 THEN GOSUB *SCROOLBAR_UP:GOTO 5550
5610 IF MX>=SBX(BAR) AND MY>=SBY(BAR)+SBLY(BAR)+18 AND MX<=SBX(BAR)+SBLX(BAR) AND MY<=SBY(BAR)+SBLY(BAR)+31 THEN GOSUB *SCROOLBAR_DOWN:GOTO 5550
5620 BAR=1
5630 IF MX>=SBX(BAR)+NBAR(BAR)*LK(BAR) AND MY>=SBY(BAR) AND MX<=SBX(BAR)+NBAR(BAR)*LK(BAR)+SBLX(BAR)*PAGE(BAR)/SMAX(BAR)  AND MY<=SBY(BAR)+SBLY(BAR) THEN GOSUB *SCROOLBAR_MOVE2:GOTO 5550
5640 IF MX>=SBX(BAR)+SBLX(BAR)+2 AND MY>=SBY(BAR) AND MX<=SBX(BAR)+SBLX(BAR)+15 AND MY<=SBY(BAR)+SBLY(BAR) THEN GOSUB *SCROOLBAR_UP2:GOTO 5550
5650 IF MX>=SBX(BAR)+SBLX(BAR)+18 AND MY>=SBY(BAR) AND MX<=SBX(BAR)+SBLX(BAR)+31 AND MY<=SBY(BAR)+SBLY(BAR) THEN GOSUB *SCROOLBAR_DOWN2:GOTO 5550
5660 IF MX>=WINX(WIN) AND MY>=WINY(WIN) AND MX<=WINX(WIN)+LONG_X(WIN) AND MY<=WINY(WIN)+LONG_Y(WIN) THEN GOSUB *MOVEWINDOW
5670 GOTO 5550
5680 RETURN

　■もしダイアログなどに取り付けて土台が移動してしまったら?

　必ずダイアログには＊ＭＯＶＥ？？？？．ＢＡＳというようなサブルーチンが有り
ます。ということでここの部分を改造しましょう。

　始めにＷＩＮＸ（ＷＩＮ），ＷＩＮＹ（ＷＩＮ）という変数にはそのダイアログのＸ
座標とＹ座標が入ってますので適当な変数にその変数を退避させておきましょう。
　移動するとＷＸ，ＷＹという変数に新しいダイアログのＸ座標とＹ座標が入っていま
すので、あとはその誤差（新しい変数−古い変数）をスクロールバーに認識させましょ
う。

BAR=?:SBX(BAR)=SBX(BAR)+WX-古い変数:SBY(BAR)=SBY(BAR)+WY-古い変数


例．

5690 *MOVEWINDOW
5700 WX=WINX(WIN):WY=WINY(WIN)  'ここの部分は始めからある部分
5710 OX=WINX(WIN):OY=WINY(WIN)　'ここで変数を退避
5720 GOSUB *MOVE
5730 BAR=0:SBX(BAR)=SBX(BAR)+WX-OX:SBY(BAR)=SBY(BAR)+WY-OY  '誤差を認識
5740 BAR=1:SBX(BAR)=SBX(BAR)+WX-OX:SBY(BAR)=SBY(BAR)+WY-OY  '誤差を認識
5750 WINX(WIN)=WX:WINY(WIN)=WY
5760 RETURN

　■続き

　これでスクロールバーを移動させたりする事が出来るのですが、スクロールバーの値
を移動させても変更値を得ることが出来ません。

　どうするか・・・と

　こう言うルーチン提供の形には極めて珍しい直接サブルーチンに書き込むという形を
取っています(^^;;。


  *SCROOLBAR_MOVE

  には書くところが２か所ありますが、上のほうのプログラムゾーンにはリアルタイム
処理（バーが少しでも移動したら処理が行われる）を、下の方には、バーを放したとき
に呼ばれる処理を入れます。どちらかに処理を書いておけば、２つ書く必要はありませ
ん。どちらかといえば、処理が比較的簡単に行える方は上のほうにかいて、処理が重い
ときは（とてもリアルタイムに出来ないとき）下にかくといいでしょう。
同様に、

*SCROOLBAR_UP
*SCROOLBAR_DOWN

にもプログラムを書いていきますが、↑のように書く場所は二か所はありません。

書く場所は目印がついているので分かると思います。

　ところでバーを２個以上作った場合は、書く部分を

IF BAR=0 THEN
･･･
ENDIF
IF BAR=1 THEN
･･･
ENDIF
  ･
  ･
  ･

と変えて書いてください。

　バーを移動したときに書換え処理を行ってしまいますが、あとでバーの情報が欲しい
ときには

RET=NBAR(BAR)

  'RETは適当な変数の名前
  'BARは個数

で取り出せます。
バーを表示させる前に
NBAR(BAR)
  'BARは個数

に数値を入れておくと、始めの値がかわります。

　○ファイルダイアログ

　■特徴

　ＴＯＷＮＳＭＥＮＵのファイルダイアログと余り変わらないファイル入力が出来る。

　■制限

　ＧＵＩ　Ｅｖｏｌｕｔｉｏｎの標準ボタンを描くルーチンと拡張ライブラリの縦スク
ロールバー（ＢＡＲ．ＢＡＳ）をマージしてください。

　ＧＵＩ　Ｅｖｏｌｕｔｉｏｎ　ＲＥＭＩＸのダイアログと同じ書式を取っているの
で、何枚目のウィンドウかを表すＷＩＮという変数を変えなければいけません。これ
も＊ＦＩＬＥＤＩＡＲＯＧというサブルーチンの各部分に直接書いてください。

　やはりスクロールバーもＧＵＩ　Ｅｖｏｌｕｔｉｏｎ拡張ライブラリの物を使用して
いるので、ＢＡＲという変数を他のスクロールバーとぶつからないように、＊ＦＩＬＥＤＩＡＲＯＧというサブルーチンの各部分に直接書いてください。

　そしてプログラムの始めに

DIM FLNN$(400),GET_DRIVE(16)

　という宣言をしておいてください。

　次にスクロールバーの書き換える部分に

IF BAR=? THEN GOSUB *FILEDIAROG_BARMOVE
　？には先程のＢＡＲの数値

を追加して、スクロールバーＵＰの部分には、

IF BAR=? THEN GOSUB *FILEDIAROG_BARUP

を

スクロールバーＤＯＷＮの部分は

IF BAR=? THEN GOSUB *FILEDIAROG_BARDOWN

を追加します。


　かなり時間がかかりましたがＢＡＳＩＣを詳しくご存じの方は簡単だったかな？（ん
なことはないですね、ゴメンナサイ）

ついにファイルダイアログを呼び出すことができます。

呼び出すときは

GOSUB *FILEDIAROG

で呼び出して

FLN$

にはファイル名が帰ってきます。（何も帰ってこなかったときはキャンセルしたとき）

呼び出す前に

SAVEFLAG

という変数に1を入れておけば、ファイル名がキーボードから入力できるファイルダイ
アログになります。（書き込みの場合に便利）


と多少難しかったですが、ＳＡＭＰＬＥ￥のＳＡＭＰＬＥ．ＢＡＳをそのまま使用して
も良いでしょう。（その場合重なったサブルーチンは何方かを消しておきましょう）


　○パレットライブラリ

　ライブラリというかＴＯＷＮＳＭＥＮＵと同じパレットファイルです。
ＧＵＩ　Ｅｖｏｌｕｔｉｏｎ　ＲＥＭＩＸで編集しているときにパレット読み込みでパ
レットファイルを読んでいただけばよろしいです。（一番簡単）

　　　　　　　　　　　　　■■■■ＳＡＭＰＬＥ■■■■

ＧＵＩＲＥＭＩＸ．ＤＯＣのテクニカルインフォメーションの部分でサンプルを通して
使い方を説明しています。その部分のサンプルです。詳しくは説明書を！

 　　　　　　　　　　　　■■■■ＳＡＭＰＬＥ２■■■■

　実際にＧＵＩ　Ｅｖｏｌｕｔｉｏｎを使って作ったミニゲームです。

　ＳＡＭＰＬＥ２．ＥＸＰが実行ファイル。
　ＮＧ５ディレクトリが画面レイアウトのソースファイル。
　ＳＲＣディレクトリがＢＡＳＩＣソースファイルです。

　尚、迷路データ作成のアルゴリズムは、Ｏｈ！ＦＭＴＯＷＮＳ１９９４年８月号のＭ
ｉｃさんのプログラムの一部を使用させて頂いています。


　○終わりに

　かなり難しい講座（？）だったので良く分からない方もいらっしゃると思います。
でも↓に手紙を出して頂けますと、できるだけ詳しく使い方を説明しますので、もしよ
ろしければどうぞ！（結構たくさんのかたにお手紙頂いています）
　できるだけ詳しく分からないところを書いてくれると嬉しいです。


　〒２３０
　神奈川県横浜市鶴見区平安町２−１４−１
　高橋英彦
　「ライブラリの使い方」係

