クラッシックINF_Framework の解説 (クラッシックINF_Framework は ONnoji さん作成のフリーのライブラリです)。
※ INF_Framework 第3.2版 ファイナル ( INF_Framework 第3.2版 Rev.227 ) for 桐10 / 桐10s を使用しています。
☆ INF_Framework 第3.2版 の公開は終了しました。
ここで使用する ライブラリ は所定のサイト からダウンロードしてください。
簡単にフォームに便利な機能を追加するには オート INF_Framework を活用できますが
ここではマニュアルで INF_Framework を利用する方法をご案内します(オート INF_Framework に対し てクラシック INF_Framework
となります)。
1.まずはダウンロードしたV10s_INF_Framework_32_finalに含まれる
"V10s_クラシックINF_変数受け渡し元.wfx" を見ながらいくつか説明してみます。
これはフォームの編集画面ですが、赤で囲んだ機能の設定については特に説明しません。
*ここでの解説は INF_Framework の基本的な設定方法にとどまる為です。
なお変数の受け渡し と スピンボタンは また別の機会に解説します。
それでは定義画面を開いてみましょう。
〇 ファミリー名の登録について
メニューから [書式] → [ファミリパレット] を開くと、6つのファミリオブジェクト名が登録されているのがわかります。
特に famFLD、famCAP、famEZW の3つはフォーム起動時に使用されます。
INF_Framework を適用するフォームにはこのファミリ名を登録してください。
*プログラム側ではファミリ名が登録できないためです。
なお、このファミリオブジェクト名を設定するときには、単にファミリ名を登録するだけでOKです。(あとは INF_Framework のお仕事です)。
また "famHintText" は桐ver.8用のファミリなので登録する必要はありません(削除してかまいません)。
〇 項目名について
項目名のオブジェクト名は cmdCaption_1 ~ になります。オブジェクト名は変更しないようにしてください。
また標題が空欄(空っぽ)になっていることに注目してください。
これは標題を空欄(空っぽ)にしておくと、自動的に明細行のソース(項目名)が表示される仕掛けになっているからです。
〇 明細行について
オブジェクト名は txtField_1 ~ となります。項目名の cmdCaption_1 ~ とセットになります。
項目名と明細行オブジェクトに対応するイベント部分は次のようになります。
イベントの設定では、40項目まで設定されています。
項目数を増やす場合には、フォーム側だけでなくここで 41項目~ を追加設定します。
○ フォームの属性について
フォームウィンドウの位置とサイズを記憶する 『 INIもどき 』 を利用するために、
フォームの属性で ウィンドウのサイズが 「自動」 になっているか確認します。
2.それではサンプル(V10s_クラシックINF_変数受け渡し元.wfx)から、基本的な クラシックINF_Frameworkのモデルを作成してみましょう。
〇 サンプルを基にしていくつかのオブジェクトと対応するソースコードを削除します。
V10s_クラシックINF_変数受け渡し元.wfx と V10s_クラシックINF_変数受け渡し元.kex を名前を変えてコピーしてください。
新しいファイルはお好きな名前を付けてかまいませんが、ここでは クラシックINF_Framework.wfx と クラシックINF_Framework.kex
としてみました。
また V10s_クラシックINF_変数受け渡し元.tbx も クラシックINF_Framework.tbx として名前を付けて複写しています。
〇 フォーム "クラシックINF_Framework.wfx" を定義画面で開いて、
イベントファイル名を "クラシックINF_Framework.kex" 、参照表、編集対象表を "クラシックINF_Framework.tbx" に変更してください。
〇 いくつかのオブジェクトを削除します(赤枠で囲んだオブジェクトを削除してください)。
また スピンボタンのサンプルオブジェクトはワークスペースへ移動します。
*ヘッダー部分のサイズも調整しています。
〇 イベントファイル "クラシックINF_Framework.kex" を開いて、削除したオブジェクトに関係する部分を削除します。
・ 名札メイン で宣言されている変数を削除します。
*名札メインの部分は、プログラムを作成する際にいろいろと設定する部分なので行削除よりも現在の記述を消去する方法が良いでしょう。
・ つぎのコマンド行を削除します(このサンプルでは 214行~352行となります)。
・ 最後に次の "手続き実行 INFCNVprcStringExtensionConv( &mDateGetWfm )" をコメント行にします。
3.できあがった基本的な "クラシックINF_Framework" を使って ”項目の追加と削除” を解説していきます。
〇 項目の削除
フォーム "クラシックINF_Framework" を編集画面で開きます(現在の表示項目すべてを表示させるように項目幅を調整しています)。
ここでは 項目 [TEL] と [携帯電話番号] を削除してみます。
・ フォームを定義画面で開いて、まず表示項目数を後ろ(右端)から減らします(項目用オブジェクトの中抜きは
NG です)。
cmdCaption_10 と cmdCaption_11 、txtField_10 と txtField_11 をワークスペースへ移動します(削除しないようにしてください)。
・ txtField_8 と txtField_9 のソースをそれぞれ [勤務先] と [勤務先TEL] に変更します。
以上で 項目 [TEL] と [携帯電話番号] が削除できました。
なお 項目名は設定しませんでした。cmdCaption_8 と cmdCaption_9 の標題ですね。
これは 標題を空欄(空っぽ)にしておくと自動的に明細行のソース値が表示されるようになっているからです。
項目名のオブジェクト cmdCaption_1~ 、明細行のオブジェクト txtField_1~ は番号順に配置されます。
番号順を無視して入れ替えたり削除(ワークスペースへ移動)したりしないようにしてください。
でき上がりは次のようになります。でき上がってから項目幅とフォームの幅を調整することができます。
INF_Framework の醍醐味ですね。
〇 項目の追加
それでは先ほど削除した項目を追加(元に戻して)してみましょう。
まずワークスペースにある cmdCaption_10 と cmdCaption_11、txtField_10 と
txtField_11をフォーム上に移動します。
cmdCaption_10 の次に cmdCaption_11、txtField_10 の次に txtField_11 と順に戻してください。
ここでは先ほどワークスペースに移動した txtField_10 と txtField_11 のソース値はそのままにしておいたので、
txtField_8 と txtField_9 のみソース値 を [TEL] と [携帯電話番号] に変更します。
☆ 項目用オブジェクトをワークスペースからフォーム上へ移動しただけでは、INF_Framework は正常に機能しません。
重要)
cmdCaption_* と txtField_*
をワークスペースからフォームへ移動した際には
ヘッダー部分の ハンドルオブジェクトとマーカーオブジェクト そして
明細行のマーカーオブジェクトを
一旦ワークスペースへ移動して、改めてもとあった ヘッダー部分 と
明細行部分 に戻します。
・ ヘッダー部分の ハンドルオブジェクトとマーカーオブジェクト 、明細行のマーカーオブジェクトをワークスペースへ移動。
・ ワークスペースから元の ヘッダー部分 と 明細行部分 に戻す。
元に戻りました。この作業をすることでオブジェクトの順序が入れ替わり INF_Framework が正常に機能します。
オブジェクトを一旦ワークスペースに移動させて、もとのフォーム画面上にもどすことで
オブジェクトの並び順が、一番上になるということです。
つまり項目用オブジェクト( cmdCaption_* )、明細行用オブジェクト( txtField_* )が番号順に並んでいるだけでなく
ハンドルオブジェクト、マーカーオブジェクトは、項目、明細行の各オブジェクトの一番上になくてはならないということです。
*なお厳密に言えば、ヘッダー部分は 赤のハンドル、青のマーカーの順に戻します。
〇 以上を踏まえて、基本となる "クラシックINF_Framework"のフォーム を次のように設定してみました。
・ フォーム上の項目名、明細行オブジェクトが少々乱雑に並んでいますが、INF_Framework が綺麗に並べて表示してくれます。
・ 項目のオブジェクトを ワークスペース から フォームへ移動すると ハンドル・マーカーオブジェクトも操作しなくてはならないので
フォーム上の項目を多めにしておいて実際の設定の際には余分な項目分をワークスペースに移動させる、という方法が簡単でしょう。
・ 重ねたオブジェクトを分離するには、オブジェクトのリストを表示させると便利です。
〇 その他の設定
・ 定義でフォームの幅を広く設定すると、フォームウィンドウの幅を狭くした際にフォームスクロールバーが表示されます。
フォームスクロールバーが表示されると項目のスクロール機能が正しく動作せず使い難くなります。
フォームの定義上どうしても幅が広くなってしまった場合などには、フォームを起動する際につぎのプロシージャ―を実行させるとよいでしょう。
手続き定義開始 cmdStartupClick( ) * 変数宣言 自動,文字列{ &icon, &title =
"cmdStartupClick( )", &msg } 変数宣言 自動,数値 { &formWidth
} 変数宣言 自動,文字列{ &formObjectName
= #半角( "フォーム" )
} 条件 ( #変数(
"INFmKnjForm" ) ) &formObjectName = #全角(
&formObjectName ) **
幅を狭くしてフォームスクロールバーが現れ難くする オブジェクト操作 &formObjectName{
&formWidth = フォームの幅 } &formWidth = #int(
&formWidth / 4 ) オブジェクト操作 &formObjectName{
フォームの幅 = &formWidth } オブジェクト操作 &formObjectName{
&EZWmWfmWidth = フォームの幅 } 手続き定義終了 |
|
* このソースコードは INF_Framework 作者の ONnoji さんから提供を受けました(^人^)感謝♪ |
・フォームの属性で 境界線の形式は サイズ変更可 としておきます。 |
☆ フォームを起動する際に 自動的に手続きを実行させる方法については→ こちら(クリックしてください) をご覧になってください。
・ マーカーの色、列固定した項目のフォント色 を変更する。
例) 左から、青 ・ みかん色 ・ 萌黄色 ・ 赤 ・ 黄色 と指定してみました
色指定はイベントファイルの次の部分で行います。 #u の部分を変更します。
色名は KiriCMD10.chm(桐ヘルプ)[一括処理&イベントリファレンス]の[APPENDIX]の[色名の一覧表]を参照してください。
・ 項目数とイベントについて
これはここで作成した基本となる "クラシックINF_Framework"のフォーム
ですが、処理できる項目はイベントでコントロールされています。
ワークスペースにある cmdCaption_41~ 100、txtField_41~~ 100 はイベントの該当部分を設定するまで利用できません。
以上の設定では、フォームに表示した40項目までを処理できます。
ここでは 384行の次に
&EZWmCaptionList1
= &EZWmCaptionList1+",cmdCaption_41,cmdCaption_42,・・・ といった具合に追加していきます。
* cmdCaption_100 まで追加すると、次のようになります。
&EZWmCaptionList1 は手作業で設定しますが、
&EZWmFieldList1 は &EZWmFieldList1 = #文字置換( &EZWmCaptionList1, "cmdCaption",
"txtField" ) として一括設定しているので追加不要です。
〇 クラシックINF_Framework を適用したフォームを作成するための事前準備。
まず ”クラシックINF_Framework.wfx” と ”クラシックINF_Framework.kex” のファイル名を変更して複写。
(使用するフォームとイベントファイルを 新たなファイル名 で作成したということですね)。
・ ”新たなファイル名.wfx” の定義画面でイベントファイル名を ”新たなファイル名.kex” に設定。
・ フォームに famFLD、famCAP、famEZW 等のファミリが登録されていることを確認。
・ フォームの属性でフォームウィンドのサイズ が "自動" になっているか、また 境界線の型式 が "サイズ変更可" になっているか確認。
使用する編集対象表を設定。
☆ クラシックINF_Framework を適用済みの 素のファイルを準備して編集対象表を設定するということです。
〇 Nullフォーム設定サンプル(カード型式のフォームです)
*イベントファイルは ここで標準として作成した "クラシックINF_Framework.kvx" の内容を変更せずに使用しています。
INF_Framework のフォームとすることで、INF_Frameworkの機能を使えることになります。
*INIもどき(フォームの位置を覚える)、拡大・縮小 の機能など。
〇 クラシックINF_Framework に必要なファイル
フレームワークの6ファイル ” INF_Framework.cmx , IPS_Framework.cmx , INF_LNC.kex , INF_LNC.wfx , INF_MNU.kex , INF_MNU.wfx ”
それと INF_Framework を利用するための構文がセットされているファイル(実際に使用するフォームとイベントファイルですね)。