さるもすなるぷろぐらむU WinAppl from PHP
●PHPからWindowsアプリケーションを作る−はじめの半歩
■動機
PHPでWindowsプログラムを作れるそうです。
なので、「PHP−はじめの半歩」で作ったサーバスクリプトの入力データであるタブ区切りデータをクライント側で
簡単に編集するためのプログラムを作ってみたいと思います。
(※テキストエディタがあれば、十分作成可能なようにデータは簡素化した形式にしましたが、ここはアエテやって見ます。)
■必要環境
▲Bamcompile
PHPをコンパイルしてexeにする環境です。
@http://www.bambalam.se/bamcompile/
「Download Bamcompile1.21 (win32) zip」を選択しダウンロードする。
→http://www.bambalam.se/bamcompile/download/bamcompile1.21.zip
▲WinBinder
PHPスクリプトでウィンドウ表示/描画などを行うためのスクリプト動作環境
Ahttp://winbinder.org/download.php
「WinBinder-0.46.0.exe」を選択する。
→http://winbinder.org/files/WinBinder-0.46.0.exe
上記2つだと、デバッグがなんか難しそうなので、コアの処理のデバッグ用に前回もつかったEclipseを使います。
もしかしたら、WinBinderのスクリプトもデバックできるのかも・・・・
▲Eclipse
Bhttp://mergedoc.sourceforge.jp/
「Eclipse 3.5 Galileo Pleades All in One」を選択し、その後サブセットを選択する画面が表示されるので
「PHP」版か「Ultimate」版を選択するとダウンロードが開始される。さるが使用したのは、PHP-JREあり版です。
→http://ftp.jaist.ac.jp/pub/mergedoc/pleiades/3.5/pleiades-e3.5-php-jre_20100226.zip
■インストール手順
▲Bamcompileのインストール
インストールは、bamcompile1.21.zipを展開して、適当なフォルダに配置するのみ。
コンパイルの実行は、DOSプロンプト上で行うので、ショートカットを準備する。
1)ディスクトップ上でマウスの右クリックで、「新規作成」−「ショートカット」を選択する。
2)ショートカット作成のウィザードが起動されるので、以下を指定する。
作成場所:ディスクトップ
名前:bamcompile
3)作成された、ショートカットのアイコンを右クリックし、「プロパティ」を表示し、以下を指定する。
リンク先:%SystemRoot%\system32\cmd.exe /k
作業フォルダ:C:\Pleiades_e35\bamcompile1.21
※C:\Pleiades_e35は、展開したbamcompile1.21の配置先。
▲WinBinderのインストール
インストールは、WinBinder-0.46.0.exeを実行し、インストール先にbamcompileのインストール先の近くを指定する。
例えば、C:\Pleiades_e35\WinBinderとか。
※Eclipseのインストールについては、「PHP−はじめの半歩」を参照してください。
■ウィンドウなしのプログラムを作成してみる
@phpスクリプトを作成する
Eclipseを起動して、簡単なプログラムを作成する。
デバックはEclipse上で実施する。以下を「first.php」として作成。
−−−−−−−−−−−−−−−
<?php
echo "はじめてなんです。\n";
echo "どうぞお手柔らかに。\n";
?>
−−−−−−−−−−−−−−−
※Eclipse上でのテスト実行の方法については省略する。
※bamconpileのサポートするのは、PHP4なので、Eclipseのプロジェクトを作成する際に、PHP4を指定すること。
Aコンパイルして実行
Bamcompileの環境下に作成したphpファイルをコピーする。
例)C:\Pleiades_e35\bamcompile1.21\first\first.php
注)Eclipseの環境がS-JIS以外だと、日本語は文字化けするので、phpスクリプトをS-JISに変換する必要があります。
例えば、sakuraエディタは、「名前を付けて保存」を選択すると、「文字コードセット」と「改行コード」を指定できるので、
それぞれ「SJIS」、「CR+LF」を選択して保存し直すとよいでしょう。
Bamcompileのショートカットを起動し、表示されるDOSプロンプトで以下のコマンドを実行する。
例)C:\Pleiades_e35\bamcompile1.21> bamcompile first\first.php first\first.exe
コンパイルが成功したら、実行してみましょう。以下のようなメッセージ表示になります。
−−−−−−−−−−−−−−−
C:\Pleiades_e35\bamcompile1.21> bamcompile first\first.php first\first.exe
Bambalam PHP EXE Compiler/Embedder 1.21
Mainfile: first\first.php
Outfile: first\first.exe
Encoding and embedding first\first.php
first\first.exe created successfully!
C:\Pleiades_e35\bamcompile1.21>first\first
はじめてなんです。
どうぞお手柔らかに。
C:\Pleiades_e35\bamcompile1.21>
−−−−−−−−−−−−−−−
簡単でしたね。
■ウィンドウありプログラムの作成
WinBinderを使うと、Windows上で、ウィンドウを表示するようなアプリケーションをPHPで作ることができます。
ただし、エントリになるスクリプトの拡張子は、.phpwである必要がある。
まずは、サンプルスクリプトを参考にして(ぐぐれば、説明してくれているサイトがあります。)、firstwin.phpwを作ってみましょう。
@シンプルなウィンドウプログラムの作成と仮実行
bamcompileのフォルダの下にfirstwinフォルダを作成し、以下の内容のfirstwin.phpwを作成します。
セーブしたfirstwin.phpwのアイコンが、WinBinderのアイコンになっていれば、その状態で実行することが可能です。
ダブルクリックしてみてください。
タイトル「ようこそ」の画面が表示されれば、成功です。
もし、一瞬ウィンドウが表示されているようで、すぐ消える場合は、
インクルードしているwinbinder.phpのパスが正しくない可能性があるので、見直してください。
もっと凝ったものを作成したい場合には、WinBinderに含まれるライブラリ仕様を参照する必要があります。
「スタート」−「すべてのプログラム」−「WinBinder」−「Welcome to WinBinder」を起動します。
右図のウィンドウが表示されます。ウィンドウ中の「WinBinder Manual」をクリックして、関数リファレンスを参照してください。
その他に、WinBinderをインストールしたフォルダにサンプルがありますので、参考にしてください。
C:\Pleiades_e35\WinBinder\phpcode\examples
Aウィンドウのデザイン
画面の大きさやカスタムコントロールの配置を最初からデザインしたい場合は、
「スタート」−「すべてのプログラム」−「WinBinder」−「Form Editor」で、FormEditorを起動できます。
FormEditorの使い方の詳細は割愛します。
仮に下図のようなウィンドウを作ったとします。(使えるコントロール全部貼ってみました。)
FormEditorのメニュー「File」−「Save project」を選択し、
「保存する場所」にfirstwinフォルダを選択して、「ファイル名」(プロジェクト名)も「firstwin」として、
作ったデザインをセーブします。
そうすると、firstwinフォルダに、firstwin.prjとfirstwin.form.phpというファイルが作成されます。
firstwin.form.phpには、デザインしたウィンドウ/コントロールを生成・表示すための、
スクリプト(ソース)が含まれています。
firstwin.prjは、そのソースをFormEditorで再編集するときのためのデータです。
(注:なので、.form.phpを別のエディタで編集した後に、FormEditorで開いてセーブし直すと、]
他のエディタで編集した内容は無効になります。)
Bデザインの取り込み
次に、このデザインを先のfirstwin.phpwに取り込みましょう。
firswin.phpwを以下のように編集することで、取り込み可能です。
.phpwをセーブして、前と同じように、ダブルクリックして実行してみましょう。
以下の画面が表示されれば成功です。
[PushButton1]をクリックするとメッセージボックスが表示されるはずです。
Eコンパイルして単独で動作するEXEを作る
さあ、いよいよ単独動作(配布)可能なEXEの作成になります。
難解です。しかもデバッカがないので、ミスしても簡単には修正できません。
なぜ、動かないのか調査するのが大変なので、ミスしないように注意してください。
E-1 コンパイルパラメタ指定ファイルを作る
以下の内容をfirstwinフォルダ内にfirstwin.bcpという名前でセーブする。
・ | MAINFILE | :エントリのある.phpwを指定する。 |
・ | OUTFILE | :コンパイルした結果のEXE名を指定する。 |
・ | WINDOWED | :ウィンドウプログラムである場合に指定する。これを指定するとEXE起動時にDOSプロンプトを開かない。ただし、デバック段階では、指定しないと、チープではあるがDOSプロンプトでエラーメッセージを確認することができる場合がある。 |
・ | COMPRESS | :作成されたEXEを圧縮して小さくする指定。 |
・ | DESTINATION | :.phpwをコンパイルして実行する場合、もともと動作していた環境(includeしていた.php)を仮想的にEXE内部に配置する必要があるらしい、その仮想フォルダを指定する。 |
・ | EMBED | :先にDESTINATIONで指定した仮想フォルダに配置する(組み込む)インクルードファイルを指定する。 |
・ | EXTENSION | :DLLをEXE内に取り込む場合に指定する。少なくともphp_winbinder.dllは必要。 |
E-2 スクリプト内のinclude指定の変更
DESTINATIONとEMBEDで指定する実行時仮想空間に従ってスクリプトのincludeパスを変更する必要がある。
つまり、E-1の指定の場合、EXE実行時には、
/(ルート)にfirstwin.phpwとfirstwin.form.phpが配置され、
/includeにwinbinder.php〜wb_windows.inc.phpが配置されている
という意味になるらしい。
よって、firstwin.phpw内のincludeの指定では、その仮想のフォルダ指定としなければならない。
−−−−−−−−−−−−−−−−−−
:
: //****お決まり。必ず必要なインクルード
//※絶対パス指定だと、exeにしたとき実行時にもそのパスを参照してしまう。
//include "../../WinBinder/phpcode/include/winbinder.php";
include "include/winbinder.php";
:
:
−−−−−−−−−−−−−−−−−−
他の.phpソースをインルードしてその中のfunctionを実行したいような場合もたぶん同様に、.bcpで指定する必要があるはず。
ちなみに、その辺の意味を知らずに外部.phpのインクルードを行ったが、うまく行かなかった。
E-3 コンパイルする
「■ウィンドウなしのプログラムを作成してみる」で説明したのと同様に、 ディスクトップに作成したBamcompileのショートカットを起動する。 表示されるDOSプロンプトで以下のコマンドを実行する。
例)C:\Pleiades_e35\bamcompile1.21\firstwin> ..\bamcompile firstwin.bcp
コンパイルが成功したら、dirコマンドを打って見ましょう。
bamcompile1.21\firstwinの下に、firstwin.exeが作成されているはずです。
E-4 動作確認
本来、単純に作成されたEXEを実行すればいい話なのですが、この環境の場合はそうはいかないようです。
開発環境だけで動作するexeが作られる場合があるので、以下のことをやって確認してみてください。
・WinBinderのインストール先フォルダの名前を一時的に変更する。
C:\Pleiades_e35\WinBinder → TWinBinder
・作ったプログラムのソースフォルダの名前を一時的に変更する。
C:\Pleiades_e35\bamcompile1.21\firstwin → Tfirstwin
その状態で、DOSプロンプトから実行してみてください。
例)C:\Pleiades_e35\bamcompile1.21\firstwin> firstwin
E-1、E-2の工程が正しく行われていない場合、.phpwを実行すると正しく動作するのに、 E-4の確認、あるいは、WinBinderを組み込んでいない他のWindowsPCでは動作しない (全く表示しないし、メッセージも出ません。)現象になりますので、十分ご注意ください。
PHPスクリプト処理レベルでのエラーがある場合は、DOSプロンプトからコマンド入力で機動した場合、 かろうじてメッセージが表示されることがあります。
■実用に向けて
実用できるプログラムを作る場合の何点か注意点です。
・FE(FormEditor)はあくまでも最初にフォームを形作るための道具でしかなく、 編集や多様なタイプ、制御には向かない。
最初の雛形を作ったあとは、出力される.form.phpを直接編集した方が効率がいい。
・デバッグが難しいので、wb_message_box()などを使って、少しづつスクリプトソースを 追加していく方式をお勧めします。
・WinBinderに添付されているリファレンスマニュアルはお世辞にもわかり易いとは言えない。
Web上でサンプルや解説を検索した方が効率はいいかもしれない。
以上、腰が引けてしまいそうな注意点ばかりですが、スクリプトの状態では、 作って即確認が可能なので、カットアンドトライが苦にならない方にお勧めです。
■サンプルスクリプト
さるは、CGI向けのタブ区切りデータを編集するためのアプリケーションを作成しました。
1レコード(行)の構成が以下のようになっているテキストデータを編集するためのツールです。
−−−−−−−−−−−−−−−−
・サンプル番号 :テキスト
・籠サンプルの写真 :画像ファイル名
・大きい写真 :画像ファイル名
・名前 :テキスト
・サイズH :数値(cm)
・サイズW :数値(cm)
・サイズD :数値(cm)
・残数 :数値
・作成数 :数値
・材料の提供可/不可 :1=可、0=不可
・不可の場合のコメント :テキスト
・サンプルの値段 :数値(円)
−−−−−−−−−−−−−−−−
そのプログラムは、起動すると最初に以下のような画面が出ます。
・「サンプルリスト データファイル」欄に.tsvファイルを指定して、「開く」をクリックすると、 下の「サンプル項目」に籠の番号と名前を表示するようになっています。
・レコード(行)の順番を入れ替えたい場合は、リストボックス内からレコードを選択し、 「UP」「DOWN」ボタンを使います。レコードを削除したい場合は、「削除」ボタンをクリックします。
・詳細を編集したい場合は、リストボックス内からレコードをダブルクリックすると、 編集ダイアログを表示します。
・レコードの内容を修正して、「追加」、「更新」をクリックすると、リストは編集されます。
・最後に、「保存」をクリックした場合は、「データファイル」に入力されたファイル名で保存を試みます。
以上のような、プログラムの開発経過は、
PHP-はじめの一歩(その10)Windowsプログラムの作り方(3)〜 (6)をご参照ください。
スクリプトのソース一式はここからダウンロードいただけます。よろしければどうぞ。