Link Field and Footer
&EZWmFieldList1 と &EZWmFieldList2 のリンク(連動)機能
※ classic_INF_Rev_241.zip 2020-05-02
INF_Framework の拡張機能です。
INF_Framework の設定をよく理解して、さらにこの機能が必要な方のみがご利用になることを前提としています。
※ classic_INF_Rev_241.zip は ONnoji さんのサイト ( ワークショップ → ダウンロード )で入手できます。
明細部のFLD機能に対応して、フッター部にリンク(連動)するグループ項目を作る。
※ INF_Framework Rev.241 以降で対応
以下のファイルは "classic_INF_Rev_241.zip" を解凍して 桐10s にコンバートしたものです。
それではサンプルの "クラシックINF_Rev_241.wfx" を開いてみます。
※ 下図は 多少項目幅を変更している状態です。項目幅の変更もフッター部分の項目幅とリンクしています。
○サンプルファイルの起動時には
[開始時実行]コマンドボタン:cmdStartup で、cmdTestClick をコールしているので
フォームが開いた時に、デフォルトの grpField_1 ~ grpField_11 でリンクします。
※グループ項目オブジェクトは、すべて #合計( [項目名] ) になっています。
なお、[項目名] が文字列型の場合には、合計文字数が表示されます(項目集計の&合計と同じ)。
○テキストボックスをONにして コマンドボタン [cmdTest] を押すと、
&EZWmFieldList2 の登録内容が grpField_1 ~ grpField_11 から txtField_51 ~ txtField_11 になり
&EZWmCaptionList1 ( フォームヘッダ部の cmdCaption_1 ~ cmdCaption_11 )とリンクします。
またテキストボックスとリンクすると、標題が自動的にテキストボックスのソース値になります。
※グループ項目のオブジェクトには[ソース]という属性がありませんので、キャプション(標題)の更新はされません。
次は "クラシックINF_Rev_241.wfx" を定義画面で開いてみます。
リンク関連の オブジェクトリストは次の通りです。
・フォームヘッダ部は cmdCaption_1 ~ cmdCaption_11 ( &EZWmCaptionList1 )
・フォーム明細部は txtField_1 ~ txtField_11 ( &EZWmFieldList1 )
・フォームフッタ部は cmdCaption_51 ~ cmdCaption_61 ( &EZWmCaptionList2 )
grpField_1 ~ grpField_11 ( デフォルトの &EZWmFieldList2 )
txtField_51 ~ txtField_11 ( デフォルトから切り替えた時の &EZWmFieldList2 )
イベントファイル "クラシックINF_Rev_241.kex" は次のようになっています。
○以下は プロシージャ cmdTestClick で フッタ部のリンク項目を設定している部分です。
※ フォーム起動時には [開始時実行]コマンドボタン:cmdStartup で、cmdTestClick をコールしています(初期値の設定ですね)。
&EZWmCaptionList2 と &EZWmFieldList2 で登録したオブジェクトが &EZWmCaptionList1 とリンクします(*List 内の登録数が同じ)。
カスタマイズ
○項目数を減らす
ここでは 項目数を3個 減らしてみました。減らすオブジェクトは ワークスペースへ移動しておきます。
※イベントファイルは変更しません。
何の問題もなく、項目数を減らせます。
○項目を増やす(ここでは元に戻す ※イベントファイルは変更しません。)
先ほど減らした項目を元に戻してみます。ワークスペースからフォーム内に戻します。
※ | を一旦ワークスペースに出して、戻す のをお忘れなく。 |
※以上は INF_Framework の標準手順ですね。
表示・編集画面で開くと次のようになります。
※以上の例では、ヘッダ部分(cmdCaption_1 ~ cmdCaption_11) と 明細行部分(txtField_1 ~
txtField_11)と
フッタ部分の項目数が一致しています(grpField_1 ~ grpField_11 と txtField_51 ~ txtField_11)
ヘッダと明細行の項目数を減らすと、フッタ部分は自動的に減った状態で表示されます。
ヘッタと明細行の項目数はそのままで、フッタ部分の項目数を減らすと、設定した通りに表示されます。
---------------------------
まとめ
・ &EZWmCaptionList1 ( cmdCaption_1 ~ を収納 )
・ &EZWmFieldList1 ( txtField_1 ~ を収納 )
・ &EZWmCaptionList2 ( フッタ部の cmdCaption_51 ~ を収納)
※サンプルの基本設定では50項目(十分でしょう)までを想定したオブジェクト名ですが、増やすことも可能かも(← テストしていません (^^♪ )
・ EZWmFieldList2 ( フッタ部の grpField_1~ と txtField_51~ のどちらかを収納 )
・[開始時実行]コマンドボタン:cmdStartup で、cmdTestClick をコールしているので
フォームが開いた時に、
デフォルトの grpField_1 ~ grpField_11 でリンクします。
・フッタ部で テキストボックスとリンクすると、標題が自動的にテキストボックスのソース値になります。
※グループ項目のオブジェクトには[ソース]という属性がありませんので、キャプション(標題)の更新はされません。
○テキストボックスとリンク
※このリンクシステムは、集計を前提に設計されています。
特にフッタ部のテキストのソースを変数にすると、モードの遷移が発生するのでおススメできません。
・フォームの設定
不要なオブジェクトはワークスペースに移動しておきます。
※グループボックスにチェックが入っていますが、フォーム起動時にテキストボックス表示に切り替えます。
・イベントの設定
&mTextboxUse = 1 として リンクをテキストボックスに設定します。
※変数 &mTextboxUse は このサンプルでは フォームに登録されています。
・フォームを表示すると次のようになります。
○グループボックスとリンク
・フォームの設定
不要なオブジェクトはワークスペースに移動しておきます。
・イベントの設定
※一旦テキストボックスに設定することで、項目名を表示させます。
・フォームを表示すると次のようになります。
-------------
○事前に多めの項目を準備して、テンプレートを作成する。
作戦は
イベントでは、&EZWmCaptionList1、&EZWmFieldList1、&EZWmCaptionList2、EZWmFieldList2
は多めのオブジェクト名を登録しておく。
フォームでは設定したリストの数に応じた 項目用オブジェクトを準備して、不要なものは ワークスペースに置いておく。です。
※設定している個数内であれば
イベント側で &EZWmCaptionList1、&EZWmFieldList1、&EZWmCaptionList2、EZWmFieldList2
の各リストを設定しなくて良いですね。
・フォーム
&EZWmCaptionList1、&EZWmFieldList1、&EZWmCaptionList2、EZWmFieldList2 の各リストに対応するオブジェクトを設定。
・イベント
プロシージャ xEZWprcFieldList1to2Link は削除。
&EZWmCaptionList1、&EZWmFieldList1 は 40個 を有効にする。
&EZWmCaptionList2、EZWmFieldList2 は次のようになります(&EZWmCaptionList1、&EZWmFieldList1 に対応して 40個 )。
補足1) かっこうBBS (三代目)より
明細部とフッタ部の入力域をリンクする 投稿者:ONnoji 投稿日:2020年 5月 2日(土)13時52分11秒
> グループボックスで集計、テキストボックスで入力
> 目的に応じて、どちらかを設定するといった具合ですね。
■好ましくない方法(明細部とフッタ部の入力域をリンクする)
フォーム明細部
項目 | 項目 | 項目 | 項目 | 項目 | ||
: | : | : | : | : | ||
: | : | : | : | : | ||
項目 | 項目 | 項目 | 項目 | 項目 | ||
フォームフッタ部
局所変数 | 局所変数 | 局所変数 | 局所変数 | cmd登録 |
↑このデザインは、フッタ部でデータを入力して、[ cmd登録]で行追加する。
ただし、局所変数をソースに指定したテキストボックスにキャレットを表示させるためには、
すなわち、入力モードにするために、終端号へ移動して行挿入モードに遷移する必要がある。
しかし、このモード遷移が最大の問題点である。
したがって、以下のようにフォーム自体を別々にする。
■好しい方法(入力と表示を別々のフォームで行う)
フォームを自身を別々にしたので、自由度が増す。
フォームAとフォームBをぴったり上下に並べるプログラミングは難しくない(易しくもないが(^^ゞ)。
何よりもモード遷移が発生しないのでシンプルである。
それぞれ別々のフォームなのでリンク不要(大変すぎて出来ません)。
―フォームA――――――――――――――――――――――――――――[×]
項目
項目
項目
項目
:
:
:
:
:
:
:
:
項目
項目
項目
項目
―フォームB――――――――――――――――――――――――――――[×]
局所変数 | 局所変数 | 局所変数 | 局所変数 | cmd登録 | ||
補足2) かっこうBBS (三代目)より
Re: 明細部とフッタ部の入力域をリンクする 投稿者:ONnoji 投稿日:2020年 5月 2日(土)13時59分42秒
■好ましい方法(明細部とフッタ部の集計域をリンクする)
フォーム明細部
項目 | 項目 | 項目 | 項目 | 項目 | |
: | : | : | : | : | |
: | : | : | : | : | |
項目 | 項目 | 項目 | 項目 | 項目 | |
フォームフッタ部
#合計 | #合計 | #合計 | #合計 | #合計 |
↑このデザインは、フッタ部にグループ項目: #合計を表示する。
フッタ部は単に表示しているだけなのでモードの遷移が必要ない。
これならば、好ましいと思います。
今回は、この目的でリンク機能を復活させた次第です。