スポンサーサイト

   スポンサー広告 [--/--/--]
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


PHP-はじめの一歩(その10)Windowsプログラムの作り方(3)

   プログラミング [2010/11/29]
では、PHPを使って目的のウィンドウプログラムを作って見ましょう。
でも、今日は途中までです。

①まずは、格納場所を用意します。
Bamcompile1.21の下に「ppecomakelist」というフォルダを作成しました。

②ウィンドウのフォームを作ります。
WinBinder付属のFE(FormEditor)を起動して、以下のような、二つのウィンドウ(フォーム)を作成しました。
1011293_1.jpg

1011293_2.jpg

プロジェクトを保存するときに、それぞれ「ppecomakelist」、「ppecoitemedit」という名前でppecomakelistフォルダに保存します。
そうすると、それぞれ、名前に.form.phpと.prjと付いたファイルが作成されます。

③ppecomakelistフォームを表示する。
昨日作ったサンプルソース(firstwin.phpw)をベースに以下のようなソースにしました。
基本的に 10行目の「include "ppecomakelist.form.php";」だけ間違えなければ、作ったフォームを表示することはできます。
---------------------------
1 <?php
2 //******************************************************************************
3 //PHPで作るWindowプログラム その1
4 //
5 //******************************************************************************
6 //****お決まり。必ず必要なインクルード
7 include "../../WinBinder/phpcode/include/winbinder.php";
8
9 //****フォームエディタ(FE)で作られたソース。
10 include "ppecomakelist.form.php";
11
12 //****ウィンドウへ"process_main"関数をメッセージハンドラとして割り当てている。
13 //****FEで作成されるメインウィンドウID は、$winmainなので変更。
14 wb_set_handler($winmain, "process_main");
15
16 //****ここでウィンドウ のメインループに入る。これより後に、実行文を書いてはならない。
17 wb_main_loop();
18
19
20 //******************************************************************************
21 //メッセージハンドラ
22 // $window ウィンドウオブジェクト
23 // $id コントロールID
24 //******************************************************************************
25 function process_main($window, $id)
26 {
27  static $listfile_filter = array(
28   array("タブ区切りデータ", "*.tsv"),
29   array("テキストデータ", "*.txt"),
30   array("All files", "*.*")
31   );
32
33
34  switch ($id)
35  {
36   //****参照ボタンをクリックされたら
37   case IDC_BTSELECT:
38   //ファイル選択ダイアログを表示
39   $tsvfile = wb_sys_dlg_open($window, "サンプルリストファイル", $listfile_filter);
40   //wb_message_box($window, "selected file=".$tsvfile);
41
42   //選択されたファイル(パス)をエディットにセットする。
43   wb_set_text(wb_get_control($window,IDC_EDFILENAME), $tsvfile);
44   break;
45
46   //****開くボタンをクリックされたら
47   case IDC_BTOPEN:
48   //エディットからファイルパス名を取得
49   $tsvfile = wb_get_text(wb_get_control($window,IDC_EDFILENAME));
50   //wb_message_box($window, "input file name=".$tsvfile);
51
52   //ファイルからデータを読み込んで配列にセットする。
53   $aryList = array();
54   $aryList = GetTsvFile($window, $tsvfile);
55
56   //読み込んだ行数を求める。
57   $line_cnt = count($aryList);
58   //wb_message_box($window, "line count=".$line_cnt);
59
60   //レコード内の番号とサンプル名を結合した文字列を作り、配列にする。
61   $ary_capt = array();
62   for ($i=0; $i<$line_cnt; $i++)
63    {
64    $ary_capt[$i] = $aryList[$i][0] . " " . $aryList[$i][3];
65    //wb_message_box($window, "made list caption=".$ary_capt[$i]);
66    }
67
68   //作った文字列をリストにセットする。
69   wb_set_text(wb_get_control($window,IDC_LSSAMPLES), $ary_capt);
70   break;
71
72   case IDCLOSE:
73   //****【x】ボタンが押された場合
74   //****ウィンドウを終了する。
75   wb_destroy_window($window);
76   break;
77  }
78 }
79
80
81 //******************************************************************************
82 //ファイル読み込み
83 // $window ウィンドウオブジェクト
84 // $tsvfile TSVファイル名
85 //******************************************************************************
86 function GetTsvFile($window, $tsvfile)
87 {
88  $list_ary = array();
89  $line_cnt = 0;
90
91  //****タブ区切りデータファイルをオープン
92  $tsvfp = fopen($tsvfile, "r");
93  if ($tsvfp == false)
94  {
95   wb_message_box($window, "データファイルのオープンに失敗しました。");
96  }
97  //****オープン成功
98  else
99  {
100   //****1行づつ読み込み
101   while($sline = fgets($tsvfp, 4096))
102   {
103    //****EOF/空行はスキップ
104    if (strlen($sline) < 9) continue;
105    //****配列として分解
106    $list_ary[$line_cnt] = array();
107    $list_ary[$line_cnt] = explode("\t", rtrim($sline));
108    //wb_message_box($window, "#".$line_cnt.":".$list_ary[$line_cnt][0]);
109    $line_cnt++;
110   } //end while:read line
111
112   fclose($tsvfp);
113  } //end else:file opened
114
115  return $list_ary;
116 } //end fuction
117
118
119 ?>
---------------------------

④フォームに配置したコントロール(ボタンとかリストとか)に動きを与えます。
 今日は、データファイル名を指定して、それをオープンし、内容をリストボックス内に表示するところまで作って見ました。
 WinBinderで以下の関数が用意されているので、それを使います。

・wb_sys_dlg_open:ファル選択ダイアログを表示して、選択されたファイルのパス名をリターンする。
・wb_get_control:フォームに配置されているコントロールのウィンドウオブジェクトをコントロールID(番号)から求める。
・wb_set_text:エディットコントロールに文字列をセットする。あるいは、リストボックスに文字列をセットする。リストボックスの場合は、文字列の配列を指定すると複数行にその文字列をセットしてくれる。
・wb_get_text:エディットコントロールから入力されている文字列を取得する。
・wb_message_box:メッセージボックスを表示します。デバック用に使っています。

 今日は
「参照」ボタンの処理(37行目~ case IDC_BTSELECT:)と、
「開く」ボタンの処理(47行目~ case IDC_BTOPEN:)を作りました。
 指定されたデータファイルをオープンして読み込むところは、前回のサーバ側スクリプトのソースをベースにしました。

 上記のソースを「ppecomakelist.phpw」という名前で、ppecomakelistフォルダにセーブします。
 セーブした.phpwをダブルクリックするとWinBinderがスクリプトを実行してくれます。

 で、こんな絵がでます。
1011293_3.jpg


 ここで、WinBinderの感想ですが、やっぱりデバッグの仕掛けが無い(と思っている)のがちょっとねー。
 なので、あっちこっちにwb_message_boxを仕掛けて、ちょっとづつコードを増やして行ってます。
 それと、用意されているwb_xxxx関数のマニュアル(ヘルプ)がWinBinderについてきているんですが、お世辞にも分かりやすいとは言えない内容。ぜんぜん親切じゃない。

 やっぱり下知識がなくても作り始められるのはいいんですが、これだとデバッグにはかなり難儀しそうです。

 今日はこの辺で。 m(__)m


スポンサーサイト


コメントの投稿

非公開コメント

カレンダー
03 | 2017/04 | 05
- - - - - - 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 - - - - - -
プロフィール

さるもすなる

Author:さるもすなる
さるです。別HPサイト「さるもすなる」から侵食してきました。 山菜/きのこ、それとタイトルにしたPPバンド籠のことをメインに徒然に・・・・暇を持て余したさるの手仕事:男手芸のブログってことで。

最新記事
最新コメント
月別アーカイブ
カテゴリ
天気予報

-天気予報コム- -FC2-
本家のHPのトップ
山菜や茸の話です
PPバンドの籠作品と作り方です
投稿をお待ちしております



ブログランキング・にほんブログ村へ にほんブログ村 ハンドメイドブログへ



マニュアルのお申し込み



検索フォーム
リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。