スポンサーサイト

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


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

   プログラミング [2010/12/04]
いやー「PHP-はじめの一歩」こんなに長くなるとは、思っていませんでした。
すでに半月以上経ってますね。そろそろ終わりにしないと・・ですね。

PHPで作るWindowsアプリの最後です。たぶん今まででも一番ダラダラと説明します。

まずは、「削除」。
行の「削除」のことを忘れていたので、ボタンの追加からです。
ppecomakelist.form.phpの方を変更します。(FEで作成しましたが、既に別のエディタで修正してしまっているので、FEは使えません。)以下の行の追加です。
---------------
if(!defined('IDC_BTDEL')) define('IDC_BTDEL', 1007);

wb_create_control($winmain, PushButton, '削除', 440, 220, 50, 25, IDC_BTDEL, 0x00000000, 0, 0);
---------------
上記を追加するにあたって、他のボタンの配置や、コントロールIDなんかも直す必要もあります。
「必ず」と言う訳ではありません。

それで、処理の方は、window_processファンクションに以下を追加しました。
---------------
//****削除ボタンをクリックされたら
case IDC_BTDEL:
  //リストボックスの選択された行の番号を取得する。
  $curitem = wb_get_selected(wb_get_control($window,IDC_LSSAMPLES));
  //wb_message_box($window, "current item=".$curitem);
  //行番号が0でなければ削除作業
  if ($curitem > 0 && $curitem <= $Line_cnt)
  {
    //その行を詰める
    $i = $curitem - 1;
    while ($i < ($Line_cnt-1))
    {
      $AryList[$i] = $AryList[$i+1];
      $i++;
    }
    $AryList[$Line_cnt-1] = null;
    $Line_cnt--;
    //リストボックスの行の表示
    RenewListBox($window);
    //カレント行の再設定
    if ($curitem > $Line_cnt) $curitem = $Line_cnt;
    wb_set_selected(wb_get_control($window,IDC_LSSAMPLES), $curitem);
  }
  break;
---------------

で、もって最後に「保存」ボタンの処理を追加します。
---------------
//****保存ボタンをクリックされたら
case IDC_BTSAVE:
  //エディットからファイルパス名を取得
  $tsvfile = wb_get_text(wb_get_control($window,IDC_EDFILENAME));
  //wb_message_box($window, "input file name=".$tsvfile);
  //ファイルパスをチェックする。
  if ($tsvfile == "" || $tsvfile == null)
  {
    wb_message_box($window, "保存先ファイルパスを指定してください。",
            MY_NAME, WBC_WARNING);
    wb_set_focus(wb_get_control($window, IDC_BTSELECT));
    break;
  }
  //ファイルに配列データを書き出す。
  SetTsvFile($window, $tsvfile);
  break;
---------------

実際のファイル書き込みファンクションは以下のような感じです。
---------------
//******************************************************************************
//ファイル書き出し
// $window   ウィンドウオブジェクト
// $tsvfile  TSVファイル名
//******************************************************************************
function SetTsvFile($window, $tsvfile)
{
  global $AryList;        //タブ区切りデータ保存配列
  global $Line_cnt;        //レコード数

  //****出力先ファイルをオープン
  //wb_message_box($window, file_exists($tsvfile));
  if (file_exists($tsvfile))
  {
    //****ファイルが既にある場合
    //wb_message_box($window, is_file($tsvfile));
    if (is_file($tsvfile))
    {
      $okng = wb_message_box($window, "既にあるファイルに上書きしますか?",
              MY_NAME, WBC_OKCANCEL);
      if ($okng == false) return;
    }
    //****ディレクトリだったりしたら
    else
    {
      wb_message_box($window, "出力先にディレクトリ名が指定されています。",
              MY_NAME, WBC_WARNING);
      return;
    }
  }

  $tsvfp = fopen($tsvfile, "w");
  if ($tsvfp == false)
  {
    wb_message_box($window, "データファイルのオープンに失敗しました。",
              MY_NAME, WBC_WARNING);
  }
  //****オープン成功
  else
  {
    //****1行づつ出力
    for ($i=0; $i<$Line_cnt; $i++)
    {
      $output_dat = implode("\t", $AryList[$i]) . "\r\n";     //配列をTSV行に変換
      //wb_message_box($window, $output_dat);
      fwrite($tsvfp, $output_dat);
    } //end for:write line

    fclose($tsvfp);
  } //end else:file opened

  wb_message_box($window, "ファイルに出力しました。", MY_NAME, WBC_INFO);

  return;
} //end fuction
---------------

その他、エラー時のメッセージの追加などで、プログラミングは終了。

ここで、思ったとおりに動くか確認して。


●いよいよコンパイル
まずは、フォルダの中を整理します。

①FEが編集用の.prjを作成しているで、サブフォルダに移動。
②3つのソースファイルは、別のサブフォルダに移動します。
③winbinder.phpのインクルードパスを変更します。
④さらに、Bamcompile用のppecomakelist.bcpを作成します。
⑤そのppecomakelist.bcpを指定してBamcompileを起動するバッチファイルも作成します。
⑥また、作成する.exeにアイコンを割り当てたいので、アイコンも準備します。

フォルダファイル構成は、以下のようにしました。①②
---------------
<Bamcompile1.21>
  <ppecomakelist>
    compile.bat    ・・・⑤
    ppecomakelist.bcp ・・・④
    <src>
      ppecomakelist.phpw ・・・③
      ppecomakelist.form.php
      ppecoitemedit.form.php
    <res>
      ppecomakelist.prj
      ppecoitemedit.prj
      sarumosunaru.ico  ・・・⑥
<WinBinder>
  :
  :
---------------

まずは、ここで動作を確認します。

上記の構成にしたあとでは、ppecomakelist.phpwの中でインクルードしているwinbinder.phpのパスが変わっているので注意が必要。

さらに、.exeにしたときの仮想パスにそのインクルードパスを再度変更します。(この時点でWinBinderのスクリプトとしては動作しなくなります。)③
---------------
//****お決まり。必ず必要なインクルード
//include "../../../WinBinder/phpcode/include/winbinder.php";
include "include/winbinder.php";
---------------

Bamcompile用のppecomakelist.bcpを作成します。以下のような感じ。④
---------------
MAINFILE ppecomakelist.phpw
OUTFILE ppecomakelist.exe
WINDOWED
COMPRESS
DESTINATION /
EMBED src
DESTINATION include
EMBED ..\..\WinBinder\phpcode\include\winbinder.php
EMBED ..\..\WinBinder\phpcode\include\wb_generic.inc.php
EMBED ..\..\WinBinder\phpcode\include\wb_resources.inc.php
EMBED ..\..\WinBinder\phpcode\include\wb_windows.inc.php
EXTENSION ..\..\WinBinder\binaries\php4\ext\php_winbinder.dll
---------------

上記を使ってコンパイルするためのバッチファイル(compile.bat)は以下のような感じ。⑤
---------------
..\bamcompile ppecomakelist.bcp -i:res\sarumosunaru.ico
pause
---------------

ここまでやったら、バッチファイルをダブルクリックしてコンパイルを実行させます。
以下のようなメッセージが出たら、コンパイル成功。
---------------
Bambalam PHP EXE Compiler/Embedder 1.21

Using project file: ppecomakelist.bcp
Windowed application
Compress
Mainfile: ppecomakelist.phpw
Outfile: ppecomakelist.exe
Icon: res\sarumosunaru.ico

Encoding and embedding ppecoitemedit.form.php
Encoding and embedding ppecomakelist.form.php
Encoding and embedding ppecomakelist.phpw
Encoding and embedding include/winbinder.php
Encoding and embedding include/wb_generic.inc.php
Encoding and embedding include/wb_resources.inc.php
Encoding and embedding include/wb_windows.inc.php
Embedding php_winbinder.dll and adding it to extension loader
Updating icon...done
Compressing final exe..
Compression done

ppecomakelist.exe created successfully!

C:\Pleiades_e35\Bamcompile1.21\ppecomakelist>pause
続行するには何かキーを押してください . . .
---------------

ppecomakelist.exe が出来てます。念のため動作を確認します。

1012041_1.jpg

EXEのサイズを見ると615Kもある。
php_winbinder.dllも取り込んでいるんでしょうからしょうがないですかね。

これで、当初予定の以下3つの仕掛け全部が完成です。
(Ⅰ)自分のPC上で、タブ区切り形式のデータを作る(編集更新する)ためのプログラム
(Ⅱ)上記のプログラムで作成したタブ区切りデータを読み込んで、一覧ページを表示するためのPHPスクリプト
(Ⅲ)一覧ページ上の「申し込み」ボタンが押されたときに、「申し込み」ページを表示し、必要事項を入力して「送信」とやったら、さるにその内容の連絡を送るPHPスクリプト

せっかく、ここまでやったので、HPにこの内容を昇格させようと思います。
遠からず、http://nga78n.web.fc2.com/cgiintro.htmにソースダウンロード可能なように載せます。
ご興味がある方は、参考になさってください。(参考にはならないか・・・・)
スポンサーサイト


コメントの投稿

非公開コメント

カレンダー
08 | 2017/09 | 10
- - - - - 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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。