Spec_Memo_FLD_EZWplus.txt  FLD/EZW と EZW+ 仕様メモ by ONnoji                     Rev.0 2004.07.18 INF Tools 第1.1版 for 桐ver.8 / 桐ver.9 仕様ノート                     Rev.1 2020.09.09 Spec_Memo_FLD_EZWplus.txt  この文書はINF_Framework(以降 INF_FW と表記する)の機能:FLD/EZW と EZW+ に関する仕様メモです。  ここに記載された内容は、クラシックINF_Framework と NULL INF_Framework の利用者に役に立ちます。  ■FLD/EZW とは(概要)  機能名:FLD( フィールド )は、項目( Field )の意味です。  機能:FLD は、列固定機能付きの項目スクロール機能です。  ― FLD は、一覧表形式や伝票形式のフォームの項目を左右スクロールする機能です。FLD は左側の項目を列固定することも可能です。  ※INF の倍率が -10%(ポイント/ピクセル) および -5%(ウィンドウに合せる)の場合には、正しく左右スクロール出来ません。  ― FLD/EZW( イージー・ウィッズ )は、easy width(簡単な幅)の意味で、FLD 機能を割り当てたオブジェクトの幅をマウスドラッグで変更する機能です。  ■項目数が多い場合の問題点  一覧表形式や伝票形式のフォームで、多くの項目を表示するのはとても厄介です。  これは[フォームの新規作成]で選べる項目数を指しているのではありません。  新規にオブジェクトを追加すれば、[フォームの新規作成]で選べる項目数以上の項目をいくつでも作れます。  しかし、Windowsの画面サイズを超える幅のフォームを作ると、フォームを最大化してもすべての項目を一度に表示することは出来ません。  このような場合には[フォームスクロールバー]を使うことによって隠れていた項目も表示可能になりますが、  しかし、[フォームスクロールバー]はお世辞にも便利な機能とは言えません。  そこで、[フォームスクロールバー]に依存しないで、  あたかも表編集のように、フォーカスされている項目に合わせて項目が左右にスクロールすると便利です。  FLD/EZW はこのような表編集ライクな操作性を簡単な設定で実現します。  ■キャプションとフィールドのオブジェクト名を指定する(クラシックINF_Framework または NULL INF_Framework の場合のみ)  ― FLD/EZW を使うには一般手続き:INFprcStartup にキャプションリストとフィールドリストを指定します。  ・キャプションリストは項目見出しのオブジェクト名をコンマ(,)で区切った文字列です。  ・フィールドリストは項目のオブジェクト名をコンマ(,)で区切った文字列です。  ・キャプションリストの変数名は既定値:&EZWmCaptionList1 です。  ・フィールドリストの変数名は既定値 :&EZWmFieldList1  です。  ※余談ながら、オートINF_Framework と モダンINF_Framework では、この面倒な作業を編集対象表の情報を元に自動的に行います。  ※オートINF_Framework と モダンINF_Framework で扱える項目数は100個までです。  ― フォーム新規作成よりも、モダンINF_Framework を複製して クラシックINF_Framework を作る方が簡単です。  【フォーム新規作成】  【モダンINF_Framework を複製した クラシックINF_Framework】      ↓           ↓  フォーム        フォーム  ├ ファミリ      ├ ファミリ  ├ ワークスペース   ├ ワークスペース  ├ フォーム操作バー  ├ フォーム操作バー  │           │  ├ フォームヘッダ部  ├ フォームヘッダ部  │ ├ a        │ ├ UTLCMDcmd改行キー方向  │ ├ a日付      │ ├ cmdCaption_1  │ ├ a科目      │ ├ cmdCaption_2  │ ├ a摘要      │ ├ cmdCaption_3  │ ├ a収入      │ ├ cmdCaption_4  │ ├ a支出      │ ├ cmdCaption_5  │ ├ a残高      │ ├ cmdCaption_6  │ ├ a月支出計    │ ├ cmdCaption_7  │ └ a備考      │ └ cmdCaption_8 ※不必要な cmdCaption_9 〜 cmdCaption_100 以降はワークスペースへ移動  │           │  └ フォーム明細部   └ フォーム明細部    ├ 行セレクタ     ├ 行セレクタ    ├ t日付        ├ txtField_1 ※txtField_1 〜 txtField_8 のテキストボックスの[ソース]属性を設定する    ├ t科目        ├ txtField_2    ├ t摘要        ├ txtField_3    ├ t収入        ├ txtField_4    ├ t支出        ├ txtField_5    ├ t残高        ├ txtField_6    ├ t月支出計      ├ txtField_7    └ t備考        └ txtField_8 ※不必要な txtField_9 〜 txtField_100 以降はワークスペースへ移動  ― フォーム新規作成のキャプションリストとフィールドリストの例  &EZWmCaptionList1 = "a日付,a科目,a摘要,a収入,a支出,a残高,a月支出計,a備考"  &EZWmFieldList1 = "t日付,t科目,t摘要,t収入,t支出,t残高,t月支出計,t備考"  ※項目が多くなると間違えないように記述するのが大変になります。  ― モダンINF_Framework を複製した クラシックINF_Framework のキャプションリストとフィールドリストの例  &EZWmCaptionList1 = "cmdCaption_1,cmdCaption_2,cmdCaption_3,cmdCaption_4,cmdCaption_5,cmdCaption_6,cmdCaption_7,cmdCaption_8"  &EZWmFieldList1 = #文字置換( &EZWmCaptionList1, "cmdCaption", "txtField" )  ※項目が多くなっても切り張りやコピペで対応できます。  ― ユニットINF_3-3_INFprcStartup.txt のマスター定義リスト  ** マスター定義リスト( &EZWmCaptionList1/&EZWmFieldList1 )  ** cmdCaption_1 〜 cmdCaption_40  &EZWmCaptionList1 =            "cmdCaption_1, cmdCaption_2, cmdCaption_3, cmdCaption_4, cmdCaption_5, cmdCaption_6, cmdCaption_7, cmdCaption_8, cmdCaption_9, cmdCaption_10"  &EZWmCaptionList1 = &EZWmCaptionList1 + ",cmdCaption_11,cmdCaption_12,cmdCaption_13,cmdCaption_14,cmdCaption_15,cmdCaption_16,cmdCaption_17,cmdCaption_18,cmdCaption_19,cmdCaption_20"  &EZWmCaptionList1 = &EZWmCaptionList1 + ",cmdCaption_21,cmdCaption_22,cmdCaption_23,cmdCaption_24,cmdCaption_25,cmdCaption_26,cmdCaption_27,cmdCaption_28,cmdCaption_29,cmdCaption_30"  &EZWmCaptionList1 = &EZWmCaptionList1 + ",cmdCaption_31,cmdCaption_32,cmdCaption_33,cmdCaption_34,cmdCaption_35,cmdCaption_36,cmdCaption_37,cmdCaption_38,cmdCaption_39,cmdCaption_40"  ** txtField_1 〜 txtField_40  &EZWmFieldList1 = #文字置換( &EZWmCaptionList1, "cmdCaption", "txtField" )  ■FLD/EZW のキャプションオブジェクトの標題について  ― キャプションオブジェクトの[標題]属性が空欄の場合には、自動的にフィールドオブジェクトの[ソース]属性の値が複写されます。  ※フィールドオブジェクトの[ソース]属性には項目名の他に計算式も可能です。  ※フィールドオブジェクトの[ソース]属性が項目名の場合、角カッコ([])は除いた文字列が使われます。  ■3つのファミリ:famFLD famCAP famEZW を定義する  ― 一般手続き:INFprcStartup にキャプションリストとフィールドリストを指定するだけでは FLD/EZW は動作しません。  ※3つのファミリ:famFLD famCAP famEZW は定義するだけでOKです。  ※これらのファミリを定義していない場合には INF_Framework からメッセージが表示されます。  ― モダンINF_Framework を複製して クラシックINF_Framework を作る場合、すでにフォームにファミリが定義されています。  ■ハンドルオブジェクトとマーカオブジェクトを配置する  ― ハンドルオブジェクトとはマウスドラッグを開始するハンドルを表示するオブジェクトです。  ― マーカオブジェクトとはマウスドラッグ中に表示される目印(縦線)となるオブジェクトです。  ハンドルオブジェクトとマーカオブジェクトの種類はテキストボックスです。  これらのテキストボックスの[ソース]属性は指定しません。  ・ハンドルオブジェクト( S_1 )をフォームヘッダ部に配置します。  ・マーカオブジェクト ( M_1 )はフォームヘッダ部に配置します。  ・マーカオブジェクト ( M_2 )はフォーム明細部に配置します。  ・ハンドルオブジェクト( S_1 )はキャプションオブジェクトより前面になるように配置します。  ・マーカオブジェクト ( M_1 )はハンドルオブジェクト( S_1 )より前面になるようにします。  ・マーカオブジェクト ( M_2 )はフィールドオブジェクトより前面になるように配置します。  未使用のハンドルオブジェクト( S_2,S_3 )とマーカオブジェクト( M_3 )はワークスペースに配置するか、または削除してください。  ・[ハンドルオブジェクト]… S_1, S_2, S_3  ・[マーカオブジェクト] … M_1, M_2, M_3  ■列固定機能付きの項目スクロール機能の仕掛け  ― FLD/EZW 機能は、プレートテクトニクスをヒントに考案しました。  列固定している項目(以降列固定項目と呼ぶ)を大陸プレートと見立て、それ以外の項目を海洋プレートに見立てています。  海洋プレートの沈み込んだ部分は、見えなくなっている項目(以降スタック項目と呼ぶ)になります。  スタック項目は単にオブジェクトが重なり合っているだけですが、あたかも項目が存在しないかのように見せかけます。  残りの項目は自由に移動できる項目(以降フリー項目と呼ぶ)になります。  項目を左右にスクロールする機能は、スタック項目の数を増減することで実現しています。  しかし、スタック項目の増減を決定するためには、太平洋上の日付変更線のような基準線を必要とします。  この基準線はフォームウィンドウの右端よりわずかに内側になります。  FLD/EZW 機能では項目オブジェクトの[フォーカス取得]イベントを利用します。  フォーカスを取得した項目オブジェクトが、前述の基準線を超える場合にスタック項目を増やします。  また、フォーカスを取得した項目オブジェクトがスタック項目である場合には、スタック項目を減じます。  ただし、INFの倍率が -10%(ポイント/ピクセル) および -5%(ウィンドウに合せる)の場合には、正しく左右スクロール出来ません。  これは前述の基準線を求めることが困難であるためです。  なお、「項目幅の自由変更:EZW 」で最小幅を 2ポイントに制限しているため、スタック項目は幅を 2ポイントにしています。  スタック項目が見えないのはこのような仕掛けのためです。          大陸プレート      海洋プレート        _________   ヒント           \  ______________                  \/  (断面図)           / ← プレートの沈み込み                 /          列固定項目          フリー項目       ┌─────┐┌───────┐┌───┐┌───────┐  イメージ │  1  ││   2   ││ 6 ││  7    │       └─────┘└───────┘└───┘└───────┘  (断面図)            ┌─────┐                   │  5  │                   └─────┘                ┌─────┐  数字は           │  4  │  オブジェクトのリストの   └─────┘  順番          ┌─────┐              │  3  │              └─────┘          列固定項目( 1,2 )   フリー項目( 6,7 )      ┌─────┐┌───────┐┌───┐┌───────┐   実際 │  1  ││   2   ││ 6 ││  7    │      └─────┘└───────┘└───┘└───────┘  (断面図)               ┌─┐                      │5│                      └─┘   数字はオブジェクトのリストの順番   ┌─┐                      │4│                      └─┘                      ┌─┐      スタック項目( 3,4,5 ) │3│                      └─┘  ■スタック項目の注意点  ― スタック項目があり、現在のフォーカスが最初のフリー項目の場合には一時的に最初のスタック項目にフォーカスが移動することがあります。  これが発生するのは、単に[↓] または Ctrl + [↓] /Shift + [↓]や改行方向が↓の場合の[Enter]です。  ※ジャンプバーやレコードスクロールバーで次行へ移動した場合には発生しません。  ■FLD/EZW で使用するオブジェクトに関する注意  ― [フィールド]に指定するオブジェクトはフォーカス可能なものにしてください。    ※すべてフォーカス可能なオブジェクトである必要はありませんが、出来るだけそうしてください。  ※列固定項目には必ずフォーカス可能なオブジェクトを指定してください。  ― [キャプション]に指定するオブジェクトは「リンクしていないオブジェクト」にしてください。  ※「他のオブジェクトとリンクしたオブジェクト」はファミリ(famCAP)に登録できないのでハンドルとして使えません。  ― [リストボックス]と[コンボボックス]オブジェクトを幅変更の対象にしないでください。  ※一応これらの幅変更も出来ますが、「オブジェクト内のスクロールバー」は再描画されません。  ― [直線]オブジェクトに適用しないでください。  ※[直線]オブジェクトにはイベントがありません。  ― [サブフォーム]オブジェクトを[キャプション]に指定しないでください。  ※[サブフォーム]オブジェクトには[マウスインアウト]イベントがありませんので[キャプション]として利用できません。  ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇  ■EZW+ とは(概要)  機能名:EZW+( イージー・ウィッズ・プラス )は、EZW の拡張の意味です。  機能:EZW+ は、FLD/EZW 機能以外のオブジェクトをマウスドラッグでサイズ変更します。  ■マスター定義リストとサブ定義リスト  ― キャプションリストとフィールドリストは一対(ペア)で指定します。  キャプションリスト:&EZWmCaptionList1 と フィールドリスト:&EZWmFieldList1 をマスター定義リストと呼びます。  一方で、変数名の末尾の数字が 2 以降の変数をサブ定義リストと呼びます。  変数名の末尾の数字が同じものどうしを一対(ペア)の定義リストとして扱います。  【マスター定義リスト】  &EZWmCaptionList1 = コンマ(,)で区切ったキャプションオブジェクト名のリスト  &EZWmFieldList1  = コンマ(,)で区切ったフィールドオブジェクト名のリスト  【サブ定義リスト】  &EZWmCaptionList2 = 1つのキャプションオブジェクト名  &EZWmFieldList2  = 1つのフィールドオブジェクト名  ― サブ定義リストでは EZW機能と EZW拡張機能(以降EZW+と呼ぶ)が利用できます。  サブ定義リスト用の変数は変数名の末尾の数字が 2 の変数が[名札 メイン]で宣言済です。  ― サブ定義リストが不足する場合には、[名札 メイン]で文字列型の局所変数として宣言してください。  ※変数名の末尾の数字は 2, 3, 4, 5, 6, 7,8,9,10,11,12…のように連続した数字です。  変数宣言 局所,文字列{ &EZWmCaptionList2, &EZWmCaptionList3, &EZWmCaptionList4 }  変数宣言 局所,文字列{ &EZWmFieldList2, &EZWmFieldList3, &EZWmFieldList4 }  &EZWmCaptionList2 = キャプションオブジェクト名  &EZWmFieldList2  = フィールドオブジェクト名   :  &EZWmCaptionList9 = キャプションオブジェクト名  &EZWmFieldList9  = フィールドオブジェクト名  ■EZW機能:キャプションとフィールドの両方のオブジェクトの幅を変更する  ― オブジェクトの幅の変更は FLD/EZW と基本的に同じですが、コンマ(,)で区切ったオブジェクト名のリストは使用できません。  以下は INFprcStartup( ) のサブ定義リストの例です。  ** サブ定義リスト  &EZWmCaptionList2 = "lbl果物" /* キャプションオブジェクト */  &EZWmFieldList2  = "txt果物" /* フィールドオブジェクト  */  ― 1・2のオブジェクトのオブジェクトの右端でマウスドラッグ出来ます。     1・2のオブジェクトの[始点X]属性と[幅]属性を同じ値にする      ↓      ┌─────────┐   1  │  lbl果物    │ &EZWmCaptionList2 キャプションオブジェクト      └─────────┘      ┌─────────┐   2  │  txt果物    │ &EZWmFieldList2  フィールドオブジェクト      └─────────┘  ■EZW機能:キャプションオブジェクトのみを使う  ― キャプションとフィールドに同じオブジェクト名を指定します。  ※キャプションリストとフィールドリストの内容が同じ場合には、キャプションオブジェクトとして扱います。  以下は INFprcStartup( ) のサブ定義リストの例です。  ** サブ定義リスト  &EZWmCaptionList2 = "lbl果物"    /* フィールドオブジェクト            */  &EZWmFieldList2  = "lbl果物"    /* キャプションオブジェクトと同じオブジェクト名 */  &EZWmCaptionList3 = "txt果物"    /* フィールドオブジェクト            */  &EZWmFieldList3  = "txt果物"    /* キャプションオブジェクトと同じオブジェクト名 */  &EZWmCaptionList4 = "txt果物Bottom" /* フィールドオブジェクト            */  &EZWmFieldList4  = "txt果物Bottom" /* キャプションオブジェクトと同じオブジェクト名 */  &EZWmCaptionList2 と &EZWmFieldList2 のどちらにも オブジェクト名:"lbl果物" が代入されています。  同様に、&EZWmCaptionList3 と &EZWmFieldList3 はオブジェクト名:"txt果物"  さらに同様に、&EZWmCaptionList4 と &EZWmFieldList4 はオブジェクト名:"txt果物Bottom" という具合に、  キャプションリストとフィールドリストの内容が同じになっていることに注目してください。  このようにキャプションリストとフィールドリストの内容が同じ場合には、  指定されたオブジェクトがテキストボックスであっても、キャプションとして扱います。  キャプションオブジェクトはファミリ名:famCAP に登録されて、  [famCAP::マウスインアウト]イベントによって自動的にハンドルオブジェクトが移動します。  ※ただし、ハンドルオブジェクトとマーカオブジェクトをセクション上に配置しておく必要があります。  最初はなかなかピンとこないかもしれませんが、  キャプションリストとフィールドリストの内容を同じにして、任意のオブジェクトの幅を変更するというテクニックを覚えてください。  ― 1・2・3のオブジェクトのオブジェクトの右端でマウスドラッグ出来ます。      ┌───────┐   1  │  lbl果物  │     &EZWmCaptionList2 = &EZWmFieldList2 キャプションオブジェクト      └───────┘      ┌─────────┐   2  │  txt果物    │   &EZWmCaptionList3 = &EZWmFieldList3 キャプションオブジェクト      └─────────┘      ┌───────────┐   3  │  txt果物Bottom   │ &EZWmCaptionList4 = &EZWmFieldList4 キャプションオブジェクト      └───────────┘  ■Link機能:複数のオブジェクトの幅を連動して変更する  ― サブ定義リストでは他のオブジェクトの幅を連動して変更できます。  この場合には リンク機能用の局所変数:&EZWmLinkList1 にフィールドリスト名をコンマ(,)区切りで指定します。  (例) &EZWmLinkList1 = "EZWmFieldList2,EZWmFieldList3,EZWmFieldList4"  ※コンマ区切りのリストにはアンパサンド記号(&)を除いて変数名を指定してください。  以下は INFprcStartup( ) のサブ定義リストの例です。  ** サブ定義リスト  &EZWmCaptionList2 = "lbl果物"    /* キャプションオブジェクト */  &EZWmFieldList2  = "lbl果物"    /* フィールドオブジェクト  */  &EZWmCaptionList3 = "txt果物"    /* キャプションオブジェクト */  &EZWmFieldList3  = "txt果物"    /* フィールドオブジェクト  */  &EZWmCaptionList4 = "txt果物Bottom" /* キャプションオブジェクト */  &EZWmFieldList4  = "txt果物Bottom" /* フィールドオブジェクト  */  ** Link機能:幅を連動する  &EZWmLinkList1 = "EZWmFieldList2,EZWmFieldList3,EZWmFieldList4"  さらに、&EZWmLinkList2 や &EZWmLinkList3 といった変数を使い、様々な組み合わせが指定できます。  しかし、リンク機能用の変数は変数名の末尾の数字が 1 のものまでしか用意していません。  もしも、リンク機能用の変数が不足する場合には、[名札 メイン]で文字列型の局所変数として追加してください。  ※変数名の末尾の数字は 2,3,4,5,6,7…のように連続した数字です。  ― 1・2・3のオブジェクトのオブジェクトの右端でマウスドラッグ出来ます。     1・2・3のオブジェクトの[始点X]属性と[幅]属性を同じ値にする      ↓      ┌─────────┐   1  │  lbl果物    │ &EZWmCaptionList2 = &EZWmFieldList2      └─────────┘      ┌─────────┐   2  │  txt果物    │ &EZWmCaptionList3 = &EZWmFieldList3      └─────────┘      ┌─────────┐   3  │  txt果物Bottom │ &EZWmCaptionList4 = &EZWmFieldList4      └─────────┘      ↑     1・2・3のオブジェクトの[始点X]属性と[幅]属性を同じ値にする  ■Extend機能:フィールドとキャプションの幅を一致させない  ― キャプションオブジェクトよりもフィールドオブジェクトの幅を広くしたまま幅を変更する  時として、フィールドとキャプションの幅を一致させたくない場合が生じます。  この場合には、局所変数:&EZWmCaptionExtendList にキャプションオブジェクト名をコンマ(,)区切りで指定します。  (例) &EZWmCaptionExtendList = "txt果物計算式,txt果物Top"  以下は INFprcStartup( ) のサブ定義リストの例です。  ** サブ定義リスト  &EZWmCaptionList2 = "txt果物計算式" /* キャプションオブジェクト */  &EZWmFieldList2  = "txt果物"    /* フィールドオブジェクト  */  &EZWmCaptionList3 = "txt果物Top"   /* キャプションオブジェクト */  &EZWmFieldList3  = "txt果物Bottom" /* フィールドオブジェクト  */  ** Extend機能:フィールドとキャプションの幅を一致させない  &EZWmCaptionExtendList = "txt果物計算式,txt果物Top" /* キャプションオブジェクトを指定する */  ― 1のオブジェクトの右端でマウスドラッグ出来ます。     1・2のオブジェクトの[始点X]属性を同じ値にする、[幅]属性は異なる値にする      ↓      ┌─────────┐   1  │ txt果物計算式  │   &EZWmCaptionList2 キャプションオブジェクト      └─────────┘      ┌─────────┬─┐   2  │  txt果物    │▼│ &EZWmFieldList2  フィールドオブジェクト      └─────────┴─┘                 ↑             txt果物入力支援ボタン  ― 3のオブジェクトの右端でマウスドラッグ出来ます。   オブジェクトを重ね合わせても可能です  3・4とを重ね合わせる 前面が3 後面が4   ↓      ┌─────────┐   3  │ txt果物Top   │   &EZWmCaptionList3 キャプションオブジェクト      └────┬────┘      ┌────┴────┬─┐   4  │ txt果物Bottom  │▼│ &EZWmFieldList3  フィールドオブジェクト      └─────────┴─┘      ↑          ↑      ↑      txt果物Bottom入力支援ボタン      ↑     3・4のオブジェクトの[始点X]属性を同じ値にする、[幅]属性は異なる値にする  ■Offset機能:キャプションの位置を変更して、幅を変更しない  ― グリップ(取っ手)を作る。  時として、キャプションの位置を変更してもキャプションの幅を変更させたくない場合が生じます。  この場合には、局所変数:&EZWmCaptionOffsetList にキャプションオブジェクト名をコンマ(,)区切りで指定します。  (例) &EZWmCaptionOffsetList = "lbl果物,lbl果物Grip"  以下は INFprcStartup( ) のサブ定義リストの例です。  ** サブ定義リスト  &EZWmCaptionList2 = "lbl果物"    /* キャプションオブジェクト */  &EZWmFieldList2  = "txt果物"    /* フィールドオブジェクト  */  &EZWmCaptionList3 = "lbl果物Grip"  /* キャプションオブジェクト */  &EZWmFieldList3  = "txt果物Bottom" /* フィールドオブジェクト  */  ** Offset機能:キャプションの位置を変更し、幅を変更しない  &EZWmCaptionOffsetList = "lbl果物,lbl果物Grip" /* キャプションオブジェクトを指定する */  ― 1のオブジェクトの右端でマウスドラッグ出来ます。                 1                ┌─┐          lbl果物 → │ │ &EZWmCaptionList2 キャプションオブジェクト                └─┘      ┌─────────┐   2  │  txt果物    │   &EZWmFieldList2  フィールドオブジェクト      └─────────┘  ― 4のオブジェクトの右端でマウスドラッグ出来ます。   オブジェクトを水平に並べても可能です                 4      ┌─────────┬─┐   3  │  txt果物Bottom │ │←lbl果物Grip &EZWmCaptionList3 キャプションオブジェクト      └─────────┴─┘          ↑        &EZWmFieldList3 フィールドオブジェクト  以上