THphp-wbRadStudio for PHP7

■利用規約・免責事項
・本ソフトウェアは、だれでも無料で使うことができます。
・本ソフトウェアにより発生したトラブルの責任を一切負わないことをご了承ください。
・本ソフトウェアの著作権は 平田寿浩ト に帰属します。

平田寿浩

クリックで拡大します
( 2019/1/16 ) [ Ver.1.0 ]
Zip ( 2.8MB )
THphp-wbRadStudio_v1-0.zip

Windows 10 32bit
[ PHP-7.3.1 ]
[ WinBinder ]
[ OpenSSL-1.1.1a ]



THphp-wbRadStudio for PHP7
[ ティーエイチピーエイチピー・ダブリュビーラッドスタジオ ]
初歩的なPHPの知識を持っている人なら簡単に Windows 10 用GUIアプリケーションを作ることができるソフトです。
ウィンドウ、ボタン、エディットボックスなど、部品の作成・配置にはプログラムを用いることなくグラフィカルに作成することができます。
インターフェースにおける入出力は専用のクラスを使いますが使い方は簡単です。
PHP初心者の人にとってはある意味、WEBアプリケーションよりも簡単に作れるかも知れません。
これは統合環境になっていて、ビジュアルの作成だけでなくプログラムの作成、テスト起動、さらにはビルドして単体で動くEXEファイルを作成することまで可能です。
オプションでUPXへのパスを指定することで作成したEXEファイルを圧縮してサイズを小さくすることもできます。

ビルドしたソフト( Static モード )は外部の拡張モジュールも php.ini も使えませんが、
外付けのDLLなどを必要とせず単体のEXEのみで動きます。
▼有効拡張機能
bz2, com_dotnet, date, ftp ( ftps対応 ), json, openssl, pcre, phar, sockets, sqlite3 ( 暗号化対応 ), zlib

フォーム作成
作成済みアイテムID・アイテム新規追加 [ コンボボックス ]

DEL [ ボタン ]
選択したIDのアイテムを削除します。

UP [ ボタン ]
IDをアップカウントします。(例:1001 => 2001 )これによりサブウインドウを追加してもIDの衝突を回避できます。

アイテムタイプ選択 [ コンボボックス ]

配置座標
フォームウィンドウ上の任意な場所でマウスの左ボタンをダブルクリックするとアイテムの作成・移動ができます。
また、マウスの右ボタンを押しながら移動するとアイテムの移動過程を見ながら移動できます。
マウスのボタンを押しながらフォーム画面上を移動させると配置座標のエディットボックス( X , Y )にリアルタイムで入力されます。
アイテムを大まかに移動させた後、スピナーを使って1ピクセル単位で微調整できます。

サイズ ( 幅 ) アイテムの大きさ
スピナーとスライダーを使って設定します。
スライダーでの調整はマウスのホイールボタンでも有効です。

キャプション
ボタンの見出しやエディットボックスの中の文字列などアイテムに文字列をセットします。
リストボックス、コンボボックス、ゲージなど無効なものもあります。

リストビューでは項目を設定できます。
名前 = 100
住所 = 140
電話 = 100

項目は改行して追加して、数字はピクセル単位で入力します。
上記例では、リストビューが340ピクセルの幅だとして、その中で占める割合を表しています。

Window
ウィンドウの(※)タイトルやサイズを設定します。
サイズはフォームウィンドウの端をマウスで掴んで調節します。
または、スピナーで調節します。

Menu [ チェックボックス ]
メニューが付きます。( メインウインドウのみ )

(※)タイトルはプログラムを使って設定することもできます。
( PHPプログラミングについて )をご覧ください。


ファイル管理
ファイルリスト
ダブルクリックで開き編集します。
また、ファイルはユーザーが指定したエディタで開くことができます。

保存 [ ボタン ]
ウィンドウフォームのデータのみ保存されます。

タイマー機能付 [ チェックボックス ]
プロジェクトを保存する時にチェックを付けて保存するとタイマー機能が使えるようになります。 ボタンなどからの入力がなくても1秒間隔で処理が行えるようになるので時計を表示させたり、 タイマー処理をするようなプログラムを作ることができます。
タイマー用IDは出力された( hcwb_w1_list.txt )で確認できます。
hcwb_w1 の数字 1 はウィンドウの番号を表しています。


PHPファイル追加
ユーザーの自作関数やクラスを別ファイルで管理したい時などに使います。
追加したファイルは自動でインクルードされるので( include , require )などで読み込む必要はありません。

エディタ指定
使い慣れたエディタが使えます。


ビルド ( EXE作成 )
出力ファイル名

Dynamic PHP DLL 共有化モード 小さなEXEファイルにできます
Static PHP DLL 一体化モードEXEファイルサイズは大きくなりますが単体EXEになります。

EXEファイルの圧縮( UPX )
( この機能を使う場合、別途 UPX をダウンロードしてください )
UPXへのパスを設定することで、EXEファイルを圧縮して小さくすることができます。

ビルド [ ボタン ]
EXEファイルにアイコンをセットしたい場合は、プロジェクトフォルダ内にアイコンファイルを置いてビルドします。




プロジェクトに含まれるPHPファイルは暗号化されます
暗号化したPHPファイル、PHPコア、リソースをEXE内へ組込
完成


利用可能なアイテム
以下が現時点で扱うことができるアイテムです。
WinBinderのすべての機能に対応することは可能ですが、現時点では対応未定です。

プッシュボタン

普通のボタンです。

(mode) -
(value) -
戻り値 -

ラジオボタン(G)
ラジオボタンは複数の選択肢で構成された中から1つのみ選択できるボタンです。 ラジオボタン(G)はデフォルトでチェック済みの状態で、複数の選択グループの頭です。 複数の選択グループを作る場合にはラジオボタン(G)をそれぞれのグループの先頭に1つ入れておく必要があります。

(mode) get, set, eneble
(value) int ( 0 or 1 )
get 戻り値 ( チェックあり = 1 ) ( チェックなし = 0 )

チェックボックス
ラジオボタンは1グループのなかで1つのみ選択可能なのに対して、 チェックボックスは複数で構成される1グループの中からいくつでも選択可能なボタンです。

(mode) get, set, eneble
(value) int ( 0 or 1 )
get 戻り値 ( チェックあり = 1 ) ( チェックなし = 0 )

エディットボックス
1行型のエディットボックスです。改行は無効です。

(mode) get, set, eneble, focus
(value) int, string
get 戻り値 ( string )

エディットボックス(R)
1行型のエディットボックスですが、リードオンリーでキーボードからの入力はできません。 プログラムからの表示用などに使います。改行は無効です。

(mode) get, set, eneble, focus
(value) int, string
get 戻り値 ( string )

エディットボックス(M)
改行可能なマルチラインのエディットボックスです。

(mode) get, set, eneble, focus
(value) int, string
get 戻り値 ( string )

エディットボックス(M/R)
改行可能なマルチラインのエディットボックスですが、リードオンリーでキーボードからの入力はできません。 プログラムからの表示用などに使います。

(mode) get, set, eneble, focus
(value) int, string
get 戻り値 ( string )

コンボボックス
データ数に関係なく通常時1行スペースで表示されていますが、 クリックすると全データがスライド表示され選択できるようになります。

(mode) get, set, set_select, eneble
(value) array ( 配列 )
get 戻り値 ( int ) 配列の key
( セレクトされてない場合 -1 を返します )

リストボックス
リストボックスは、コンボボックスとは違い縦幅を任意に設定できる選択用ボックスです。 しかし、縦幅は1ピクセル単位では伸ばせず、約20ピクセル単位づつで伸ばせます。

(mode) get, set, set_select, eneble
(value) array ( 配列 )
get 戻り値 ( int ) 配列の key
( セレクトされてない場合 -1 を返します )

ラベル
テキストを表示できます。エディットボックスとは違い枠線もないので、 直接ウィンドウ画面に書き込んでいるように見えます。

(mode) get, set
(value) int, string

フレーム
枠線で囲み見出しを付けられる装飾的なものです。

(mode) get, set
(value) int, string

ゲージ
処理の進行状況をゲージで表示します。

(mode) get, set
(value) int

リストビュー
リストボックスに似ていますが、リストボックスは一度に一つのデータしか選択できないのに対してリストビューは一度に複数のデータを選択できます。 リストデータにはそれぞれチェックボックスが付いているので、リストのフォーカスまたはダブルクリックによる選択とチェックボックスによる選択の両方の配列の key を得ることができます。

(mode) get, set, eneble
(value) array ( 配列 )
get 戻り値 ( array )

エディットボックス(P)
1行型のエディットボックスですが、( * )文字でマスクされるのでパスワード入力などで使えます。

(mode) get, set, eneble, focus
(value) int, string
get 戻り値 ( string )

リッチエディットボックス
( RTF ) により文字に装飾を加えることができるエディットボックスです。

(mode) get, set, eneble, focus
(value) int, string
get 戻り値 ( string )
HTMLコントロール
HTMLを表示するブラウザ機能。

(mode) set_location は、URLアドレス、または、ローカルのHTMLファイルへのフルパスから読み込み表示します。
(mode) set_html は、HTMLソースを直接渡すことで表示させることができます。
(mode) set_location, set_html
(value) string ( URLアドレス ) ( ローカルフルパス ) ( HTMLソース )
戻り値なし

イメージ
画像を表示できます。形式は、ビットマップとアイコンです。

●パスについて
通常のファイルパス「絶対パス・相対パス」に加え、 コンパイル・ビルドするときに画像ファイルのパスを以下のように書き換えることで EXE内にリソースとして挿入して外部ファイル無しでEXE内から直接読み込んで画像を表示できるようにすることができます。

◆ビットマップ( BMP )専用で圧縮なし
resbmp:///ファイルの絶対パス

(mode) image
(value) string
戻り値なし

メニュー
▼例
$data = array('ファイル(&F)',
       array(1001, 'セット(&D) Ctrl+D', '', '', 'Ctrl+D'),
       null,
       array(IDCLOSE, '終了')
       );
hcwb::control('set', 'menu', $data);


null は、仕切り線が引かれます。
キーボードアクセラレータも設定できます。
サンプルを参考にしてください。

(mode) set
(value) array


▼入出力に使う命令はこれだけなので簡単です。
hcwb::control( (mode)'get ...', (id)1001~, (value)[int]or[string]or[array] );



PHPプログラミングについて

▼サンプルプログラム ( 2つのサンプルのソースコードを見ると理解し易いと思います )
Zip ( 205KB )  THphp-wbRadstudio_Sample.zip




■アイテムにデータをセットする [ (mode) set ]

▼例:1
hcwb::control('set', 1001, 'テスト');
上記例:1では、ID:1001がエディットボックスだった場合 ( テスト )という文字がエディットボックス内に表示されます。

▼例:2
hcwb::control('set', 1002, array('りんご', 'みかん', 'いちご'));
上記例:2では、ID:1002がリストボックスだった場合( りんご, みかん, いちご )がリストボックス内にリスト化され表示されます。

このように、それぞれのIDが何のコントロールアイテムかプログラマ自身がわかっていればよく、 それに合わせた型( int, string, array )のデータを渡せばいいのです。 そうすればアイテムのタイプは自動で判別され処理されます。


■アイテムからデータをゲットする [ (mode) get ]

▼例:3
$value = hcwb::control('get', 1001);
上記例:3では、ID:1001がエディットボックスだった場合、エディットボックス内に入力されているデータが変数 $value に格納されます。

▼例:4
//データをセット
$data = array('りんご', 'みかん', 'いちご');
hcwb::control('set', 1002, $data);

//選択されている配列の key を取得
$geykey = hcwb::control('get', 1002);
$value = $data[$geykey];

上記例:4では、ID:1002がリストボックスだった場合、リストボックスでセレクトされているデータの配列の key を取得できます。

▼例:5
//データをセット
$data[0] = array('山田', '東京', '123');
$data[1] = array('佐藤', '京都', '456');
$data[2] = array('田中', '大阪', '789');
hcwb::control('set', 1003, $data);

//選択されている配列のすべての key を取得
$array = hcwb::control('get', 1003);
上記例:5では、ID:1003がリストビューだった場合、 リストビューでチェックされているデータとセレクトされているデータの配列キーをそれぞれ取得できます。

array(2) {
  ["checked"]=>
  array(2) {
    [0]=>
    int(0)
    [1]=>
    int(2)
  }
  ["selected"]=>
  array(2) {
    [0]=>
    int(1)
    [1]=>
    int(3)
  }
}


checked = チェック済み
selected = セレクト済み



■ウィンドウを閉じる [ (mode) close ]
hcwb::control('close', $win);
$win はアイテムのIDではなくウィンドウのハンドル


■アイテムを有効・無効にする [ (mode) enable ]
ボタンなら押せなくしたり、エディットボックスなら入力できなくしたりできます。
(value) 0 = 無効にする , 1 = 有効にする
hcwb::control('eneble', 1001, 0);
上記例では、ID:1001がプッシュボタンだった場合、クリックして押すことができなくなります。


■アイテムをフォーカスする [ (mode) focus ]
hcwb::control('focus', 1003);
上記例では、ID:1003がエディットボックスだった場合、エディットボックス内のテキストがフォーカスされます。


■ウィンドウにタイトルをセットする [ (mode) set_title ]
hcwb::control('set_title', $win, 'タイトル');
$win はアイテムのIDではなくウィンドウのハンドル


■メインウィンドウを閉じる(終了) [ (mode) end ]
hcwb::control('end');


■処理中にウェイトをかける [ (mode) wait ]
hcwb::control('wait', 1000);
PHPの sleep() 関数とは違う働きをします。(value) 1000 は1秒を表します。


■外部プログラムの実行 [ (mode) exec ]
hcwb::control('exec', Path, [コマンド]);
外部EXEの起動や関連付けされたプログラムの起動。
例えば、http://のアドレスならブラウザ、ファイルのパスならエディタで起動されます。

▼例
hcwb::control('exec', 'sample.exe', '-a 100 -b 200');
hcwb::control('exec', 'http://localhost/index.html');


PHPの( exec )との違いは、プロセスのループを止めないので外部プログラムからの結果は受け取れませんが、実行直後から他の処理を受付可能です。


■スタイルを設定する [ (mode) style ]
hcwb::control('style', 1001, WBC_CHECKBOXES | WBC_LINES);
現在、リストビューのみに対応しています。
WBC_CHECKBOXES = リストビューにチェックボックスが付きます。
WBC_LINES = リストビューにラインが付きます。




ゲージ処理 例:1 下記例では、ID:1006がゲージだった場合。

$array = array('A', 'B', 'C', 'D', 'E');
hcwb::control('get', 1006, count($array));
foreach ($array as $i => $v) {
       hcwb::control('set', 1006, $i + 1);
      
( 何らかの処理 )
}
hcwb::control('set', 1006, 0);




プログラムの雛形

プロジェクトを保存すると下記のようなコードがウィンドウごとに作られます。
1つのアプリケーションの中で、メイン1個、サブ8個以内でウィンドウを作成できます。
ウィンドウを追加する場合、同じプロジェクトフォルダ内に出力してください。
その際、すでにあるウィンドウのアイテムのIDと重複しないようにIDが自動で調整されます。
ウィンドウ番号は、( hcwb_w1 )がメインで、( hcwb_w2 ~ hcwb_w9 )がサブとなります。

クラス内の ini() 関数は初期設定に使い、process() 関数では処理を書きます。
$win はウィンドウのハンドルが、$id にはアイテムのIDが入ります。
詳しくはサンプルプログラムをご覧ください。

サブウィンドウのタイプは、モーダルダイアログです。
サブウィンドウを開くには下記のように書きます。
hcwb_w2::window($win);
hcwb_w2 の数字 2 はウィンドウの番号を表しています。
$win はウィンドウのハンドルです。

class hcwb_p1
{
    public static function ini($win)
    {

    }

    public static function process($win, $id, $ctr, $lp1 = 0, $lp2 = 0)
    {
      switch ($id) {
        case 1001:
          break;

        case IDCLOSE:
          hcwb::control('close', $win);
          break;

        default:
          /* 例えばIDが1005のリストビューをダブルクリックで選択された場合、
          下記のようなコードで配列キーを取得することができます */

          if (($lp1 & WBC_DBLCLICK) && $id == 1005) {
              $key = hcwb::control('get', 1005);
          }
          break;
      }
    }


    ▼( function process )は[ switch ]の代わりに[ if ]を使って書くこともできます
    public static function process($win, $id, $ctr, $lp1 = 0, $lp2 = 0)
    {
      if ($id == 1001) {

      } elseif ($id == IDCLOSE) {
          hcwb::control('close', $win);
      }
    }

}

プログラミングについての注意点
PHP-5.3 から非推奨となった関数の ereg eregi eregi_replace ereg_replace split spliti は使えません
代わりに preg_match preg_replace preg_split を使うようにしてください。

開発中は、var_dump(), print_r(), print, echo を使ってエラーや取得データの確認などをコンソール画面で確認しながら作業できますが、ビルド( EXE化 )したGUIソフトでは、var_dump(), print_r(), print, echo などを使った出力は使えませんのでご注意ください。
その他、プログラムでのみ扱えるアイテム 【$win はウィンドウのハンドルです】

■メッセージボックス [ (mode) message ]
hcwb::control('message', $win, '実行しました');

■メッセージボックス [ (mode) message_yn ]
戻り値があり ( はい = 1 ) ( いいえ = 0 ) で判断できます。
hcwb::control('message_yn', $win, '実行しますか?');

■ゲットディレクトリパス [ (mode) get_path ]
$path = hcwb::control('get_path', $win);

■ゲットファイルパス [ (mode) get_file ]
▼全ファイル形式対象
$file = hcwb::control('get_file', $win);

▼特定のファイル形式のみを指定する場合
$type = array(array('テキスト', '*.txt'),
                    array('HTML', '*.html'));
$file = hcwb::control('get_file', $win, $type);

コメント

この記事へのコメントは終了しました。