カスタムのダイアログを作成し、入力値をDIAdem Scriptで使用する方法

更新しました Apr 5, 2021

環境

ソフトウェア

  • DIAdem

DIAdem Scriptで解析を自動化する際に、ユーザに対して設定値の入力を要求するダイアログを使用し、そこで入力された値をVBScriptの処理で使用する方法について確認します。ダイアログは*.sudファイルで作成し、ダイアログで入力された値はグローバル変数としてDIAdem Scriptへ受け渡します。ここでは文字列、数値をダイアログにて入力し、それらをDIAdem Scriptで読み込み、メッセージボックスで表示する手順を確認します。
 
0overview.png

サンプルで実際の挙動を確認する

1. DIAdem Example Finderでサンプルを開く
DIAdemを起動し、ヘルプ>>サンプルを選択し、DIAdem Example Finderを開きます。サンプル>>スクリプトを作成する>>ユーザダイアログボックスを確認すると、「テキストと数値を入力するためのユーザダイアログボックス」というサンプルプログラムがあります。「サンプルを開始」を選択するとこのプログラムの挙動を確認できます。
 

1UserDialogBox - コピー.png


 

VBScriptとSUDファイルを確認する

1. VBScriptを確認する
前述のサンプルのVBScriptの主要部分を抜き出し、ダイアログボックスで入力した数値に対して後処理を加えると下記の様になります。

Option Explicit

' Initialize variables
Call GlobalDim("sMyText, iMyIntVal, dMyRealVal")

sMyText    = "デモのテキストです。"
iMyIntVal  = 2108
dMyRealVal = 3.141592653

If SudDlgShow("Input_1",CurrentScriptPath & "SudExample_1") = "IDOk" Then
    ' Display results of dialog box entry
     Call MsgBoxDisp("次の入力をされました。@CRLF@" & _ 
                  "sMyText:     " & vbtab & sMyText & "@CRLF@" & _ 
                  "iMyIntVal:    " & vbtab & str(iMyIntVal) & "@CRLF@" &_ 
                  "dMyRealVal:" & vbtab & str(dMyRealVal),,,,5)
Else
  MsgBox "入力がされていません。 DIAdem はスクリプトを取り消しました。"
End If


Dim x,y
x = iMyIntVal
y = x * 2
msgbox(y)


ダイアログで入力された値をスクリプトで使用するには上記のスクリプトをDIAdem Scriptにて*.vbs形式でAttachmentsのSudExample_1.sudと同じフォルダに保存し、実行する事で確認できます。

また、上記のスクリプトは下記の4段階から構成されています。
 

3script.png


2. *.sudファイルを開く
AttachmentsのSudExample_1.sudを開くと、DIAdem Dialog Editorが起動します。ここで使用しているSUDはVBScriptのSudDlgShow("Input_1",CurrentScriptPath & "SudExample_1")の部分で呼び出されているInput_1です。現在表示しているSUDの名前は下記の画像の赤枠の部分で確認できます。
 

4sud.png

設定を確認したい部分を左クリックすると右側のプロパティ、イベントの表示の部分に詳細な設定を確認できます。"Enter a text"の部分はsMyTextという変数に結び付けられている事が確認できます。
 

5sud2.png


3. ダイアログに新しい入力項目を追加する
ダイアログに新しい入力を追加するには、ダイアログとVBScript間で値の受け渡しを行うグローバル変数を追加します。グローバル変数の追加はEdit >> Variableから行う事ができます。ここではsMyTest2というバリアント型のグローバル変数を作成しました。
 

5variable.png


次にEditBoxを使用してダイアログに入力部分を作成します。また、この部分に入力された値がsMyText2に格納されるように、PropertiesのVariableをsMyText2に設定します。
 

6sud4.png

編集完了後、このSUDを別名で保存します。ここではSudExample2.sudとして保存します。

4. VBScriptを編集して新たに作成したSUDを使用する。
新たに作成したSUDを使用する場合、VBScriptを下記の様に編集し、SUDファイルと同じフォルダに保存する必要があります。

Option Explicit

' Initialize variables
Call GlobalDim("sMyText, sMyText2, iMyIntVal, dMyRealVal")

sMyText    = "デモのテキストです。"
sMyText2    = "デモのテキストです。"
iMyIntVal  = 2108
dMyRealVal = 3.141592653

If SudDlgShow("Input_1",CurrentScriptPath & "SudExample_2") = "IDOk" Then
    ' Display results of dialog box entry
     Call MsgBoxDisp("次の入力をされました。@CRLF@" & _ 
                  "sMyText:     " & vbtab & sMyText & "@CRLF@" & _ 
                  "iMyIntVal:    " & vbtab & str(iMyIntVal) & "@CRLF@" &_ 
                  "dMyRealVal:" & vbtab & str(dMyRealVal),,,,5)
Else
  MsgBox "入力がされていません。 DIAdem はスクリプトを取り消しました。"
End If

msgbox(sMyText2)


このスクリプトを実行すると新たに作成した入力部分の値がダイアログボックスを閉じた際にVBScriptに受け渡され、メッセージボックスで表示されます。

次のステップ

ダイアログボックスに未入力のテキストがある場合、再入力を促す方法


ダイアログボックスを実際に使用する際に未入力のままOKを押してしまうと、データ保存時にエラーが発生し、作業内容が失われてしまう可能性があります。ユーザの操作による予期せぬ動作を避けるにはユーザに未入力箇所の存在を伝え、再度入力を促す必要があります。このような挙動はForループ、Do Untilループを組み合わせる事で下記の様に作成できます。
 
Option Explicit
' Initialize variables
Call GlobalDim("sMyText, sMyText2, iMyIntVal, dMyRealVal")
dim ST
ST = 0

sMyText    = "デモのテキストです。"
sMyText2    = "デモのテキストです。"
iMyIntVal  = 2108
dMyRealVal = 3.141592653

Do Until ST = 1

If SudDlgShow("Input_1",CurrentScriptPath & "SudExample_2") = "IDOk" Then

if( sMyText = "" or sMyText2 = "" or iMyIntVal = Empty or dMyRealVal = Empty) then
MsgBox("未入力の箇所があります")
ST = 0
Else
    ' Display results of dialog box entry
     Call MsgBoxDisp("次の入力をされました。@CRLF@" & _ 
                  "sMyText:     " & vbtab & sMyText & "@CRLF@" & _ 
                  "iMyIntVal:    " & vbtab & str(iMyIntVal) & "@CRLF@" &_ 
                  "dMyRealVal:" & vbtab & str(dMyRealVal),,,,5)
ST = 1
End if

Else
  MsgBox "入力がされていません。 DIAdem はスクリプトを取り消しました。"
End If

Loop

Attachmentsの部分からSudExample_2.sudをダウンロードし、上記のスクリプトを*.VBS形式でSudExample_2.sudと同じフォルダに保存し、実行すると上記の動作を確認できます。