Feerの日記

2005-08-14今日分かった事(それと戯言)

スケルトンのMainFormEventHandler内をいじれば、ある程度の処理はできるようだ。

で、処理が起きた時のアクティブなフォームはどこかな?という事を示すポインタ

OnBoardCスケルトンではpFormとしているようだ。だから、

処理が起きたフォームを指定したい時はpFormを使うといいらしい。

ボタンを押した時。

pEventというポインタにctlSelectEventという処理がなされたと報告が入る。

スケルトンでは、SwitchでpEventの値によって処理を切り替えるようになっているので

最初のフォームオープン時の初期化処理?の後に

case ctlSelectEvent:

   if(pEvent->data.ctlSelect.controlID == 押されたIDその1){

      //ボタンその1に対応した処理。

      //・文字を表示するなら…

      static Char a[30] = "Hello! My name is Feer.");

      WinDrawChars( a,StrLen(a),表示したいx座標.表示したいy座標);

      //とするとボタンを押すと文字列用変数aに指定した文字列を表示する。

   }else if(pEvent->data.ctlSelect.controlID == 押されたIDその2){

      //ボタンその2に対応した処理。

      //・ラベルを書き換えるなら…

      FrmCopyLabel(pForm,書き換えたいラベルのID,"Nya--!");

      //とすると、リソースで最初に指定しておいたラベルの文字が書き換えられる。

      //でも、文字を表示するなら、上のWinDrawCharsを使った方がいいかも。と思う。

   }

break;

こういった感じで入れていくと、複数個あるボタンのどれを押したかによって処理を分ける事ができそうだ。

それはそうと、風邪を引いてしまっている。

喉と鼻に来てて、なおかつ頭が重い。

早く治ってほしいなぁと思いつつ、でも、寝てる間もPalmをいぢっている俺が居る…^^;

OnBoardCをいぢくるのに疲れたら、SmallBasicで遊ぶ。

最近はまってるのは、関数グラフを描かせる事。

サイクロイドとかも描ける。

媒介変数θを用いて

x=θ-sinθ

y=1-cosθ

で表される関数

'πを定義

p=3.141592

'座標軸をとりあえず描いておく

line 0,160,320,160

line 160,0,160,320

'0<θ<2πの範囲を1000個に区切ってそれぞれの座標を計算していく。

for i=1 to 1000

'1/1000きざみで座標を見ていく。kは媒介変数

k=i/1000

'サイクロイドの式。θをラジアン表記にする

xa=2*p*k-sin(2*p*k)

ya=1-cos(2*p*k)

'計算した座標を、原点160,160に移した後表示する。

'SmallBasicではPoint命令がどうも使えないようなのでCircle命令で代用

'拡大しないと見栄えが悪いので縦横30倍に拡大。

'y座標は、上から下に0~320になってるので、実際の座標軸に直したい時は描く時点で-をつけてやる必要がある。

circle 160+xa*30,160-ya*30,2

next i

これで、サイクロイドが描ける。2周期分表示したい時は、iを2000まで回せばおっけー。

xb=-xa

yb=1-cos(2*p*k)

として、Circle関数をもう一個書き込んでやれば、x<0の範囲も描ける。

一般性はないけど、こんな感じで楽しめる。

サインカーブとか、二次関数とかもOK。

結構面白いですよ。