TOP Column Menu 戻る
WideStudio かんどころ(2)
WideStudioによる無作法なC++  2003/05/03


第二回目は配列を使ってみよう

このWideStudioをこのように使用するのはプログラムらしくないと思うわけです。はたして、オブジェクトの配列化ができるのかがポイントみたいです。答えは完全なVisualBasicのような配列化はできない。しかし、配列操作についてはできるが、イベントの発生を配列のインデックスとして操作できることは現段階でできないように思えます。
今回のカレンダーについてはこの配列を使ってプログラムを組んでみます。

画面の作成については第一回目の 画面の作成のセクションを参考にしてください.。
配列化のための操作
まず、オブジェクトの名前をプロパティウィンドウで変更してみます。
12個の月のボタンについて総合操作画面のプロパティタグをクリックして名称を変更する。
今回の場合名称変更には月のボタンについてはnewbtn[0]〜newbtn[11]ということに変更しました。
オブジェクトの名前に配列をつかえるなんて、これってスゴイことじゃない?
こんなことが出来るということはプログラム操作において配列の操作が出来るって事を意味してるよね。BorlandC++BuilderやVC++の時の苦労はなんだったんだって思うよね。
今回は
月ボタンを    newbtn[0]〜newbtn[11]
年移動ボタンを mvyy[0] と mnyy[1]
にしました。
チップス
私はマニュアルを読まないで、即行動というパターンの人間です。大体マニュアルを理解してからプログラムをくんだり、操作したりすれば、それらは一生できないことになる。というのが自論です(いいわけです)。このWideStudioは一旦終了して、再開するときにプロジェクトを開いても操作中のフォームウィンドウが表示されません。そこで、左の画像のようにインスペクターウィンドウ上で右クリックをしてのポップアップメニューから表示を選択するとフォームウィンドウが表示されます。同じことはメニューの編集(E)からのプルダウンから表示(I)を選択してもいいのです。
オブジェクトボックスがメニューの表示(V)から操作するのでわかりにくかったのです。そりゃ、お前だけと言われりゃ仕方ない。

Ⅱプログラミング

今回はこんなことをします
今回は配列操作が出来るかどうかの確認でしかありませんので上の設計画面が実行すると下の画面になることを確認します。
「同じじゃないか?」って、実は上の画面は月のボタンが[01月]〜[12月]になっていますが、下の画面では[01]〜[12]という風に[月]がはずれていますね。実行時点で配列操作によりボタンのキャプションをかえるのです。

変更したプログラムは[ win_ep.cpp ]です。

#include <WScom.h>
#include <WSCfunctionList.h>
#include <WSCbase.h>
#include<time.h>
#include <WSCvlabel.h>
#include <WSCvbtn.h>
  extern WSCvlabel* newvlab_002;
  extern WSCvbtn** newvbtn;

//----------------------------------------------------------
//Function for the event procedure
//----------------------------------------------------------
void win_ep(WSCbase* object){
  //do something...
  time_t today_time;
  struct tm today;
  int yy,mm,dd;
  char ttl[32];
  for(yy=0;yy<12;yy++){
    sprintf(ttl,"%02d",yy+1);
    newvbtn[yy]->setProperty(WSNlabelString,ttl);
  }
  today_time=time(NULL);
  today=*localtime(&today_time);
  yy=today.tm_year+1900;//+YEAR;
  mm=today.tm_mon+1;
  sprintf(ttl,"%04d/%02d",yy,mm);
  newvlab_002->setProperty(WSNlabelString,ttl);
}
static WSCfunctionRegister  op("win_ep",(void*)win_ep);

今回はこれで終了 
そして、今後の予定ですが(プログラムは出来ていますがHTML書き込みが大変)
第三回は本格的なカレンダープログラムをつくってみます。たぶん始めてプログラムらしくなるでしょうね。但し、スケルトンでボタンによる駆動はその次にしましょう。