INF_Framework は ONnoji さん作成のフリーのライブラリです。
フォームに便利な機能を追加してくれます。
ここでは INF_Framework が適用されたフォームの便利機能を、
できるだけ簡単に利用できるように解説していきたいと思っています(?、頑張ります)。
ここで使用する ライブラリ は所定のサイト からダウンロードしてください。
※ INF_Framework 第3.3版 Rev.249 for 桐10 /
桐10s を使用しています。
[呼び出し元フォーム]( from ) と
[呼び出し先フォーム]( to ) の間で、変数を受け渡す機能です。
from から to へ渡した変数は、toで値が更新されて fromへ返ってきます。
しかも、toでの更新結果を利用するかどうかのフラグ( &exit )と一緒に戻ってきます( OK、キャンセル 、 適用 )。
つまり、 &exit の結果で from 側で 次の プロシージャ を実行するか決めることができます。
すべてのINF_Framework 共通 (注)
(注)モダンINF_Framework、クラシックINF_Framework、NULL INF_Framework
----------------------------------------------------------------------------------------------------------------------
1. サンプルフォーム ”V10s_クラシックINF_変数受け渡し元.wfx” を開きます( [呼び出し元フォーム]( from ) )。
1-1. コマンドボタン[年月日設定]をクリックすると、”INF_Date年月日Set.wfx” が起動します( [呼び出し先フォーム]( to ) )。
1-2. そして ”INF_Date年月日Set.wfx” の [OK]ボタンを押すと、このサンプルではデバッグ情報が表示されます。
※ デバッグ情報の &exit の値がフラグ として ”V10s_クラシックINF_変数受け渡し元.wfx”( [呼び出し元フォーム]( from ) ) へ
転送されます。
※ &exit = 2 も利用できます(解説は後述します)。
※ちなみに ”V10s_クラシックINF_変数受け渡し元.wfx”( [呼び出し元フォーム]( from ) ) の コマンドボタン[年月日設定] の属性は以下の通りです。
---------------------------------------
2. それでは イベントファイル”V10s_クラシックINF_変数受け渡し元.kex” を見てみましょう。
2-1. 名札メインで ”変数受け渡し” に使用する変数を宣言しています。
※ 以下の解説では大雑把に 赤の下線部分は [呼び出し元フォーム]( from ) 、青の下線部分は [呼び出し先フォーム]( to ) 関連と捉えてください。
4: | &mDateGetWfm = #一括パス名 + "INF_Date年月日Set.wfm" |
[呼び出し先フォーム]( to )のファイル名を代入しています。 ※ ファイル名はフルパスで記載します(ここでは #一括パス名 を利用しています)。 |
-----
2-2. コマンドボタン[年月日設定] を押すと実行されるプロシージャは次の ”手続き定義開始 cmd年月日設定Click( )” になります。
312: | ** &wfmFileName へ渡す:データ型{ 変数名リスト(コンマ区切り) } |
313: | &HDLVARmStoreParameter = "文字列{ &mString }, 整数{ &mYearNum, &mMonthNum, &mDayNum }" |
ここで登録した局所変数が[呼び出し先フォーム]( to ) へ渡されます。 &HDLVARmStoreParameter = "文字列{ &m変数名, &m変数名[ 要素数 ] }, 数値{ &m変数名, &m変数名[ 要素数 ] }" 整数{ } , 数値{ } , 文字列{ } といった具合につないでいきます。 ※これは[変数宣言]コマンドの書式から、[種別]と[初期値の指定]を除いたものと同じです。 ※なお次のように変数のデータ型間の ”,(コンマ)” は 無し で指定してもOKです。 &HDLVARmStoreParameter = "文字列{ &m変数名, &m変数名[ 要素数 ] }数値{ &m変数名, &m変数名[ 要素数 ] }" ※後述の << 変数の設定等について >> もご覧になってください。 |
-----
315: | ** &wfmFileName から受け取る:変数名リスト(コンマ区切り) |
316: | &HDLVARmReturnParameter = "&mYearNum, &mMonthNum, &mDayNum" |
ここで[呼び出し先フォーム]( to )から受け取る変数を設定します この例では[呼び出し元フォーム]( from ) から渡した際と同じ変数名、同じ順序で受けています。 ※後述の << 変数の設定等について >> もご覧になってください。 |
------
318: | ** 例:&mString = "請求書の日付" |
319: | &mString = "請求書の日付" |
320: | &wfmFileName = &mDateGetWfm |
321: | &tblFileName = #u |
&tblFileNameには[呼び出し先フォーム]( to )
の編集対象表をフルパスで記載しますが nulフォームの場合には &tblFileName = #u と未定義値を設定しておきます。 ※設定する値がない場合はすべて 未定義値 ( #u ) を指定しておきます。 |
|
322: | &procedureName = "cmd年月日設定ClickRETURN" |
[呼び出し先フォーム]( to )
から帰ってきたときに実行するプロシージャを指定(予約)します。 末尾には ( ) を記載しないようにします。 |
-----
323: | ** 引数の意味:モーダル フォーム 表 実行手続き名 ハンドル※戻り値はモーダル:#u モードレス:ハンドル番号 |
324: | 手続き実行 HDLVARprcWindowAppearVarSend( &INFmModalControl, &wfmFileName, &tblFileName, &procedureName, &hdl ) |
このコマンドで、[呼び出し先フォーム](
to ) を起動して [呼び出し先フォーム]( to ) を閉じたら 次の動作として &procedureName に予約済のプロシージャを実行します。 |
-----
☆☆☆ 処理の順序に従えば、[呼び出し先フォーム]( to ) の解説になりますが、後述とします。 ☆☆☆
-----
2-3. [呼び出し先フォーム]( to : ここでは ”INF_Date年月日Set.wfx” ) を閉じると、 &procedureName に予約済のプロシージャを実行します。
※ここでは以下の通りです (サンプルなので、どのボタンを押したかのデバッグ情報が表示される設定が記載されているだけです)。
338: | 手続き定義開始 cmd年月日設定ClickRETURN( 整数 &exit ) |
&exit には [呼び出し先フォーム]( to ) の終了状態のフラグが代入されてきます。 |
-----
344: | &debug = 1 /* 次行以下の デバッグ情報 を表示させるフラグです。&debug = 0 としておけば無効にできますね。*/ |
345: | if ( &debug ) |
ここは[呼び出し先フォーム]( to )
の終了状態がどうだったのか確認するための部分です(デバッグ用)。 実際に使用する際には不要でしょう。 |
-----
355: | if ( &exit ) /* &exit が 1(OK) または 2(適用) */ |
356: | |
357: | **[OK]または[適用]の場合の処理 |
358: | |
359: | else /* &exit が 0(キャンセル・×) */ |
360: | |
361: | **[キャンセル]または[×]の場合の処理 |
362: | |
363: | end |
見ての通りです。お好きなソースコードを記入してください。 |
------ ※ 赤の下線部分 は [呼び出し元フォーム]( from ) 、青の下線部分 は
[呼び出し先フォーム]( to ) の区別はここまでです。
-----
3. 次は [呼び出し先フォーム]( to : ”INF_Date年月日Set.wfx” ) と そのイベントファイル”INF_Date年月日Set.kex” を見てみます。
・イベントファイルでは、名札メインで変数を宣言しています。それだけです。
※ここでは[呼び出し元フォーム]( from )で設定したのと同じ変数ですね。
・フォームを定義画面で開くと [適用]ボタンが設定されていることが分かります。
※このサンプルでは画面表示のチェックが外されています。また [適用]ボタンの &exit 値は 「2」 になります。
重要) | このコマンドボタンも含めて ”変数の受け渡し” システムになります。必須ですね。 |
※ ご自分の [呼び出し先フォーム]( to ) を作成する際には、このコマンドボタンをそのままの設定で流用しましょう。
※ なおコマンドボタンの属性は次の通りです。
手続き名 ”HDLVARcmdButtonClick” は INF_Framework の管理になります(変数 &HDLVARmReferWfmHdl
も)。
以上で [呼び出し元フォーム]( from ) で
[呼び出し先フォーム]( to ) で処理する変数を指定する。 という一連の流れができあがります (^^♪ |
<< 変数の設定等について >>
-------------
○ [呼び出し元フォーム]( from ) で
[呼び出し先フォーム]( to ) に渡す変数を指定しますが、
変数に値を代入して渡すことができます。
※to に変数を渡さない場合には、未定義値にします( #u 、#未定義 )。
○ [呼び出し先フォーム]( to ) に渡す変数を指定、また同名の局所変数を設定していない場合。
** toに渡す局所変数を指定
&HDLVARmStoreParameter = "文字列{ &m文字列型, &m文字列型Dim }"
&HDLVARmStoreParameter = &HDLVARmStoreParameter + "数値{ &m数値型 }"
※変数のデータ型間の ”, (コンマ)” は省いても省かなくてもOKです。
< 解説 >
・from が、to を開く時に、局所変数を to に渡します(変数宣言・代入)。
・to に同名の局所変数が存在しない場合には、指定したデータ型で局所変数が宣言されて値が代入されます。
・to に同名の局所変数が存在する場合には、値のみが代入されます。
注意:変数のデータ型は from と、to で同じでないと代入エラーになる。※from の変数が未定義値の場合を除く。
○ [呼び出し元フォーム]( from ) に戻ってきた変数値を 異なる変数名に代入する方法。
** fromに戻る局所変数を指定
&HDLVARmReturnParameter = "&m文字列型, &m文字列型Dim, &m数値型"
< 解説 >
ここでの指定を次のようにセミコロンを使って記載すると、値を異なる変数名に代入することができます。
&HDLVARmReturnParameter = "&m文字列型B;&m文字列型, &m文字列型DimB; &m文字列型Dim"
&HDLVARmReturnParameter = &HDLVARmReturnParameter + ", &m数値型B;&m数値型"
なお変数が存在するか否か、データ型が一致するか否か、配列か否かをチェックしていませんので、正しい変数名を記述してください。
-----
下の例では、[呼び出し元フォーム]( from ) の 名札メイン での変数宣言には
[呼び出し先フォーム]( to ) から返ってきた値を代入するための別名の変数も含まれます。
&m文字列型 を渡して戻ってきたら &m文字列型B に代入。同様に &m数値型 を渡して &m数値型B に代入するためです。
赤枠で囲まれた変数は [呼び出し先フォーム]( to ) 側では 変数宣言していません。
※ from側で to から戻ってきた値を代入する変数名を変更しても、to側を変更する必要がないということになります。
[呼び出し先フォーム]( to ) 側で更新された変数の値は、後ろ側から前側の変数に代入されます(192行目)。
※ このサンプルは、ダウンロードしたファイルには含まれません。
○ 配列変数について
配列変数を指定する場合には、要素数も指定します。
&HDLVARmStoreParameter = "整数 { &mFieldIndex }"
&HDLVARmStoreParameter = &HDLVARmStoreParameter + "文字列 { &mFieldNameDim[10] }"
但し、すでに to に同名の配列変数が宣言されている場合、配列要素数を省略できる。
※データ型は同じであること。
※要素数は to で宣言されたまま変化しない 値は、最大要素数まで代入される
&HDLVARmStoreParameter = "整数 { &mFieldIndex }"
&HDLVARmStoreParameter = &HDLVARmStoreParameter + "文字列 { &mFieldNameDim }"
○ データ型について
データ型は 文字列|数値|通貨|整数|長整数|実数|日時|時間 です。これ以外のキーワードは無効です。
補足1) : to を呼び出すプロシージャについて。
手続き実行 HDLVARprcWindowAppearVarSend( &INFmModalControl, &wfmFileName, &tblFileName, &procedureName, &hdl )
&INFmModalControl | :[呼び出し先フォーム]( to ) をモーダルフォームで開くかどうか |
&wfmFileName | :[呼び出し先フォーム]( to ) のファイル名(フルパス) |
&tblFileName | :[呼び出し先フォーム]( to ) の編集対象表名(フルパス) |
&procedureName | :[呼び出し先フォーム]( to ) から帰ってきて実行する 手続き名 |
&hdl | :[呼び出し先フォーム]( to ) からの戻り値は モーダル:#u , モードレス:ハンドル番号(桐が自動で割り当てます) |
補足2) : to から戻ってきたときに実行するプロシージャについて。
一般手続き名 ※一般手続き名の後ろの括弧"( )"は省略します。
<記述例>
&procedureName = "cmdObjectNameClickRETURN"
以下の関係ように to を開く一般手続き名には接尾辞"RETURN"を付けると対応関係がハッキリして便利です。
┌手続き定義開始 cmdObjectNameClick( )
│
│ :
│ 省略
│ :
│ &procedureName = "cmdObjectNameClickRETURN"
│ ** to を開く一般手続き
│ 手続き実行 HDLVARprcWindowAppearVarSend( &modalControl, &wfmFileName,
&tblFileName, &procedureName, &hdl )
│
└手続き定義終了
┌手続き定義開始 cmdObjectNameClickRETURN( 整数 &exit )
│
│ if ( &exit ) /* &exit が 1(OK) または 2(適用) */
│
│ *[OK]または[適用]の場合の処理
│
│ else /* &exit が 0(キャンセル・×) */
│
│ *[キャンセル]または[×]の場合の処理
│
│ end
│
└手続き定義終了
補足3) :
ダウンロードしたファイルの中に
サンプル ”V10s_カレンダーの変数受け渡し.wfx” , ”V10s_カレンダーの変数受け渡し.kex” があります( from )。
こちらの設定も参考までに掲載しておきます。
※ to は ”INF_DatePicker.wfx” , ”INF_DatePicker.kex”になりますが、そちらは ”イロイロ と イロイロ” なので (^^♪ 関心のある方は頑張って見てください。
○ サンプルフォーム ”V10s_カレンダーの受け渡し.wfx” はつぎのようになっています。
○ イベントファイル ”V10s_カレンダーの受け渡し.kex” の設定は次の通りです(該当部分を抜粋しただけです)。
1: | 名札 メイン |
2: | 変数宣言 局所,文字列{ &mYearMonthDayGetWfm } |
3: | &mYearMonthDayGetWfm = #一括パス名 + "INF_DatePicker.wfm" |
4: | |
5: | *--- begin INF_DatePicker.wfm から受け取れる変数名 ---* |
6: | 変数宣言 局所,文字列{ &mDateString } |
7: | 変数宣言 局所,日時 { &mDateTime } |
8: | 変数宣言 局所,整数 { &mYearNum, &mMonthNum, &mDayNum } |
9: | *--- end INF_DatePicker.wfm から受け取れる変数名 ---* |
10: | |
11: | 変数宣言 局所,文字列{ &mTestDateString } |
12: | 変数宣言 局所,日時 { &mTestDateTime } |
13: | 変数宣言 局所,整数 { &mTestYearNum, &mTestMonthNum, &mTestDayNum } |
214: | 手続き定義開始 cmdカレンダーの変数受け渡しClick( ) |
215: | 変数宣言 自動,文字列{ &icon, &title = "cmdカレンダーの変数受け渡しClick( )", &msg } |
216: | 変数宣言 自動,文字列{ &wfmFileName, &tblFileName, &procedureName } |
217: | 変数宣言 自動,文字列{ ¥ = #jis( #hex("5C") ) } |
218: | 変数宣言 自動,整数 { &hdl } |
219: | |
220: | &wfmFileName = &mYearMonthDayGetWfm |
221: | if ( #ファイルサイズ( &wfmFileName ) > 0 ) |
222: | |
223: | ** &wfmFileName へ渡す:データ型{ 変数名リスト(コンマ区切り) } |
224: | ** 背景色を渡しているが、不要ならば未定義値でもOK 例: &HDLVARmStoreParameter = #u |
225: | ** ↓こちら |
226: | &HDLVARmStoreParameter = #u |
227: | |
228: | ** &wfmFileName から受け取る:変数名リスト(コンマ区切り) |
229: | ** INF_DatePicker.wfm から受け取れる変数名のリストは |
230: | ** ↓こちら 文字列 日時 整数 整数 整数 |
231: | ** &HDLVARmReturnParameter = "&mDateString, &mDateTime, &mYearNum, &mMonthNum, &mDayNum" ← 受け取れる変数名のリスト |
232: | ** |
233: | ** 変数名が異なる場合には、&from変数名;&to変数名 のようにセミコロンで双方の変数名を区切って指定する |
234: | ** ↓こちら &from変数名;&to変数名 &from変数名;&to変数名 &from変数名;&to変数名 &from変数名;&to変数名 &from変数名;&to変数名 |
235: | &HDLVARmReturnParameter = "&mTestDateString;&mDateString, &mTestDateTime;&mDateTime, &mTestYearNum;&mYearNum, &mTestMonthNum;&mMonthNum, &mTestDayNum;&mDayNum" |
236: | ** 変数名が同名の場合には |
237: | ** ↓こちら 文字列 日時 整数 整数 整数 |
238: | &HDLVARmReturnParameter = &HDLVARmReturnParameter + ",&mDateString, &mDateTime, &mYearNum, &mMonthNum, &mDayNum" |
239: | &wfmFileName = &wfmFileName |
240: | &tblFileName = #u |
241: | &procedureName = "cmdカレンダーの変数受け渡しClickRETURN" |
242: | ** 引数の意味:モーダル フォーム 表 実行手続き名 ハンドル※戻り値はモーダル:#u モードレス:ハンドル番号 |
243: | 手続き実行 HDLVARprcWindowAppearVarSend( &INFmModalControl, &wfmFileName, &tblFileName, &procedureName, &hdl ) |
244: | |
245: | else |
246: | |
247: | &msg = "ファイルが見つかりません" |
248: | &msg = &msg + "\n" + #複写( "-", 50 ) |
249: | &msg = &msg + "\n\nフォルダ:" + #文字置換( #ファイル名( &wfmFileName, 5 ), ¥, ¥ + ¥ ) |
250: | &msg = &msg + "\n\nファイル:" + #ファイル名( &wfmFileName, 3 ) |
251: | &icon = "e" |
252: | 手続き実行 INFprcMsgPause( &icon, &title, &msg ) |
253: | end |
254: | |
255: | 手続き定義終了 |
256: | |
257: | 手続き定義開始 cmdカレンダーの変数受け渡しClickRETURN( 整数 &exit ) |
258: | 変数宣言 自動,文字列{ &icon, &title = "cmdカレンダーの変数受け渡しClickRETURN( )", &msg } |
259: | 変数宣言 自動,文字列{ &wfmFileName, ¥ = #jis( #hex("5C") ) } |
260: | 変数宣言 自動,整数 { &debug } |
261: | |
262: | &wfmFileName = &mYearMonthDayGetWfm |
263: | &debug = 1 |
264: | if ( &debug ) |
265: | &msg = "デバッグ情報" |
266: | &msg = &msg + "\n\nフォルダ:" + #文字置換( #ファイル名( &wfmFileName, 5 ), ¥, ¥ + ¥ ) |
267: | &msg = &msg + "\n\nファイル:" + #ファイル名( &wfmFileName, 3 ) |
268: | &msg = &msg + "\n\n※" + #cond( &exit = 1, "[OK]", &exit = 2, "[適用]", 1, "[キャンセル]/[×]" ) + "ボタンを実行しました" |
269: | &msg = &msg + "\n\n&exit = " + #str( &exit ) |
270: | &icon = "i" |
271: | 手続き実行 INFprcMsgPause( &icon, &title, &msg ) /* ※ ここでは メッセージボックスを INF_Framework に用意されている手続きで表示しています。 */ |
272: | end |
273: | |
274: | if ( &exit ) /* &exit が 1(OK) または 2(適用) */ |
275: | |
276: | **[OK]または[適用]の場合の処理 |
277: | **&HDLVARmReturnParameter = "&mDateString, &mDateTime, &mYearNum, &mMonthNum, &mDayNum" |
278: | |
279: | &msg = "[OK]" |
280: | &msg = &msg + "\n\n** INF_DatePicker.wfm から受け取れる変数名のリストは" |
281: | &msg = &msg + "\n** ↓こちら 文字列 日時 整数 整数 整数" |
282: | &msg = &msg + "\n** &HDLVARmReturnParameter = ""&mDateString, &mDateTime, &mYearNum, &mMonthNum, &mDayNum"" ← 受け取れる変数名のリスト" |
283: | &msg = &msg + "\n\n** 変数名が異なる場合には、&from変数名;&to変数名 のようにセミコロンで双方の変数名を区切って指定する" |
284: | &msg = &msg + "\n** ↓こちら &from変数名;&to変数名 &from変数名;&to変数名 &from変数名;&to変数名 &from変数名;&to変数名 &from変数名;&to変数名" |
285: | &msg = &msg + "\n&HDLVARmReturnParameter = ""&mTestDateString;&mDateString, &mTestDateTime;&mDateTime, &mTestYearNum;&mYearNum, &mTestMonthNum;&mMonthNum, &mTestDayNum;&mDayNum""" |
286: | &msg = &msg + "\n\n** 変数名が同名の場合には" |
287: | &msg = &msg + "\n** ↓こちら 文字列 日時 整数 整数 整数" |
288: | &msg = &msg + "\n&HDLVARmReturnParameter = &HDLVARmReturnParameter + "", &mDateString, &mDateTime, &mYearNum, &mMonthNum, &mDayNum""" |
289: | &msg = &msg + "\n\n&mTestDateString = " + &mTestDateString |
290: | &msg = &msg + "\n\n&mTestDateTime = " + #日時文字列( &mTestDateTime, 11, 3, 2 ) |
291: | &msg = &msg + "\n\n&mTestYearNum = " + #str( &mTestYearNum ) |
292: | &msg = &msg + "\n\n&mTestMonthNum = " + #str( &mTestMonthNum ) |
293: | &msg = &msg + "\n\n&mTestDayNum = " + #str( &mTestDayNum ) |
294: | &msg = &msg + "\n\n" |
295: | &msg = &msg + "\n\n&mDateString = " + &mDateString |
296: | &msg = &msg + "\n\n&mDateTime = " + #日時文字列( &mDateTime, 11, 3, 2 ) |
297: | &msg = &msg + "\n\n&mYearNum = " + #str( &mYearNum ) |
298: | &msg = &msg + "\n\n&mMonthNum = " + #str( &mMonthNum ) |
299: | &msg = &msg + "\n\n&mDayNum = " + #str( &mDayNum ) |
300: | &icon = "i" |
301: | 手続き実行 INFprcMsgPause( &icon, &title, &msg ) /* ※ ここでは メッセージボックスを INF_Framework に用意されている手続きで表示しています。 */ |
302: | |
303: | else /* &exit が 0(キャンセル・×) */ |
304: | |
305: | **[キャンセル]または[×]の場合の処理 |
306: | |
307: | end |
308: | |
309: | 手続き定義終了 |
HDLVAR仕様書メモ by ONnoji ※同梱されている ”HDLVAR仕様メモ.txt ” の内容です。
Rev.0 2009.12.18
Rev.1 2010.01.07
Rev.2 2010.01.08
Rev.3 2010.01.12
Rev.4 2010.01.19
Rev.5 2013.07.29 ※INF Framework Rev.114 仕様変更|<APPENDIX>名札メインの変遷
Rev.6 2013.07.30 トレースに関して
Rev.7 2013.07.31 変数:&HDLVARmStoreParameter|【特記事項】
Rev.8 2013.08.01 ※INF Framework Rev.116トレースに関して
この文書はINF_Framework(以降 INF_FW と表記する)の新機能:HDLVAR に関する仕様メモです。
■HDLVARとは(概要)
INF_FW が組み込まれた[呼び出し元フォーム](以降 from と表記する)と
INF_FW が組み込まれた[呼び出し先フォーム](以降 to と表記する)の間で、変数を受け渡す機能です。
HDLVAR によって以下の機能が追加されます。
<オープン from → to >
・from が、to を開く時に、局所変数を to に渡します(変数宣言・代入)。
・to に同名の局所変数が存在しない場合には、指定したデータ型で局所変数が宣言されて値が代入されます。
・to に同名の局所変数が存在する場合には、値のみが代入されます。
注意:変数のデータ型は from と、to で同じでないと代入エラーになる。※from の変数が未定義値の場合を除く
<クローズ to → from >
・[OK]ボタンを実行して to を閉じる時、from で指定した to の変数の値を代入します(代入)。
・[OK]ボタンを実行して to を閉じる時、from で指定した一般手続きの実行を予約します(手続き実行予約)。
・[適用]ボタンを実行した場合には、to は閉じられませんが、[OK]ボタンを実行した時と同じ動作をします。
・[キャンセル]・[×]ボタンを実行した場合には、to を閉じるだけで何もしません。
<クローズ to → from OKのみのダイアログボックスとして動作>
・オプション変数:&HDLVARmOkOnly = 1 の時、[×][Esc][閉じる]等は、[OK]ボタンを実行した時と同じ動作をします。
<リターン実行 from >
・from は[タイマー2]イベントによって0.1秒後に、指定した一般手続きを実行します(手続き実行)。
・from で実行する一般手続きには、整数型の引数が必須です。
・一般手続きの引数には、整数の0、1、2が引き渡されます(to のクローズモードの判別)。
・整数の0は[キャンセル]、1は[OK]、2は[適用]のコマンドボタンに対応します。
・[×][Esc][閉じる]等は、未定義値が引き渡されます。※INF Framework Rev.114 仕様変更
・オプション変数:&HDLVARmOkOnly = 1 の時、[×][Esc][閉じる]等は、-1が引き渡されます。※INF Framework
Rev.114 仕様変更
■HDLVAR で追加された局所変数
** オプション 変数宣言 局所,整数 { &HDLVARmOkOnly = 1 }
/* OKのみのダイアログボックスとして動作、[×][Esc][閉じる]等が[OK]と同等になる。但し exit の値は -1 */
変数宣言 局所,文字列{ \
&HDLVARmStoreParameter, &HDLVARmReturnParameter, &HDLVARmProcedureParameter, \
&HDLVARmDefineVariableList, &HDLVARmReturnVariableList,
&HDLVARmSendProcedureName, \
&HDLVARmReferWfmFileName, &HDLVARmVarType, \
&HDLVARmVarMacro, &HDLVARmVarStoreMacro }
変数宣言 局所,整数 { \
&HDLVARmReferWfmHdl, &HDLVARmVarCount, &HDLVARmVarDim, &HDLVARmExitButtonUse }
<ユーザが値を設定する変数> ※指定しない場合は未定義値
&HDLVARmStoreParameter … from で変数名とデータ型を指定します
&HDLVARmReturnParameter … from で変数名を指定します
&HDLVARmProcedureParameter … from で手続き名を指定します
<HDLVAR が値を自動取得する変数> ※値は to で自動取得されます
&HDLVARmReferWfmHdl … from の ハンドル番号
&HDLVARmReferWfmFileName … from の フォームファイル名 ※フルパス
&HDLVARmDefineVariableList … from の &HDLVARmStoreParameter のコピー
&HDLVARmReturnVariableList … from の &HDLVARmReturnParameter のコピー
&HDLVARmSendProcedureName … from の &HDLVARmProcedureParameterのコピー
<HDLVAR の作業用変数> ※値は to で自動取得されます
&HDLVARmVarType … 変数のデータ型
&HDLVARmVarDim … 変数の配列要素数
&HDLVARmVarMacro … コマンド
&HDLVARmVarStoreMacro … コマンド
&HDLVARmVarCount … カウンター
&HDLVARmExitButtonUse … コマンドボタンのフラグ
■ユーザが値を設定する変数・引数の書式
● 変数:&HDLVARmStoreParameter
from の cmdObjectNameClick( )で変数名とデータ型を指定します。※to に変数を渡さない場合には、未定義値にします。
※from が、to を開く時に、from の局所変数を to に渡します(変数宣言・代入)。
※to に同名の局所変数が存在しない場合には、指定したデータ型で局所変数が宣言されて値が代入されます。
※to に同名の局所変数が存在する場合には、値のみが代入されます。
注意:変数のデータ型は from と、to で同じでないと代入エラーになる。※from の変数が未定義値の場合を除く
【書式】
データ型{ 変数名,変数名,… }データ型{ 変数名,変数名,… }
または
データ型{ 変数名,変数名,… },データ型{ 変数名,変数名,… }
※データ型は 文字列|数値|通貨|整数|長整数|実数|日時|時間 です。これ以外のキーワードは無効です。
※変数名はコンマ(,)で区切ります。コンマは全角半角のどちらでもOKです。
※書式は、[変数宣言]コマンドのパラメータからスコープ([種別])を除いたものと同じです。
<記述例1> ※1行で代入する場合
&HDLVARmStoreParameter = "整数 { &mIndex }文字列 { &mFieldName }"
<記述例2> ※複数行で代入する場合
&HDLVARmStoreParameter = "整数 { &mFieldIndex }"
&HDLVARmStoreParameter = &HDLVARmStoreParameter + "文字列 { &mFieldName }"
【特記事項】
配列変数を指定する場合には、要素数も指定する。
<記述例3>
&HDLVARmStoreParameter = "整数 { &mFieldIndex }"
&HDLVARmStoreParameter = &HDLVARmStoreParameter + "文字列 { &mFieldNameDim[10] }"
但し、すでに to に同名の配列変数が宣言されている場合、配列要素数を省略できる。
※データ型は同じであること。
※要素数は to で宣言されたまま変化しない 値は、最大要素数まで代入される
&HDLVARmStoreParameter = "整数 { &mFieldIndex }"
&HDLVARmStoreParameter = &HDLVARmStoreParameter + "文字列 { &mFieldNameDim }"
● 変数:&HDLVARmReturnParameter
from の cmdObjectNameClick( )で変数名を指定します。※to の変数値を取得しない場合には、未定義値にします。
※[OK]ボタンを実行して to を閉じる時、&HDLVARmReturnParameter で指定した to の局所変数の値が from に代入されます。
※[適用]ボタンを実行した場合には、to は閉じられませんが、[OK]ボタンを実行した時と同じ動作をします。
※[キャンセル]・[×]ボタンを実行して to を閉じた場合には、何もしません。
※to のオプション変数:&HDLVARmOkOnly = 1 の時、[×][Esc][閉じる]等は、[OK]ボタンを実行した時と同じ動作をします。※INF
Framework Rev.114 仕様変更
【書式】
変数名,変数名,…
※変数名はコンマ(,)で区切ります。コンマは全角半角のどちらでもOKです。
<記述例>
&HDLVARmReturnParameter = "&mFieldIndex, &mFieldName"
【特記事項】
受け取る変数名が異なる場合、セミコロン(;)で区切ります。セミコロンは全角半角のどちらでもOKです。
<記述例>
&HDLVARmReturnParameter = "&mFieldIndexA;&mFieldIndexB,
&mFieldNameC;&mFieldNameD"
● 引数:&procedureName( &HDLVARmProcedureParameter )
from の cmdObjectNameClick( )で一般手続き名を指定します。※from で一般手続きを実行しない場合には、未定義値にします。
※引数:&procedureName の値は、HDLVARprcWindowAppearVarSend(
)で、&HDLVARmProcedureParameterに代入されます。
※[OK]ボタンを実行して to を閉じた時、from は[タイマー2]イベントによって0.1秒後に、指定した手続きを実行します。
※[適用]ボタンを実行した場合には、to は閉じられませんが、[OK]ボタンを実行した時と同じ動作をします。
※[キャンセル]・[×]ボタンを実行して to を閉じた場合には、何もしません。
※from で実行する一般手続きには、整数型の引数が必須です。
※一般手続きの引数には、整数の0、1、2が引き渡されます(to のクローズモードの識別)。
※整数の0は[キャンセル]、1は[OK]、2は[適用]のコマンドボタンに対応します。
※[×][Esc][閉じる]等は、未定義値が引き渡されます。※INF Framework Rev.114 仕様変更
※to のオプション変数:&HDLVARmOkOnly = 1 の時、[×][Esc][閉じる]等は、-1が引き渡されます。※INF Framework
Rev.114 仕様変更
【書式】
一般手続き名 ※一般手続き名の後ろの括弧"( )"は省略します。
<記述例>
&procedureName = "cmdObjectNameClickRETURN"
以下の関係ように to を開く一般手続き名には接尾辞"RETURN"を付けると対応関係がハッキリして便利です。
┌手続き定義開始 cmdObjectNameClick( )
│
│ :
│ 省略
│ :
│ &procedureName = "cmdObjectNameClickRETURN"
│ ** to を開く一般手続き
│ 手続き実行 HDLVARprcWindowAppearVarSend( &modalControl, &wfmFileName,
&tblFileName, &procedureName, &hdl )
│
└手続き定義終了
┌手続き定義開始 cmdObjectNameClickRETURN( 整数 &exit )
│
│ if ( &exit ) /* &exit が 1(OK) または 2(適用) */
│
│ *[OK]または[適用]の場合の処理
│
│ else /* &exit が 0(キャンセル・×) */
│
│ *[キャンセル]または[×]の場合の処理
│
│ end
│
└手続き定義終了
■to を開く一般手続き:HDLVARprcWindowAppearVarSend( )
【書式】
手続き実行 HDLVARprcWindowAppearVarSend( &modalControl, &wfmFileName, &tblFileName,
&procedureName, &hdl )
整数 &modalControl … 0:通常のウィンドウ 1:モーダルのウィンドウ
文字列 &wfmFileName … フルパスのフォームファイル名( .wfm )
文字列 &tblFileName … フルパスの表ファイル名( .tbl )
文字列 &procedureName … to を閉じた時、from の[タイマー2]イベントで実行する手続き名
整数 &hdl … 通常のウィンドウの場合、HDLLNCprcWindowAppear( )のハンドル番号が返ります
※引数:&procedureName の値は、HDLVARprcWindowAppearVarSend(
)で、&HDLVARmProcedureParameterに代入されます。
※&hdl は[参照渡し]なのでリテラルは不可、必ず整数型の変数にしてください。
note:
HDLVARprcWindowAppearVarSend( ) は HDLVARprcWindowAppearVarStringDimSend( )
のラッパーです。
つまり、HDLVARprcWindowAppearVarSend( ) は HDLVARprcWindowAppearVarStringDimSend( )
を呼び出しています。
<記述例>
手続き定義開始 cmdObjectNameClick( )
変数宣言 自動,文字列{ &icon, &title = "cmdObjectNameClick( )", &msg }
変数宣言 自動,文字列{ &wfmFileName, &tblFileName, &procedureName }
変数宣言 自動,整数 { &hdl, &modalControl = 1 }
メソッド呼び出し @フォーム.更新モード設定( 0 )
** to に渡す局所変数を指定します
&HDLVARmStoreParameter = "整数 { &mFieldIndex }"
&HDLVARmStoreParameter = &HDLVARmStoreParameter + "文字列 { &mFieldName }"
** from に返す局所変数を指定します
&HDLVARmReturnParameter = "&mFieldIndex, &mFieldName"
** to を開くモードを指定します ※0:通常のウィンドウ 1:モーダルのウィンドウ
&modalControl = #cond( 1 + #配列要素数( "INFmModalControl" ), #変数(
"INFmModalControl" ), 1, 1 )
** to のフォームファイル名( .wfm )と表ファイル名( .tbl )を指定します
&wfmFileName = #一括パス名 + "FileName.wfm"
&tblFileName = #一括パス名 + "FileName.tbl" /* nullフォームの場合には未定義値 */
** to を閉じた時、from の[タイマー2]イベントで実行する一般手続き名を指定します
&procedureName = "cmdObjectNameClickRETURN"
手続き実行 HDLVARprcWindowAppearVarSend( &modalControl, &wfmFileName, &tblFileName,
&procedureName, &hdl )
手続き定義終了
※この例では、&modalControl の値はINF_FWの局所変数/整数:&INFmModalControl を参照しています。
※通常のウィンドウを指定した場合は、INF_FWのランチャー機能(HDLLNCprcWindowAppear)が実行されます。
※モーダルのウィンドウを指定した場合には、[フォーム呼び出し]コマンドが実行されます。
※to のフォームファイルが見つからない場合には、メッセージボックスを表示します。
■to を閉じた時、from の[タイマー2]イベントで実行する一般手続き
from で実行する一般手続きには、整数型の引数が必須です。
一般手続きの引数には、整数の0、1、2が引き渡されます(to のクローズモードの判別)。
整数の0は[キャンセル]・[×]、1は[OK]、2は[適用]のコマンドボタンに対応します。
<記述例>
手続き定義開始 cmdObjectNameClickRETURN( 整数 &exit )
変数宣言 自動,文字列{ &icon, &title = "cmdObjectNameClickRETURN( )", &msg }
if ( #変数( "mOnReturnDebug" ) )
&msg = "デバッグ情報"
&msg = &msg + "\n\n※" + #cond( &exit = 1, "[OK]", &exit = 2, "[適用]", 1,
"[キャンセル]/[×]" ) + "ボタンを実行しました"
&msg = &msg + "\n\n&exit = " + #str( &exit )
&icon = "i"
手続き実行 INFprcMsgPause( &icon, &title, &msg )
end
if ( &exit ) /* &exit が 1(OK) または 2(適用) */
*[OK]または[適用]の場合の処理
else /* &exit が 0(キャンセル・×) */
*[キャンセル]または[×]の場合の処理
end
手続き定義終了
■組み込み変数:&選択ファイル名について
to のフォームが開いた時、to のINF_FW[名札 メイン]で
from のフォームのハンドル番号とfrom のフォームファイル名を照合します。
この照合作業には、組み込み変数:&選択ファイル名を使用します。
・from の代入のプロセス
from の HDLVARprcWindowAppearVarSend( )で、組み込み変数:&選択ファイル名は、次のように加工されます。
&restoreString = &選択ファイル名 /* &選択ファイル名 のバックアップ */
&選択ファイル名 = &INFmMyWfmPath + &INFmMyWfmName + ".wfm"
&選択ファイル名 = #str( &hwindow, 2 ) + &選択ファイル名 + &pipe + &restoreString /*
参照する組み込み変数 */
&compareString = &選択ファイル名
※&pipe は "|"記号です。
・to の照合のプロセス
to の INF_FW[名札 メイン]から呼び出される HDLVARprcReferWfmHdlGet( )→HDLVARprcWfmHdlCompare(
)で、
from のフォームのハンドル番号とfrom のフォームファイル名を照合します。
&found = 0
ウィンドウ情報取得 &hdl, フォーム名 = &getWfmFileName
if ( #lc2( &targetWfmFileName ) = #lc2( &getWfmFileName ) )
&found = &hdl
end
照合に成功した場合には、&HDLVARmReferWfmHdl, &HDLVARmReferWfmFileName に値が代入されます。
&HDLVARmReferWfmHdl ← from のフォームのハンドル番号
&HDLVARmReferWfmFileName ← from のフォームファイル名
・to による組み込み変数:&選択ファイル名の値の復元(復元処理その1)
組み込み変数:&選択ファイル名には、ハンドル番号とフォームファイル名が挿入されているので、
to の INF_FW[名札 メイン]から呼び出される HDLVARprcReferWfmHdlGet( )で、
組み込み変数:&選択ファイル名を、次のように復元します。
&string = &選択ファイル名
&at = #文字位置( &string, &pipe )
&選択ファイル名 = #sstr( &string, &at + 1 )
※&pipe は "|"記号です。
・from による組み込み変数:&選択ファイル名の値の復元(復元処理その2)
from の HDLVARprcWindowAppearVarSend( )で、to を開いた後、
to に HDLVAR が組み込まれていない場合には、組み込み変数:&選択ファイル名の値が復元されません。
この場合には、from の HDLVARprcWindowAppearVarSend( )で、組み込み変数:&選択ファイル名を、次のように復元します。
if ( &選択ファイル名 = &compareString )
&選択ファイル名 = &restoreString /* &選択ファイル名 の復元 */
end
■INFcmdCommon 必須のオブジェクト(コマンドボタン)
to で[キャンセル]、[OK]、[適用]のコマンドボタンを実行するためには、フォームのワークスペースに INFcmdCommon が必要です。
コマンドボタン:INFcmdCommon は作成するだけでOKです。
■ to に用意するコマンドボタン
to に配置する[キャンセル]、[OK]、[適用]のコマンドボタンは次のように設定します。
いずれのボタンもよく似ていて、機能名3の機能パラメータリストの一般手続き:HDLVARcmdButtonClick の引数だけが異なります。
●[キャンセル]ボタン
機能名 機能パラメータリスト
[1]実行条件 ( &HDLVARmReferWfmHdl <> 0 )
[2]表示
[3]手続き実行 HDLVARcmdButtonClick, 0
[4]なし
●[OK]ボタン
機能名 機能パラメータリスト
[1]実行条件 ( &HDLVARmReferWfmHdl <> 0 )
[2]表示
[3]手続き実行 HDLVARcmdButtonClick, 1
[4]なし
●[適用]ボタン
機能名 機能パラメータリスト
[1]実行条件 ( &HDLVARmReferWfmHdl <> 0 )
[2]表示
[3]手続き実行 HDLVARcmdButtonClick, 2
[4]なし
<重要>
コマンドボタンで一般手続き:HDLVARcmdButtonClick を実行しないで、
任意の一般手続きから実行することも可能です。
(例)
手続き実行 HDLVARcmdButtonClick( 1 )
手続き実行 HDLVARcmdButtonClick( &整数 )
■トレースに関して
[名札 メイン]から呼ぶ出す手続きでは
・HDLVARprcReferWfmHdlGet( &HDLVARmReferWfmFileName, &HDLVARmReferWfmHdl )
・HDLVARprcParameterGet( )
・HDLVARprcVarParameterReform( &HDLVARmDefineVariableList )
・HDLVARprcMacroVarRun( &HDLVARmReferWfmHdl, &HDLVARmDefineVariableList,
&HDLVARmVarCount, &HDLVARmVarType, &HDLVARmVarMacro, &HDLVARmVarStoreMacro,
&HDLVARmVarDim )
・HDLVARprcMacroStoreRun( &HDLVARmVarStoreMacro, &HDLVARmVarDim )
次の理由からトレースしない。
・ハンドル番号が確定していない
・パラメータに関する情報が多すぎる( 特に代入する変数が多い時 )
** Rev.116 2013.08.01
デバッグし辛いので、
HDLVARprcReferWfmHdlGet, HDLVARprcParameterGet, HDLVARprcWfmHdlCompare,
HDLVARprcVarParameterReform, HDLVARprcMacroVarRun, HDLVARprcMacroStoreRun
[名札 メイン]でトレース出力するように変更した。