Spec_Memo_HDLLNC.txt  HDLLNC 仕様書メモ by ONnoji                  Rev.0 2019.09.21 INF_Framework のランチャーに関するメモ                  Rev.1 2020.09.08 Spec_Memo_HDLLNC.txt  この文書はINF_Framework(以降 INF_FW と表記する)の機能:HDLLNC に関する仕様メモです。  ■HDLLNC とは(概要)  機能名:HDLLNC( ハンドルランチ )は、ランチャー(ローンチャー)の意味です。  機能:HDLLNC は、ランチャー(ローンチャー)を実行するユーティリティです。  ■引数について  ランチャーの基本形は次の通り。  手続き実行 HDLLNCprcWindowAppear( &wfm, &tbl, &hdl, &openStatus )  引数の意味は変数名から容易に想像できると思います。  すなわち、  ・&wfm     … フォームファイル名 ※フルパスで指定  ・&tbl     … 表ファイル名    ※フルパスで指定  ・&hdl  … &hdl には成功時にハンドル番号が、失敗時にはゼロ(0)が代入されます  ・&openStatus … &openStatus には、新規にウィンドウを開いた時にイチ(1)、それ以外にはゼロ(0)が代入されます  引数の &hdl, &openStatus は単なる戻り値なので分かりやすいのですが、  &wfm と &tbl の両方を指定した場合はどうなるのだろうか?という疑問が生じることでしょう。  &wfm と &tbl の組み合わせは、以下のように4通りになります。     &wfm &tbl  ○:ファイル名あり ×:未定義値   1. ○  ×   2. ○  ○   3. ×  ○   4. ×  ×  この組み合わせに対するランチャーの挙動は以下のようになります。     &wfm &tbl 挙動   1. ○  ×  フォームをローンチ(ランチ)   2. ○  ○  フォームをローンチ(ランチ)   3. ×  ○  表をローンチ(ランチ)   4. ×  ×  無効なのでヘルプを表示する  この組み合わせの中で判り難いと思われものは 2.の組み合わせですが、     &wfm &tbl 挙動   2. ○  ○  フォームをローンチ(ランチ)  フォーム:&wfmと、表:&tblの両方を指定した場合には、ランチャーはフォームをローンチ(ランチ)します。  実は、この場合の表:&tblはフォームの編集対象表の指定になります。  ■フォームの編集対象表の指定ついて  編集対象表を伴っているフォームをローンチ(ランチ)する場合、  時として編集対象表の表がすでに開いていることがあります。  その場合には、桐からエラーメッセージ[KU0192 ○○.tbl 表 はすでに使用されています]が表示されます。  この時に、表:&tblにフォームの編集対象表を指定しておくと、桐に代ってランチャーが次のどちらかのメッセージを表示します。   【phase1A 表のウィンドウが存在する場合】   ターゲットのフォームの編集対象表とする表がすでに開いています     :   ターゲットのフォームは開かれませんでした   【phase2C 表のウィンドウが存在しない場合】   ターゲットのフォームを開く以前に   編集対象表とする表がイベント処理で使用されています     :   ターゲットのフォームは開かれませんでした  おそらくランチャーのメッセージの方が、[KU0192 ○○.tbl 表 はすでに使用されています]よりも意味が理解しやすいことでしょう。  なお、表のウィンドウが存在する場合には、ランチャーは自動的に表のウィンドウをフォーカスします。  以上の理由から、編集対象表を伴うフォーム:&wfmを指定する場合には、表:&tblにフォームの編集対象表名を指定することを推奨します。  ■オプション(検索対象から除外する)  ↑前の説明のように、フォーム:&wfmと表:&tblの両方を指定した場合には、フォームの編集対象表名も検索対象になります。  しかし、フォームの編集対象表名を検索対象にしたくない場合もあります。  それは、[フォームの属性]→[許可作業]→[多重化]が ON の場合です。  フォームの編集対象表の多重化が許可されている場合には、※もちろん、表:&tblを未定義値にすればOKなのですが…(^^ゞ  次のようにすれば、表:&tblにファイル名を指定したままで検索対象から除外出来ます。  (例)  名札 メイン   :  変数宣言 局所,整数{ &LNCmExact } /* ON:1 OFF:0 または未定義値 */   :  * ┌手続き定義開始 prcProcedureName( ) │ │  : │ &LNCmExact = 1 /* 表:&tblを検索対象から除外します */ │ 手続き実行 HDLLNCprcWindowAppear( &wfm, &tbl, &hdl, &openStatus ) │  : │ └手続き定義終了  ■[コマンドボタンの機能名:開く]と[ランチャー]の違い  <NULLフォームを開く場合>  NULLフォームをコマンドボタンで開くと、コマンドボタンを実行する度に新規にフォームが開いていきます。  この時、NULLフォームが複数開かれていてもウィンドウが重なって表示されるために気が付かないことが多いです。  しかし、ランチャーでNULLフォームを開くと、NULLフォームが複数開かれることはありません。  NULLフォームがすでに開いていた場合には、ウィンドウをフォーカスするだけです。  <オーバーラップ形式のフォームの場合>  オーバーラップ形式のフォームでコマンドボタンで表を開くと表ウィンドウが開かれますが、  その表ウィンドウはオーバーラップ形式のフォームに隠されて見えません。  一方、ランチャーで表ウィンドウを開こうとすると、  次のメッセージが表示されて表ウィンドウはローンチ(ランチ)されません。   【phase3B 表のウィンドウが存在しない場合】   オーバーラップ形式のフォームなので表ウィンドウは表示できません。     :   【phase2A 表のウィンドウが存在する場合】   表がすでに開いています     :   オーバーラップ形式のフォームなので   表編集ウィンドウをフォーカスできません  以上