Spec_Memo_HDLVAR.txt  HDLVAR 仕様書メモ by ONnoji                 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トレースに関して                 Rev.9 2020.09.09 Spec_Memo_HDLVAR.txt  この文書は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 [名札 メイン]でトレース出力するように変更した。  以上