![]() |
![]() |
![]() |
![]() |
WideStudio Application Builder User's Guide(Ocaml言語) | ||
---|---|---|
ユーザダイアログ簡単なユーザダイアログの作成WSCdialog を利用して簡単なユーザダイアログを作成してみましょう。次の様 な機能をもっているものとします。![]() [ユーザダイアログを使ったサンプル] ユーザダイアログのポップアップ制御ws/sampes/share/dialog/newproject.prj で提供されるサンプルをもとにユー ザダイアログのポップアップ制御をみていきましょう。ダイアログは、入力、 もしくは表示を行うための専用ウィンドウとしてよく用いられます。したがっ て、通常のウィンドウとして作成すると都合の悪い場合があります。たとえば、 複数の場所(イベントプロシージャ)から、同じダイアログを呼び出したいとし ます。この場合、通常のウィンドウとして実装していると、ダイアログの入力が終っ た場合の通知を受けるのが複雑になります。 しかしながら、ダイアログで実 装している場合では、ダイアログ入力終了が、popup メソッドによる完了復帰 で同期がとられるので、簡単にイベントプロシージャから、ダイアログ入力の 制御が行えます。 図は、表示されたウィンドウが結果を返す場合のウィンドウとダイアログの 違いを示しています。 ![]() [ウィンドウとユーザダイアログを使った場合の違い] ![]() [簡単なユーザダイアログの例] (*----------------------------------------------------------*) (*Function for the event procedure *) (*----------------------------------------------------------*) open Swig open Mwt open Mwtlib open Newwin000 let dialogep obj = (* do something...*) if get_int (obj -> getStatus()) <> get_int _WS_DIALOG_OK then begin (* A *) ignore(obj -> setVisible(_False)); end else begin let str = ((!newvifi_003) -> getProperty("labelString")) in if get_string (str -> getCharPtr()) = "" then begin (* B *) let msg = _WSGIappMessageDialog '() in msg->setProperty("defaultPosition",_True); msg->setProperty("width",500); msg->setProperty("labelString", "Please input some string to the input field."); ignore(msg->popup()); (* C *) end else begin let value = !newradi_006->getProperty("value") in if get_int value = 0 then begin (* D *) let msg = _WSGIappMessageDialog '() in msg->setProperty("defaultPosition",_True); msg->setProperty("width",500); msg->setProperty("labelString", "Please select a item of the radio group."); ignore(msg->popup()); (* E *) end else begin ignore(obj -> setVisible(_False)); (* F *) end; end; end; () let _ = Callback.register "dialogep" dialogepまずイベントプロシージャを張り付けたダイアログのクラスポインタを取得し ます。なぜかというと、ダイアログクラス固有のgetStatus メソッドにアクセ スして、押されたボタンの種類を調べるためです。 A において押されたボタンをチェックします。OK ボタン以外は、ダイアログを そのまま不可視化します。 B で newvifi_003 に入力されているかチェックします。入力されていない場 合は、C でメッセージダイアログを表示して、終了します。D で newradi_006 が選択されているかチェックします。選択されていない場合は、 E でメッセージダイアログを表示して、終了します。 次に F で入力が正しい場合には、ダイアログを不可視化します。このとき、 このダイアログを不可視化することにより、このダイアログを呼び出している popup メソッドが復帰します。したがって、不可視化しない場合、ダイアログ が終了しません。 次はダイアログを呼び出しているイベントプロシージャの例です。 ![]() [ユーザダイアログを呼び出す画面の例] (*----------------------------------------------------------*) (*Function for the event procedure *) (*----------------------------------------------------------*) open Swig open Mwt open Mwtlib open Newwin000 let btnep obj = (* do something...*) let value = !newdial_001 -> popup() in if get_int value = get_int _WS_DIALOG_OK then begin ignore(!newvlab_007 -> setProperty("labelString","DIALOG OK!")); end else if get_int value = get_int _WS_DIALOG_NO then begin ignore(!newvlab_007 -> setProperty("labelString","DIALOG NO!")); end else if get_int value = get_int _WS_DIALOG_CANCEL then begin ignore(!newvlab_007 -> setProperty("labelString","DIALOG CANCEL!")); end; let tmp = !newvifi_003 -> getProperty("labelString") in let tmp2 = "INPUT:" ^ (get_string(tmp->getCharPtr())) in ignore(!newvlab_010 -> setProperty("labelString",(make_string(tmp2)))); let tmp = !newradi_006 -> getProperty("value") in let tmp2 = "SELECT:" ^ (get_string(tmp->getCharPtr())) in ignore(!newvlab_011 -> setProperty("labelString",(make_string(tmp2)))); () let _ = Callback.register "btnep" btnep Document Release 3.80 for WideStudio ver 3.80, Jan 2005
|
||
![]() |
![]() |
![]() |
![]() |
バグ情報、ご質問等ございましたら、メーリングリストでご確認の上、 御気軽にこちらの方までよろしくお願いいたします。 |
Copyright©WideStudio Development Team,1999-2005
|
![]() |