XファンクションGUIでコントロールを構築する

内容

  1. 1 サマリー
  2. 2 学習する項目
  3. 3 ステップ
  4. 4 Xファンクションを実行する

サマリー

このサンプルはXファンクションのGetN ダイアログをツリーノード変数で構築する方法を示します。この仕組みは複数の変数によるコントロールを避けるために使用します。これはXファンクションダイアログの例です。

OCguide xf example make tree.png

学習する項目

  1. make_treeによって異なるコントロールを作成する方法
  2. GUIを特定のコントロールのイベントで更新する方法
  3. 正しい入力を確認して尋ねる方法

ステップ

  1. ツール:Xファンクション・ビルダを選択してXファンクション・ビルダダイアログを開きます。それからファイル:新しいXファンクションウィザードを選択して入力変数名を GUI とするTreeNode型のXファンクションを作成して「gui_controls.oxf」として保存します。
  2. Xファンクションをコードビルダで開き、gui_controls_make_tree 関数に以下のコードを追加します。
    if ( strcmp("GUI", lpcszVarName) == 0 ) // 変数を名前でチェック
    {
            // ID は固有(ユニーク)である必要がある
            int nBranchID = 0x0001;
            int nUserID = GET_USER_DATAID(0); //NodeID を使用してテーマをサポート
     
            GETN_USE(tr)  //このノードを現在のノードとして使用
     
            //サブブランチ開始
            GETN_BEGIN_BRANCH(UserInfo, "User Information")        GETN_ID(nBranchID++)
                    //文字列編集ボックス
                    GETN_STR(UserName, "Name", "Unknown") GETN_ID(nUserID++)
     
                    // パスワード編集ボックス
                    GETN_PASSWORD(Password, "Password", "") GETN_ID(nUserID++)
            GETN_END_BRANCH(UserInfo) //サブブランチ終了
     
            //サブブランチ開始
            GETN_BEGIN_BRANCH(Detail, "Details") GETN_ID(nBranchID++)       
                    // 編集可能なドロップダウンリスト
                    GETN_STRLIST(Language, "Language", "English", "|English|German") 
                    GETN_ID(nUserID++)
     
                    // ラジオボタン
                    GETN_BEGIN_BRANCH(lGender, "Gender") GETN_ID(nBranchID++)
                            GETN_RADIO_INDEX(Gender, 0, "Male|Female") GETN_ID(nUserID++)                              
                            // ラジオボタンの形式
                            GETN_OPTION_DISPLAY_FORMAT(DISPLAY_EDITOR_LEFT)                       
                    GETN_END_BRANCH(lGender)
     
                    //数値編集ボックス。age(年齢)は整数でないといけないのでデータ型として "%d”を使用
                    GETN_NUM(Age, "Age", 18) GETN_OPTION_NUM_FORMAT("%d")
                    GETN_ID(nUserID++)
     
                    //イベント操作と共にチェックボックス設置
                    GETN_CHECK(iEmail, "Have Email", 0)       GETN_ID(nUserID++)//チェックボックス
                            GETN_OPTION_EVENT(_show_email) //iEmailイベントのチェックボックス
     
                    //文字列編集ボックス
                    GETN_STR(Email, "Email", "") GETN_ID(nUserID++)          
            GETN_END_BRANCH(Detail) //サブブランチ終了
    }
    
  3. 「//put your own support static functions here」という行の後に、以下のイベント操作関数を入力します。
    static bool _show_email(TreeNode& tr, int nRow, int nType, Dialog& Dlg)
    {
            TreeNode trDetail = tr.GUI.Detail;
            if ( !trDetail )
                    return false;
            int nShow = trDetail.iEmail.nVal;
            //チェックがあれば表示、無いなら非表示
            trDetail.Email.Show = (nShow == 1);
            return true;
    }
     
    static bool _check_email(LPCSTR lpcszEmail)
    {
            string strEmail(lpcszEmail);
            if ( strEmail.Count('@') != 1 ) 
                    return false; //1つだけ「@」記号を含む
            int nSep = strEmail.Find('@');
            string strLeft = strEmail.Left(nSep);
            string strRight = strEmail.Right(strEmail.GetLength() - nSep - 1);
            if ( strLeft.GetLength() == 0 )
                    return false;
            if ( strRight.GetLength() == 0 )
                    return false;
            LPCSTR lpcszInvalid = "~!#$%^&*()+ -=|\\/><,`";
            if ( strEmail.FindOneOf(lpcszInvalid) >= 0 )
                    return false;
            return true;
    }
    
  4. gui_controls_event1関数に、以下のエラーチェックコードを入力します。
    if ( strcmp(lpcszNodeName, "Email") == 0 )
    {
        string strVal = trGetN.GUI.Detail.Email.strVal;
        if ( !_check_email(strVal) )
        {
            strErrMsg = "Invalid Email Address!Please correct it";
            //OKボタン無効化、エラーがあるときは継続出来なくする
            bOKEnable = false;
        }
    }
    
  5. 返してくる値を「return false 」(デフォルト)から「 return true 」に変更してGUIを強制的に変更します。
  6. Xファンクションのボディではユーザ設定をツリー上に表示します。Ocguide XF Compile Button.PNGボタンをクリックしてコンパイルし、変更を保存します。
    out_tree(GUI);
            
    

Xファンクションを実行する

  1. スクリプトウィンドウで「gui_controls -d」を実行します。
  2. ダイアログの「Have Email」チェックボックスを付けると、メール編集ボックスが表示されます。
  3. 無効なメールアドレスをメール編集ボックスに入力(例えば「abc」)すると、ダイアログボックスの下部にエラーメッセージが表示され、OKボタンが無効になります。
  4. OKをクリックします。設定ツリーはスクリプトウィンドウに出力されます。