- Window1にPushButtonを2つ、Canvas、Rectangle、ProgressBar、Timer をそれぞれ1つずつ配置する。CanvasはRectangle の内側に配置して、Format メニューのMove To Front でCanvas の方が前面にくるようにしておきます。
- FileメニューのNew Window とNew ModuleでAbout メニュー用のDialog1 と初期設定画面用のDialog2 、グローバル変数定義用のModule1 を用意します。
- Project 画面より、Menu を選び、メニュー画面を編集する。リンゴのマークを選択して、すぐ下に「干渉模様について」のメニュー(Aboutメニューといいます)を作ります。作り方は、この部分を選択した状態で、Properties 画面のText 欄に「干渉模様について」、Name 欄に「about1」と書き込む。このときName 欄に付けた「about1」という名前は後からのプログラムで使うことになります。また同じ要領で、Fileメニューの下に、PICTで保存、ライン、初期値を変更、ライン、印刷、ライン、終了を作り、それぞれのName欄には後から使いやすい名前を付けておきます。ここでは、spict、syoki、pr1、filequitとしました。
- About メニュー用のDialog1には、終了ボタンとListBox を配置します。ListBox にはProperties の画面からInitialValue 欄のEdit...で専用のエディターが開きますので、効率よく説明などが書き込めます。
- 初期設定画面用のDialog2 には、StaticText を6つ、EditField を7つ、PopupMenu と終了ボタンを1つずつ配置します。閉じるのPushButton1:Action にそれぞれのEditField や、PopupMenu からの値を、グローバル変数定義用のModule1で定義された、変数に代入します。
Events:Open には、7つのEditField と、PopupMenu の初期値を書き込みます。
//ポップアップメニューに選択候補を加える書式です。
popupmenu1.addrow"波源の数1"
popupmenu1.addrow"波源の数2"
popupmenu1.addrow"波源の数3"
popupmenu1.addrow"波源の数4"
popupmenu1.addrow"波源の数5"
//波源の数を変えるPopupMenuの初期値のindexです
//0から始まるのではじめから数えて2番目の「波源の数2」
//を使う場合は、ListIndexを1に指定します。
//
PopupMenu1.ListIndex=1
//
//ポップアップメニューで選択されたものは
//「PopupMenu1.ListIndex」の値としてinteger型
//取り込んでいますのでこれを使うときは、
//st6=str(PopupMenu1.ListIndex)などのように
//型をそろえて使います。
- メインのプログラムは、Window1:PushButton1:Action に書き込みます。ここは、前回の基本プログラムを参考にして下さい。
- 印刷などのメニューが使用できるように、Window1:Events:EnableMenuItems に
about1.enabled=true
filequit.enabled=true
pr1.enabled=true
syoki.enabled=true
spict.enabled=true
の宣言をします。
- 次はメニュー本体の記述です。まず、Editメニューから、New Menu Handler...で表れる画面で、ポップアップメニューより、「about1」、「spict」、「syoki」、「pr1」、「filequit 」を選択します。この操作が終わると。Code Browser (Window1) のMenu Handlers に「about1」、「spict」、「syoki」、「pr1」、「filequit 」が表れますので、ここにプログラムを書くことになります。
- 「about1」は表示だけですから、いつものように
dim d1 as dialog1
d1=new dialog1
です。
filequit もquit だけです。
- 「spict 」はそのときの画面をPICTファイルに保存します。
dim p1 as picture
dim f1 as folderitem
//
p1=P(count mod 10)
//標準の保存ダイアログを開く書式です。
f1=getsavefolderitem("","New.pict")
//
if f1=nil then
return true
end if
//PICTファイルに保存する書式です。
f1.saveaspicture p1
- 「pr1」 は印刷です。
dim g1 as graphics
//標準の印刷ダイアログを開く書式です。
g1=openprinterdialog()
if g1=nil then
return true
end if
//countはWindow1でEditメニューのNew Variableで
//count as integerの様に宣言したグローバル変数です。
//表示されている画面が何番目かを示すものです。
//(count mod 10)はcountを10で割ったときの余りを
//求める書式です。
//
//画面を印刷する書式です。
g1.DrawPicture P(count mod 10),0,0
//最後のreturn trueがないと印刷終了後
//いきなり終了してしまいます。
return true
- 「syoki 」は初期設定画面ですから、開くだけです。
dim d2 as dialog2
d2=new dialog2
timer1.mode=0
プログラムの大まかな流れを説明しましたが、今回は、印刷やPICTファイルへの書き出しのメニューを中心にしました。詳しいプログラムは、例によってサンプルをご覧下さい。
ここまでのことをもう少し発展させ、予め時間のかかるグラフィック画面への描画をさせて、その画面をPICTで保存してストックしておき、必要なときに表示する画像を読み出すようにすれば、表示までいらいらしながら待たなくて済むようなものが作れると思います。
REALbasicを初めて使う方へ
今回の「干渉模様 ver1.1a」ですが、前回のものよりもかなり複雑になっています。変更はまずはグラフィック画面に描く数式をいじってみるのが1番手っ取り早いと思います。
波源の座標を変更する方法
0 REALbasicで「干渉模様Ver1.1a」のファイルを開きます。
1 EditメニューからEditorSettingsを開きSource EditorのFontをOsakaにします。
2 ProjectのウインドウからWindow1をダブルクリックすると「干渉模様」とタイトルの付いたウインドウが開きます。このウインドウの中にある「準備(最大6分)」のボタンをダブルクリックするとCode Browser(Window1)とタイトルの付いたウインドウが開きます。
3 このウインドウに書かれた数式の部分のプログラムをいじればよいわけです。
たとえば以下の部分の
//
z3=127*sin(2*3.14*((t/10)-(sqrt( x*x+y*y) )/ramda))
//
を
//
z3=127*sin(2*3.14*((t/10)-(sqrt( x*x+(y+a)*(y+a)) )/ramda))
//
と変更すると、3角形の3つの頂点の位置に波を発生する場所がある場合の図形を描くことができます。もちろんプログラムを実行させて、メニューの初期設定で、波源の数3を指定して下さい。
5 プログラムの実行はEditメニューのDebugからRunを選択します。
プログラムの説明は、About メニューおよびソースプログラムの中にかなり書き加えました。お楽しみ下さい。
今回の「干渉模様Ver1.1a」がダウンロード出来ます。
ソースプログラムのみです。REALbasic最新バージョンが必要です。30 kバイト
ソースコードについての質問やご意見がありましたら以下のアドレスまでご連絡下さい。
koko-@mx2.tiki.ne.jp
このホームページのホストは
です。
無料ホームページをどうぞ!