カスタムダイアログを作成する
Xファンクションはインターフェイスとしてダイアログビルダを元にカスタムダイアログを作成できます。ユーザがカスタムダイアログを使用してダイアログ内での自動更新もサポートさせる場合、あるいはOriginのメニューからダイアログを開く場合はカスタム化したダイアログと共にXファンクションを作成できます。そのご、OPXファイルを作成すると、他のユーザとも共有できます。
内容 |
ダイアログリソース DLLを作成する
リソースのみのDLLをOrigin Cからアクセス可能なVisual Studio 2008 または 2010で構築するには、このサンプルを確認してください。リソースのみのDLLを作成するセクションを実行すると2つのファイル、Welcome.dll と resource.hを作成できます。
Xファンクションを作成する
- 上記の2つのファイル、Welcome.dll と resource.h をOriginの<ユーザファイルフォルダ\OriginC\>にコピーします。Note: resource DLL ファイルと resource.h ファイルは同じフォルダ内に保存します。
- F10を押してXファンクションビルダを開きます。
- Xファンクション名として「CustomDlg」を入力し、以下のようにXファンクションの変数を設定します。
- ツリービューボタン
をクリックしてツリービューを開きます。そして「使用のコンテクスト→メニュー→自動GetNダイアログ」をカスタムに設定します。カスタムダイアログ関数編集ボックスにカスタムダイアログ関数名、例えば「OpenCustomDlg」を入力します。保存ボタンをクリックしてこのXファンクションをユーザファイルフォルダ内のデフォルトフォルダに保存し、Xファンクションビルダを閉じます。Note: XファンクションはOriginの実行フォルダまたはユーザファイルフォルダ内のXファンクションフォルダに保存される必要があります。 - 新しいヘッダファイル、CustomDlg.hを作成し、Origin Cフォルダの中に保存します。このファイルに以下のコードを入力します。カスタムダイアログを構築するコードは、Xファンクション設定をXファンクションから入手してダイアログに表示する方法と、ダイアログで設定した内容をOrigin CのTreeNode変数を通じてXファンクションにフィードバック方法を示しています。
#include <..\Originlab\DialogEx.h> #include "resource.h" // リソースのファイル名を拡張子なしで表示、ここはWelcome.dllを記入 // DLL ファイルが .h ファイルと同じフォルダ内にある事を前提としている #define STR_DLG_RESOURCE_DLL "Welcome" // リソース DLLのファイル名 #ifdef _OWIN64 #define STR_DLG_RESOURCE_DLL "Welcome_64" // 64 bit DLL #else //!_OWIN64 #define STR_DLG_RESOURCE_DLL "Welcome" // 32 bit DLL #endif// _OWIN64 class CustomDialog : public ResizeDialog { public: // 重要: IDD_MY_DIALOG はダイアログのリソースIDを示す // STR_DLG_RESOURCE_DLL はダイアログのリソースDLL ファイルを示す CustomDialog(TreeNode& trXFSettings) : ResizeDialog( IDD_MY_DIALOG, STR_DLG_RESOURCE_DLL ) { m_trXFSettings = trXFSettings; } int DoModalEx(HWND hParent = NULL) { InitMsgMap(); return ResizeDialog::DoModal(hParent); } protected: EVENTS_BEGIN ON_INIT(OnInitDialog) ON_OK(OnOK) EVENTS_END BOOL OnInitDialog() { ResizeDialog::OnInitDialog(); Edit ed; ed = GetDlgItem(IDC_EDIT1); // 初期ダイアログのコントロールをXファンクションで実行 ed.Text = ftoa(m_trXFSettings.factor.dVal); return TRUE; } BOOL OnOK() { Edit ed; ed = GetDlgItem(IDC_EDIT1); m_trXFSettings.factor.dVal = atof(ed.Text); // 入力値が0の場合、自動的に1に変更される if ( m_trXFSettings.factor.dVal == 0 ) m_trXFSettings.factor.dVal = 1; return TRUE; } private: TreeNode m_trXFSettings; };
- Originのコードビルダを開き、メニューからファイル→開く、と選択してXファンクションを選びます。開くダイアログで「ワークスペースに追加」にチェックがついている事を確認してからOKをクリックします。CustomDlg.XFCがOriginCワークスペースビューのユーザフォルダに追加され、編集ビューに関数のボディを表示します。
- //put additional include files here行の後に、次のような行を追加します。
//put additional include files here #include "CustomDlg.h"
- //put your own support static functions here と入力された行の下に、カスタムダイアログを開く関数を次のように入力します。関数名はツリービューカスタムダイアログ関数編集ボックスに入力されます。関数のインターフェイス、返してくる形式、引数リストは変更せずに以下のようにそのまま利用してください。
//put your own support static functions here bool OpenCustomDlg(TreeNode& tr, PEVENT_FUNC pfn, LPCSTR lpcszTitle, LPCSTR lpcszDescription, HWND hWndParent) { CustomDialog dlg(tr); if( dlg.DoModal(GetWindow()) ) { tr.AutoUpdate.nVal = AU_AUTO; // デフォルトは2(手動) return true; } else // ダイアログでキャンセルをクリック { return false; // メイン関数を呼び出さない } }
- Xファンクションのメイン関数( CustomDlg 関数)に次のコードを入力します。
out = in * factor; // "Col(A)*8" のようなコメントを出力列のコメントラベルに表示 DataRange drIn; drIn = in.GetSourceDataRange(); Worksheet wks; int c1, c2; drIn.GetRange(wks, c1, c2); Column col(wks, c1); if( wks && col ) { string strOutputComment; strOutputComment.Format("Col(%s)*%g", col.GetName(), factor); out.SetOutputComment(strOutputComment); }
ボタンをクリックします。
Xファンクションを使用する
- 2列を有するワークシートを作成して、それぞれの列に異なるデータを入力します。
- 列を選択してからコマンドウィンドウで「CustomDlg -d」を実行します。
- Factorに「8」を入力します。
- OK ボタンをクリックして、ダイアログを閉じます。
- 新しい列が作成され、自動更新を示す錠前(列(A)*factor)が表示されます。
- 入力が0の場合、結果は自動的に1に変換されます。
- 列Aにあるデータを変更すると出力値を入力した列の自動更新が起動し、数値を更新します。
他のユーザと作成したカスタムダイアログを共有するには
パッケージマネージャを使用すると、1つのパッケージファイルとして他のOriginユーザに渡すことができます。このパッケージをインストールするには、Originに直接パッケージファイルをドロップすれば行えます。
- 「ツール:パッケージマネージャ」を選択します。「ファイルの追加」ボタンをクリックして4つのファイル、CustomDlg.XFC, CustomDlg.h, resource.h, Welcome.dll を追加します。
- ファイル→保存、と操作して「CustomDlg.opx」として保存し、他のユーザと共有します。
