プログラミング入門 (桐s-2024LT: ツールバー編 )


番外編:入力支援ボタンと配列変数、多重化した表を閉じずに利用、そしてトレース出力
初版 /更新日:2024年10月28日

プロシージャ:[手続き]、[一般手続き]、[イベントハンドラ]のこと
0 サンプルについて(サンプルのダウンロードはこちら)※ファイル名は "Chapter10_Sample.zip" です。県名の候補を作成
含まれるファイルはサンプルの Sample.WFX , Sample.tbx , Sample.kex , 入力支援マスタ , 入力支援マスタ.tbx , 郵便番号簿.tbx の 6ファイルと
Sample.WFX のオブジェクト一覧を記載した "ObjectLlist.txt" になります。
- 目次 -  
フォーム "Sample.WFX" を開くと、次のように入力支援ボタンが設定されています。



0-1 サンプル:A の入力支援ボタンには
県: フォーム開始時に、ファイル "郵便番号簿.tbx" から入力支援ボタンのドロップダウンリストが作成されています。
市: 編集時に、"県"を入力するとそれに基づいた市町村が、ファイル "郵便番号簿.tbx" から入力支援ボタンのドロップダウンリストとして作成されます。
フォーム開始時は1行目に "県"データが入力されている場合、その  "県" の市町村データが "郵便番号簿.tbx" からドロップダウンリストとして作成されます。

0-2 サンプル:B の入力支援ボタンには
区: 名札メイン で設定している値が入力支援データ一覧になっています。
&m区リストDim[7] = { "東区","中央区","博多区","南区","城南区","早良区","西区" }
町名: 項目 [区] の入力値に合わせて、『すでに入力されている 町名 から』入力支援ボタンのドロップダウンリストが作成されます。
この設定は一般的には実用的ではありませんね、ここではあくまでも
項目[区]の入力値に合わせて別の項目[町名]に入力されている値でドロップダウンリスを作成するサンプルとお考え下さい
項目[郵便番号] は、ここでは町名の入力支援リストの表示順に利用しています。

0-3 サンプル:C の入力支援ボタンには
[携帯会社]にデータを入力するたびに、既に入力済みのデータと併せて入力支援ボタンのドロップダウンリストが追加、削除されます。
   
0-4 サンプル:D の入力支援ボタンには
性別: フォーム開始時に、ファイル "入力支援マスタ.tbx" の性別グループから入力支援ボタンのドロップダウンリストが作成されます。
血液型: フォーム開始時に、ファイル "入力支援マスタ.tbx" の血液型グループから入力支援ボタンのドロップダウンリストが作成されます。
⇒⇒ フォーム開始時に、コマンドボタン [cmdStartup] を実行するようにしておきます
※以下を参考に設定してください
   

目次

   
1 フォーム開始時の設定(名札メイン と cmdStartup )
1-1 名札 メイン
1-2 cmdStartup
 
A サンプルA:県と市の入力支援リストを、ファイル "郵便番号簿.tbx" から作成します
a:1 [県] の入力支援リストと動作の概要、そして入力支援ボタンの設定
a:2 フォーム開始時に [県] の入力支援リストを作成します
a:2-1 prc県名の候補を作成
a:3 [市] の入力支援リスト作成について(プロシージャ:図解)
a:4 フォーム開始時に [市] の入力支援リストを作成します
 
a:4-1 prc開始時に市名の候補を作成
a:4-2 prc市名の候補を作成
a:4-3 prc項目値を配列変数に代入 (&m市リストDim に値を取り込みます)
a:5 フォーム編集時に [市] の入力支援リストを作成します
 
a:5-1 方法1:項目[県]の[入力支援リスト]から "県"を選択します → a:5-3 ソース値更新 へ
a:5-2 方法2:項目[県]を直接手入力で編集します → a:5-3 ソース値更新 へ
a:5-3 ソース値更新
a:5-4 prc市名候補の範囲を確認
a:5-5 a:4-2 prc市名の候補を作成
a:5-6 a:4-3 prc項目値を配列変数に代入 (&m市リストDim に値を取り込みます)

B サンプルB:町名の入力支援リストを、既に入力済みのデータから作成します(項目[区]に合わせて作成します)
b:1 [区] の入力支援リストについて、フォームでの表示と動作の概要
b:2 [町名] の入力支援リスト作成について(図解)
b:3 フォーム編集時に町名の入力支援リストを作成します
 
b:3-1 方法1:項目[区]の[入力支援リスト]から "区"を選択します → b:3-3 ソース値更新 へ
b:3-2 方法2:項目[区]を直接手入力で更新します → b:3-3 ソース値更新 へ
b:3-3 ソース値更新
b:3-4 prc町名候補の範囲を確認
b:3-5 prc町名の候補を設定
b:3-6 a:4-3 prc項目値を配列変数に代入 (&m町名リストDim に値を取り込みます)

C サンプルC:携帯電話会社の入力支援リストを、入力みのデータから作成します(入力するごとに更新します)
c:1 携帯会社の入力支援リストについて、フォームでの表示と動作の概要
c:2 携帯会社の入力支援リスト作成のプロシージャの流れ(図解)
c:3 フォーム開始時に携帯会社の入力支援リストを作成します
 
c:3-1 prc携帯会社の候補を作成
c:3-2 a:4-3 prc項目値を配列変数に代入(&m携帯会社リストDim に値を取り込みます)
c:4 フォーム編集時に携帯会社の入力支援リストを作成します
 
c:4-1 ソース値更新
c:4-2 c:3-1 prc携帯会社の候補を作成
c:4-3 a:4-3 prc項目値を配列変数に代入(&m携帯会社リストDim に値を取り込みます)
 
サンプルD:性別、血液型を、ファイル"入力支援マスタ.tbx" から作成します
d:1 [性別]、[血液型] の入力支援リストについて、フォームでの表示と動作の概要
d:2 [性別]、[血液型] の入力支援リストは次のように作成します(図解)
d:3 フォーム開始時に、性別と血液型の入力支援リストを作成します
 
d:3-1 prcマスターから候補を作成 ( &mTbl入力支援マスタ , "性別" , &m性別リストDim )
prcマスターから候補を作成 ( &mTbl入力支援マスタ , "血液型" , &m血液型リストDim )
d:3-2 prcマスターから候補を作成 ( 文字列 &tbl入力支援マスタ , 文字列 &グループ値 , 参照 文字列 &取得リストDim[] )
d:3-3 a:4-3 prc項目値を配列変数に代入( &m性別リストDim , &m血液型リストDim に値を取り込みます)
 
T トレース出力
t:1 基本設定
t:2 トレース出力内容の選択 の設定と 出力サンプル
 
t:2-1 "Sample.WFX" を実行して処理をトレース出力ウィンドウに表示します
t:2-2 出力内容をメモ帳に貼り付けます
t:2-3 参考)トレース出力内容の選択 で、全てにチェックを入れていた場合
t:3 トレース出力コマンド は、必要な情報を得たい部分に設定します
 
t:3-1 トレース出力の設定例
t:3-2 トレース出力は次のようになります
t:3-3 設定例の解説
   
参考 整形ユーティリティのご紹介
   
   

1 フォーム開始時の設定(名札メイン と cmdStartup )
   
1-1 名札 メイン
   
1-1-1 変数の設定
2 変数宣言 局所,文字列 { &m編集対象表 = #一括パス名 + "Sample.tbx" } 
3 オブジェクト操作 @フォーム.編集対象表 = &m編集対象表
4  
5 変数宣言 局所, 文字列 { &m区リストDim[7] = { "東区","中央区","博多区","南区","城南区","早良区","西区"  } }
 
配列変数を宣言し、その変数の各要素の値を代入しています
6 変数宣言 局所, 文字列 { &m県リストDim[50] }
7 変数宣言 局所, 文字列 { &m市リストDim[99] }
8 変数宣言 局所, 文字列 { &m町名リストDim[99] }
9 変数宣言 局所, 文字列 { &m性別リストDim[3] }
10 変数宣言 局所, 文字列 { &m血液型リストDim[5] }
11 変数宣言 局所, 文字列 { &m携帯会社リストDim[20] }
 
  配列要素数は、いくつでもOKとなっていますが、ここでは以上のように設定しています
配列変数には、接尾辞の "Dim" を付けておきます
12 変数宣言 局所, 文字列 { &m選択県 , &m選択県back }
13 変数宣言 局所, 文字列 { &m選択区 , &m選択区back }
 
  入力支援ボタン や 入力後イベント で取得した値を代入します
今回は、&m選択県back , &m選択区back は利用していません
14 変数宣言 局所, 整数  { &m市リスト作成Run }
15 変数宣言 局所, 整数  { &m町名リスト作成Run }
 
  [市] と [町名] のデータを 取得する・しない のフラグです。フラグ(旗)ですから、1でオン、0でオフです
フラグはオンにすることをを"立てる/上げる"、オフにすることを"降ろす/下げる"と呼びます
専用のフラグ、つまり[明示的な変数]とすることで、どの条件を利用するか明解になります
16 変数宣言 局所, 文字列 { &mTbl郵便番号簿 = #一括パス名 + "郵便番号簿.tbx" }
17 変数宣言 局所, 文字列 { &mTbl入力支援マスタ = #一括パス名 + "入力支援マスタ.tbx" }
 
ファイルは変数に代入して利用します
18 変数宣言 局所,整数  { &mMultiTblNum }
 
フォーム開始時に編集対象表を多重化して、多重化した表のハンドル番号を収納します
   
1-2 cmdStartup
  フォームを開始したら、設定している開始時実行コマンド "cmdStartup" が実行されます

   
1-2-1 フォーム開始時に、多重化したファイルを準備します。フォーム終了時に自動で閉じられます。
22 手続き定義開始 cmdStartupClick( )
   
23 編集表 &hwindow
 
多重化する前には、多重化する編集対象表を指定します
&hwindowには現在のフォームの編集対象表番号が収納されています
24 多重化
25 &mMultiTblNum = #is表
 
多重化した表の表番号を取得します
ここで多重化した表はフォーム終了時まで閉じません(閉じるコマンドは使わないように)
フォーム終了時には自動で閉じられます。※それまで開っきぱなしということです
   
ヒント : 手続き名:cmdStartupClick( ) 終了時の 編集対象表について

[開始時実行コマンド]ボタンが実行されて、[手続き名:cmdStartupClick( )]が実行され終わったならば、
[手続き名:cmdStartupClick( )とそこから呼び出したプロシージャ]のいずれかが、&hwindow 以外の表番号の表へ編集表を切り替えていても、
[手続き名:cmdStartupClick( )とそこから呼び出したプロシージャ]が終了した時点では編集表の番号は、フォームの編集対象表、つまり表番号:&hwindow になっています。

[手続き名:cmdStartupClick( )]に限らず、一連の手続きの流れが終了すれば、同様に編集表の番号は、フォームの編集対象表、つまり表番号:&hwindow になっています。
- 目次 -  


A サンプルA:県と市の入力支援リストを、ファイル "郵便番号簿.tbx" から作成します
   
a:1 [県] の入力支援リストと動作の概要、そして入力支援ボタンの設定
フォームを開始すると、項目[県]の入力支援リストに、ファイル "郵便番号簿.tbx " から作成されたデータが登録されています。


a:1-1 入力支援ボタンの設定は次のようになります。
 
a:1-2 選択肢リストの、冒頭に #u ( #未定義 や "" )を追加すると、リストの一番最初が 未定義(空白) にできます。
a:1-3 県データで、たとえば "北海道"を選択すると
項目[市]の入力支援リストに、ファイル "郵便番号簿.tbx" から作成された "市"データが登録されます。
フォーム開始時には、項目[県]の1行目にデータが入力されている場合、その値に基づいて"市"データが登録されます。
 
- 目次 -  


   
a:2 フォーム開始時に [県] の入力支援リストを作成します

[県]のデータを作成します
  手続きの流れは左図のようになります

フォーム開始時に、cmdStartupClick が実行されて
プロシージャの [prc県名の候補を作成] を呼び出します


   
⇒⇒ フォーム開始時に "郵便番号簿.tbx" から都道府県のデータを作成します

a:2-1 prc県名の候補を作成




この[県名の候補を作成]では
配列変数にデータを取り込むまでの処理を一貫して行っています


他の入力支援リストの作成と同様に、配列変数に値を取り込む部分に専用(共通)のプロシージャを使うことも簡単にできます



 
   
a:2-1-1 "郵便番号簿.tbx" を開いてデータを作成します。
112 手続き定義開始 prc県名の候補を作成( )
   
113 変数宣言 自動,整数 { &importTblNum }
 
  開いた表の表番号を収納する変数です
114 変数宣言 自動,整数 { &cnt , &dimMaxNum }
 
  繰り返しに使用する変数です
   
a:2-1-2 作成するデータ(都道府県)を整えます。
116 表 &mTbl郵便番号簿
117 &importTblNum = #is表
 
  表を開いて、表番号を取得します
118 解除 *
119 絞り込み 単一化 = {[住所1]}
 
  解除コマンドで、表が基本状態にあることを確定させて、絞り込みます
[住所1]には、"県" に相当するデータが入っているので、単一化して 都道府県リスト のマスターにします
a:2-1-3 リストを作成する条件を設定します。
121 if ( .not #eof ) 
 
  条件を設定しています。絞り込んだ結果が 終端行でなければ(つまりデータ行が存在する)
122 * &m県リストDim = { #未定義 }
 
  県のリストは、フォーム開始時だけ作成するので変数の値をクリアしておく必要はありません
123 &dimMaxNum = #配列要素数( "m県リストDim" )
 
  配列変数 &m県リストDim[] の要素数を取得します。繰り返し回数の上限になります
124 &cnt    = 1
 
  繰り返した回数をカウントする(配列変数の要素番号にもなります)変数の初期値を設定します
a:2-1-4 繰り返しコマンドを使って、1行ずつデータを取得します。
126 ジャンプ 行番号 = 先頭
 
  先頭行であることが自明の場合でも省略せずに記載しておきます
127 繰り返し ( .not #eof )
 
  終端行でなければ、繰り返します
128 &m県リストDim[&cnt] = [住所1] 
 
  配列変数に値を取り込みます、&cnt は要素番号になります)
129 ジャンプ 行番号 = 次行
 
  次の行に移動します
131 &cnt = &cnt + 1
 
  カウントを1つ増やします
132 if ( &cnt > &dimMaxNum )
133 繰り返し中止
 
  カウンタが繰り返し回数の上限(配列変数の要素数)を上回ったら、繰り返しを中止します
134 end
135 繰り返し終了
136 end
a:2-1-5 "郵便番号簿.tbx" を閉じます。
138 終了 表 &importTblNum
 
  "郵便番号簿.tbx" を表番号で閉じます
表を閉じた後、もっとも小さい表番号の表が、いま操作しているフォームの編集対象表になります
※他に表を開いていて、その表番号がいま操作しているフォームの表番号より小さい場合、その表を編集対象表にしてしまいます
139 編集表 &hwindow
 
  終了 表 とセットで使って、フォームの編集対象表を正しく指定します
   
140 手続き定義終了
- 目次 -  


a:3 [市] の入力支援リストについて(図解)
[フォーム開始時実行]コマンドボタンと、項目の値を編集して確定モードで終了した時に発生する[ソース値更新]イベントから呼び出すプロシージャ




a:4
フォーム開始時に [市] の入力支援リストを作成します
  手続きの流れは左図のようになります

1.[prc開始時に市名の候補を作成] で 市のリストを作成するかどうか判定します
2.[prc市名の候補を作成] で 作成データを整えます
3.[prc項目値を配列変数に代入] で 市のデータを 配列変数 "&m市リストDim" に取り込みます

⇒⇒ 項目[県] に入力されたデータに属する [市] のデータを "郵便番号簿.tbx" から作成します
フォーム開始時には、"Sample.tbx" の1行目に、都道府県が入力されている場合に実行します
 
a:4-1 prc開始時に市名の候補を作成 
 フォーム開始時に、市のリストを作成するための条件を設定します。
 "&選択県" にデータを代入して引数にします。
 手続き定義開始 prc市名の候補を作成( 文字列 &選択県 ) を呼び出します
 
a:4-1-1 フォームを開始した時、表の1行目に入力されている "県" のデータを確認します。
142 手続き定義開始 prc開始時に市名の候補を作成( )
   
143 変数宣言 自動, 文字列 { &選択県 }
145 編集表 &hwindow
 
  ここでは基になるこのフォームの編集対象表から 項目[県]の値を確認するので使用する編集表を確定しておきます
146 ジャンプ 行番号 = 先頭
 
  カーソルはフォーム開始時には先頭行にありますが、確実に1行目を指定します
147 &選択県 = #項目属性( #項目番号( "県" ), 0 ) 
 
  入力されている "県" の値で検索して "市" のリストを作成することになります
構文は 桐のヘルプをご覧になってください
   
a:4-1-2 先頭行に "県" が入力されている場合、手続き定義開始 prc市名の候補を作成( ) を呼び出します
149 if ( &選択県 <> #未定義 ) 
150 手続き実行 prc市名の候補を作成( &選択県 )
 
  "県" の値を引数にして、プロシージャ "prc市名の候補を作成 " を呼び出します。県先頭行が未入力の場合、"市"リストは作成しません
151 end
   
152 手続き定義終了
- 目次 -  
 
a:4-2 prc市名の候補を作成
 
 
a:4-2-1 作成するデータを整えます(都道府県に基づいた "市" の一覧)
162 手続き定義開始 prc市名の候補を作成( 文字列 &選択県 )
 
引数 &選択県 " には、"県"の名称が代入されています
163 変数宣言 自動,整数 { &importTblNum }
164  
165 表 &mTbl郵便番号簿
166 &importTblNum = #is表
167 解除 *
168 絞り込み [住所1] { *&選択県* }
 
&mTbl郵便番号簿の[住所1]には、"県" に相当するデータが入っています
169 絞り込み 単一化 = { [住所2] }
 
&mTbl郵便番号簿の[住所2]には、"市" に相当するデータが入っています
171 手続き実行 prc項目値を配列変数に代入 ( &importTblNum , "住所2" , &m市リストDim )
 
引数:データを読込む表番号 , データの項目名 , データを代入する配列変数 の順に並べてみました
173 終了 表 &importTblNum
174 編集表 &hwindow
 
終了 表 とセットで使って、現在使っているフォームの編集対象表を正しく指定します
175 手続き定義終了
- 目次 -  
a:4-3 prc項目値を配列変数に代入 (&m市リストDim に値を取り込みます)
このプロシージャは共通です。市名の候補を作成、町名の候補を作成、携帯会社の候補を作成で使用しています。
また県名の候補を作成、マスターからの候補を作成(独立したサンプルになっています)にも利用できます


全ての入力支援リスト作成に利用できます
※今回は以下の場合に使用

a:4-3-1 この処理は、県名の候補を作成するプロシージャに含まれる配列変数へ値を取り込む 繰り返し部分と基本的に同一です
※prc県名の候補を作成() に、この処理を組み込むことも簡単にできます

217 手続き定義開始 prc項目値を配列変数に代入 ( 整数 &importTblNum , 文字列 &取得項目 , 参照 文字列 &取得リストDim[] )
 
引数:データを読込む表番号 , データの項目名 , データを代入する配列変数 の順に並んでいます
218 変数宣言 自動,整数  { &cnt , &dimMaxNum }
 
繰り返しに使用する変数です
220 編集表 &importTblNum
 
読込む編集表を指定します
221 if ( .not #eof )
 
条件を設定しています。絞り込んだ結果が 終端行でなければ(つまりデータ行が存在する)
222 &取得リストDim = { #未定義 }
 
配列変数のすべての値をクリアします
223 &dimMaxNum = #配列要素数( 取得リストDim )
 
使用する配列変数 の要素数を取得します。繰り返し回数の上限になります
224 &cnt    = 1
 
繰り返した回数をカウントする(配列変数の要素番号にもなります)変数の初期値を設定します
226 ジャンプ 行番号 = 先頭            /* 先頭行であることが自明の場合でも省略せずに */
 
先頭行であることが自明の場合でも省略せずに記載しておきます
227 繰り返し ( .not #eof )
 
終端行でなければ、繰り返します
228 &取得リストDim[&cnt] =  #項目属性( #項目番号( &取得項目 ), 0 ) 
 
配列変数に指定した項目から値を取り込みます、&cnt は要素番号になります)
229 ジャンプ 行番号 = 次行
 
次の行に移動します
231 &cnt = &cnt + 1
 
カウントを1つ増やします
232 if ( &cnt > &dimMaxNum )
233 繰り返し中止
 
カウンタが繰り返し回数の上限(配列変数の要素数)を上回ったら、繰り返しを中止します
234 end
235 繰り返し終了
236 end
   
237 手続き定義終了
- 目次 -  
 
a:5
フォーム編集時に [市] の入力支援リストを作成します

"市" のデータは、フォーム編集時に "県" データを入力、変更した時も更新します。
   [ソース値更新] から順次プロシージャを呼び出します(項目[県] のデータを確認しています)
1.[prc市名候補の範囲を確認] で 市名の候補を作成するデータの範囲を設定します
2.[prc市名の候補を作成] で 市のデータを整えます
3.[prc項目値を配列変数に代入] で 配列変数 " &m市リストDim " にデータを取り込みます
方法1:項目[県]に設定している[入力支援ボタン]で選択入力して、ソース値更新で次に進みます
方法2:項目[県]の値を直接 手入力、変更して、ソース値更新で次に進みます
   
⇒⇒ 項目[県] に入力されたデータに属する [市] のデータを "郵便番号簿.tbx" から作成します
   
a:5-1 方法1:項目[県]の[入力支援リスト]から "県"を選択します
項目[県]にある [入力支援ボタン] を使用して表示された一覧から "県" を選択します

  ↓ 確定後 次に進みます
 

a:5-1-1
97 手続き定義開始 txt県入力支援ボタン::入力支援クローズ(参照 文字列 &入力文字列,長整数 &モード)
 
  &入力文字列 : [入力支援ボタン]で選択入力された値(文字列)が代入されています
&モード : 入力したデータが確定されたか( 1 )、キャンセルされたかを示す番号( 0 )が格納されます(論理値を返しています)
98 if ( &モード )
 
 &モード の値は 1(イチ)か0(ぜロ):論理値になります
99 &m市リスト作成Run = 1
 
 市名の候補を作成するフラグを立てました(上げました)
100 &m選択県 = &入力文字列
 
  [入力支援ボタン]で選択入力された 都道府県を局所変数に代入します
101 end
   
102 手続き定義終了
   
a:5-2 方法2:項目[県]の値を直接 手入力で編集します
 

 ↓ 確定後 次に進みます

 

a:5-2-1
37 手続き定義開始 txt県::入力前(参照 文字列 &編集文字列)
38 &m市リスト作成Run = 0
 
データの入力前に、フラグ:&m市リスト作成Run を降ろします(下げます)
39 手続き定義終了
   
41 手続き定義開始 txt県::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続)
42 if ( &モード )
43  &m市リスト作成Run = 1
 
データが入力されたので フラグ:&m市リスト作成Run を立てます(上げます)
44 &m選択県 = &編集文字列
 
入力された値を &m選択県 に代入します
45 end
46 手続き定義終了
   
48 手続き定義開始 txt県::編集開始()
49 メソッド呼び出し &this.編集選択位置設定( 1 ,-1 )
 
入力時に値をすべて選択済みの状態にします 
&this は、イベントが発生したオブジェクトの名前が格納されている定数です
50 手続き定義終了
 
 
a:5-3 ソース値更新
方法1、方法2 いずれも ソース値更新とすることで、次のプロシージャ "prc市名候補の範囲を確認" を呼び出します
 
a:5-3-1
52 手続き定義開始 txt県::ソース値更新()
53 if ( &m市リスト作成Run )
 
&m市リスト作成Run は論理値です。1(イチ)の場合、if の中を実行します
54 &m市リスト作成Run = 0
 
処理が実行されたので、フラグ:&m市リスト作成Run を降ろします
55 手続き実行 prc市名候補の範囲を確認( )
 
プロシージャ prc市名候補の範囲を確認( ) を呼び出します
56 end
57 手続き定義終了
- 目次 -  
 
a:5-4 prc市名候補の範囲を確認
項目[県] から取得したデータを判定して次の処理に進みます
 
 
a:5-4-1
154 手続き定義開始 prc市名候補の範囲を確認( )
155 if ( &m選択県 <> #未定義 )
 
&m選択県 に 値が入っている場合には、次のプロシージャを呼び出します
156 手続き実行 prc市名の候補を作成( &m選択県 )
157 else
158 &m市リストDim = { #未定義 } 
 
&m選択県 が空欄(未定義)のときには、" &m市リストDim " を未定義にして以降の処理は不要です
159 end
160 手続き定義終了
- 目次 -
 
a:5-5 prc市名の候補を作成
作成する市の範囲を設定するプロシージャです。引数 &選択県 には、"県"の名称が代入されています
 


※なおフォーム開始時には
次の順位で実行されています


a:5-5-1
162  手続き定義開始 prc市名の候補を作成( 文字列 &選択県 )
   
163  変数宣言 自動,整数 { &importTblNum }
165  表 &mTbl郵便番号簿
166  &importTblNum = #is表
167  解除 *
 
 
168  絞り込み [住所1] { *&選択県* }
169  絞り込み 単一化 = { [住所2] }
 
選んだ "[県] で絞り込んで、単一化して取り込むリストのできあがりです
&mTbl郵便番号簿の[住所1]には、"県" に相当するデータが入っています
&mTbl郵便番号簿の[住所2]には、"市" に相当するデータが入っています
171  手続き実行 prc項目値を配列変数に代入 ( &importTblNum , "住所2" , &m市リストDim )
 
プロシージャ prc項目値を配列変数に代入 は共通です
173  終了 表 &importTblNum
174  編集表 &hwindow
 
終了 表 とセットで編集表を指定してします
175  手続き定義終了
   
a:5-6 prc項目値を配列変数に代入 ( &m市リストDim に値を取り込みます )
 
  引き続き、配列変数 &m市リストDim に値を取り込むプロシージャを呼び出します。
 手続き実行 prc項目値を配列変数に代入 ( &importTblNum , "リスト" , &取得リストDim )
共通プロシージャなので詳細は a:4-3 をご覧になってください
- 目次 -  

B サンプルB:町名の入力支援リストを、既に入力済みのデータから作成します(項目[区]に合わせて作成します)
   
b:1 [区] の入力支援リストについて、フォームでの表示と動作の概要
フォームを起動すると、項目[区]の入力支援リストには、名札メイン で設定したデータが登録されています。


b:1-2



b:1-3
項目[区]で、たとえば "東区"を選択すると
まずその行の "町名" データが削除されます。
そのあと、項目[町名]にすでに入力済みのデータから"東区"の町名リストが作成され、入力支援リストに表示されるようになります。
 
- 目次 -  


b:2 [町名] の入力支援リスト作成について(図解)
フォーム編集時に、入力支援ボタンもしくは手入力の更新でプロシージャを次の順で呼び出します


- 目次 -  
 
b:3 フォーム編集時に町名の入力支援リストを作成します

[町名]の候補を作成します
  項目[区] に入力されたデータで [ソース値更新] から次のプロシージャを呼び出します
1.[prc町名候補の範囲を確認] で、町名のリストを作成する範囲を設定します
2.[prc町名の候補を設定] で 項目[町名]のデータを整えます
3.[prc項目値を配列変数に代入] で 町名のデータを 配列変数 "&m町名リストDim" に取り込みます
方法1:項目[区]に設定している[入力支援ボタン]で選択入力して、ソース値更新します
方法2:項目[区]の値を直接 手入力、変更して、ソース値更新します
   
⇒⇒ 町名選択データは、別ファイルに登録しているデータ(マスター)から作成するのではなく、
項目[町名] に入力済みのデータから生成します
   
  項目[区] で指定した文字列で 町名に使用するデータを絞り込みます。
なお 項目[区] の一覧は 名札メイン で登録しています。
b:3-1 方法1:項目[区]の[入力支援リスト]から "区" を選択します


  ↓ 確定後 次に進みます
 
b:3-1-1
104 手続き定義開始 txt区入力支援ボタン::入力支援クローズ(参照 文字列 &入力文字列,長整数 &モード)
 
  &入力文字列 : [入力支援ボタン]で選択入力された値(文字列)が代入されています
&モード : 入力したデータが確定されたか( 1 )、キャンセルされたかを示す番号( 0 )が格納されます(論理値を返している)
105 if ( &モード )
 
 &モード の値は 1(イチ)か0(ぜロ):論理値になります
106 &m町名リスト作成Run = 1
 
 町名のリストを作成するフラグを立てました(上げました)
107 &m選択区 = &入力文字列
 
  [入力支援ボタン]で選択入力された 区 を局所変数に代入します
108 end
   
109 手続き定義終了
   
b:3-2 方法2:項目[区]を直接手入力で更新します



  ↓ 確定後 次に進みます


 
b:3-2-1
63 手続き定義開始 txt区::入力前(参照 文字列 &編集文字列)
   
64 &m町名リスト作成Run = 0
 
データの入力前に、フラグ:&m町名リスト作成Run を降ろします(下げます)
65 手続き定義終了
66  
67 手続き定義開始 txt区::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続)
68 if ( &モード )
69 &m町名リスト作成Run = 1
 
データが入力されたので フラグ:&m町名リスト作成Run を立てます(上げます)
70 &m選択区 = &編集文字列
 
入力された値を &m選択区 に代入します
71 end
72 手続き定義終了
73  
74 手続き定義開始 txt区::編集開始()
75 メソッド呼び出し &this.編集選択位置設定( 1 ,-1 )
 
入力時に値をすべて選択済みの状態にします 
&this は、イベントが発生したオブジェクトの名前が格納されている定数です
   
76 手続き定義終了
   
b:3-3 ソース値更新
方法1、方法2 いずれも ソース値更新から、次のプロシージャ "prc町名リスト範囲確認" を呼び出します
 
 
    
b:3-3-1
78 手続き定義開始 txt区::ソース値更新()
   
79 if ( &m町名リスト作成Run )
80 &m町名リスト作成Run = 0
 
フラグ:&m町名リスト作成Run を降ろす
81 手続き実行 prc町名候補の範囲を確認( )
82 end
   
83 手続き定義終了
- 目次 -  
 

b:3-4 prc町名候補の範囲を確認
項目[区] のデータを判定して次の処理に進みます

 
b:3-4-1
177 手続き定義開始 prc町名候補の範囲を確認( )
   
178 メソッド呼び出し @フォーム.更新モード設定( 0 )
 
  フォームを表示モードにします
180 if ( &m選択区 <> #u )
 
  &m選択区 <> #u (未定義)じゃない場合、次行を実行します
181 行訂正 [町名] = #U
 
  すでに町名に値が入っている場合、その値も作成する町名に含まれてしまうので削除します(フォームは表示モードになっているので "行訂正"でOKです)
182 手続き実行 prc町名リスト更新( &m選択区 )
 
  "区" の値を引数にして、つぎのプロシージャを呼び出します
183 else
 
  &m選択区 = #u の場合
184 &m町名リストDim = { #u }
 
  &m選択区が空欄(未定義)のときには、町名リストを未定義にして以降の処理はしません
185 end
   
186 手続き定義終了
- 目次 -  

b:3-5 prc町名の候補を設定
町名のリストを作成するプロシージャです。引数 &選択区 には、"区"の名称が代入されています



 
b:3-5-1
188 手続き定義開始 prc町名の候補を設定( 文字列 &選択区 )
   
189 編集表 &mMultiTblNum
190 解除 *
 
  &mMultiTblNum は、フォーム開始時に多重化した表です。フォームを閉じると共に自動で閉じられます
&mMultiTblNum は、常時開いているので利用する際には 解除 * を忘れずに
191 絞り込み [町名]{ = #定義 }
192 絞り込み [区]{ *&選択区* }
193 並べ替え { [郵便番号] 昇順 }
194 絞り込み 単一化 = { [町名] }
 
  絞り込んで、並べ替えて、単一化して 取り込むリストのできあがりです
196  手続き実行 prc項目値を配列変数に代入 ( &mMultiTblNum , "町名" , &m町名リストDim )
 
  プロシージャ prc項目値を配列変数に代入 は共通です 
198 解除 *
199 * &mMultiTblNum から明示的に切替えなくても、このプロシージャが終了するとフォームの編集対象表(&hwindow) に切り替わります
 
  &mMultiTblNum は開いたままですが、このプロシージャが終了すると自動的にフォームの編集対象表(表番号:&hwindow) に切り替わります
200 手続き定義終了
   
b:3-6 prc項目値を配列変数に代入 ( &m町名リストDim に値を取り込みます )
 
  引き続き、配列変数 &m町名リストDim に値を取り込むプロシージャを呼び出します。
 手続き実行 prc項目値を配列変数に代入 ( &mMultiTblNum , "町名" , &m町名リストDim )
共通プロシージャなので詳細は a:4-3 をご覧になってください
- 目次 -  

サンプルC:携帯電話会社の入力支援リストを、入力済みのデータから作成します(入力するごとに更新します)

項目[携帯会社]に入力すると、項目[携帯会社]の入力支援リストが更新されます。
フォーム開始時には、項目[携帯会社]に入力されているデータに基づいて入力支援リストが登録されます。

c:1 携帯会社の入力支援リストについて、フォームでの表示と動作の概要
フォーム開始時に作成されたリストが表示されています


c:1-1 新規に携帯会社を登録します。
 

登録すると、次のようにリストが更新されました



c:2 携帯会社の入力支援リスト作成のプロシージャの流れ(図解)
[フォーム開始時実行]コマンドボタンと、項目の値を編集して確定モードで終了した時に発生する[ソース値更新]イベントから呼び出すプロシージャ


- 目次 -
c:3 フォーム開始時に携帯会社の入力支援リストを作成します
  手続きの流れは左図のようになります

フォーム開始時に、cmdStartupClick が実行されて
プロシージャの [ prc携帯会社の候補を作成 ] を呼び出します

⇒⇒ 携帯会社選択データは、別ファイルに登録しているデータ(マスター)から作成するのではなく、
項目[携帯会社] に入力済みのデータから生成します
c:3-1 prc携帯会社の候補を作成

項目[携帯会社]のデータを整えて入力支援リストを作成する準備をします
 
 
c:3-1-1
202  手続き定義開始 prc携帯会社の候補を作成( )
   
203 メソッド呼び出し @フォーム.更新モード設定( 0 ) 
 
  フォームを表示モードにします
205 編集表 &mMultiTblNum
206 解除 *
 
  &mMultiTblNum は、フォーム開始時に多重化した表です。フォームを閉じると共に自動で閉じられます
&mMultiTblNum は、常時開いているので利用する際には 解除 * を忘れずに
207 絞り込み [携帯会社]{ =#定義 }
208 並べ替え  { [携帯会社] 昇順 }
209 絞り込み 単一化 = { [携帯会社] }
 
  入力データのある行だけを絞り込んで、並べ替えて、単一化して 取り込むリストのできあがりです
211 手続き実行 prc項目値を配列変数に代入 ( &mMultiTblNum , "携帯会社" , &m携帯会社リストDim ) 
 
  プロシージャ prc項目値を配列変数に代入 は共通処理です 
213 解除 *
   
214 手続き定義終了
   
c:3-2 prc項目値を配列変数に代入 (&m携帯会社リストDim に値を取り込みます)
  引き続き、配列変数 &m携帯会社リストDim に値を取り込むプロシージャを呼び出します。
 手続き実行 prc項目値を配列変数に代入 ( &mMultiTblNum , "携帯会社" , &m携帯会社リストDim ) 
共通プロシージャなので詳細は a:4-3 をご覧になってください
- 目次 -  
   
c:4 フォーム編集時に携帯会社の入力支援リストを作成します
   
c:4-1 ソース値更新
プロシージャ "prc携帯会社の候補を作成" を呼び出します
 
 
    
   
c:4-2 prc携帯会社の候補を作成
項目[携帯会社]のデータを整えて入力支援リストを作成する準備をします
 
  [prc携帯会社の候補を作成 ] は
フォーム開始時と同じプロシージャなので、詳細は c:3-1 をご覧になってください
c:4-3 prc項目値を配列変数に代入(&m携帯会社リストDim に値を取り込みます)
  引き続き、配列変数 &m携帯会社リストDim に値を取り込むプロシージャを呼び出します。
 手続き実行 prc項目値を配列変数に代入 ( &mMultiTblNum , "携帯会社" , &m携帯会社リストDim ) 
共通プロシージャなので詳細は a:4-3 をご覧になってください
   
- 目次 -  


D サンプルD:性別、血液型を、ファイル"入力支援マスタ.tbx" から作成します
   
d:1 [性別]、[血液型] の入力支援リストについて、フォームでの表示と動作の概

フォームを起動すると、項目[性別]、[血液型]の入力支援リストに、ファイル "入力支援マスタ.tbx"  から作成されたデータが登録されています。




 

d:2 [性別]、[血液型] の入力支援リストは次のように作成します(図解)

[フォーム開始時実行]コマンドボタンから呼び出すプロシージャ


- 目次 -
d:3 フォーム開始時に、[性別]  と [血液型] の入力支援リストを作成します
 
 
  手続きの流れは左図のようになります
フォーム開始時に、cmdStartupClick が実行されて
プロシージャの [ prcマスターから候補を作成 ] を呼び出します



 
⇒⇒ 性別、血液型のデータは、マスターファイル("入力支援マスタ.tbx" )から作成します。
d:3-1 prcマスターから候補を作成 ( &mTbl入力支援マスタ , "性別" , &m性別リストDim )
prcマスターから候補を作成 ( &mTbl入力支援マスタ , "血液型" , &m血液型リストDim )
 



フォームを開いたときにcmdStartupClickから実行する
[prcマスターから候補を作成]
には
引数に "マスターファイル"と
"性別" または "血液型" を
設定しています。

プロシージャ
[prcマスターから候補を作成]
では
配列変数にデータを取り込むまでの処理を一貫して行っています

[prc県名の候補を作成]と同じく、簡単に専用(共通)のプロシージャを使うようにすることもできます。

またトレース出力のサンプルコードも含まれています。

なお右図では
トレース出力に関するコードを除いています。

※トレース出力については
次の章で解説します。


 
 
d:3-2 prcマスターから候補を作成 ( 文字列 &tbl入力支援マスタ , 文字列 &グループ値 , 参照 文字列 &取得リストDim[] )
  次の解説に トレース出力 は含まれていません。
 
240 手続き定義開始 prcマスターから候補を作成 ( 文字列 &tbl入力支援マスタ , 文字列 &グループ値 , 参照 文字列 &取得リストDim[] )
 
  引数に 表ファイル名:&tbl入力支援マスタ , グループ:性別か血液型 , 配列変数名:入力支援リストに表示されます
241 変数宣言 自動,整数  { &openTblNum , &importTblNum }
242 変数宣言 自動,整数  { &cnt , &dimMaxNum }
   
253 &openTblNum = #表番号取得 ( &tbl入力支援マスタ )
 
  &tbl入力支援マスタ が開かれているかどうか調べます。表が開かれていれば表番号が返ります
254 if ( &openTblNum > 0 )
255 編集表 &openTblNum
 
  &tbl入力支援マスタ が開かれている場合、&tbl入力支援マスタ を 編集表に指定します
259 メソッド呼び出し ハンドル = &openTblNum,@フォーム.更新モード設定( 0 )
260 多重化
 
  フォームを表示モードにして多重化します
261 &importTblNum = #IS表
 
  多重化した表の表番号を取得します
多重化した表をそのまま使用するので、ここの処理で使用する編集対象表を指定していることにもなります
262 else
 
  &tbl入力支援マスタ が開かれていない場合には、&tbl入力支援マスタ を開いて、表番号を取得します
263 表 &tbl入力支援マスタ
264 &importTblNum = #IS表
265 end
   
269 絞り込み [グループ値]_&グループ値
270 並べ替え { [表示順]昇順 }
 
  &tbl入力支援マスタ を "性別" , "血液型" どちらかのグループ名で絞り込んで、&tbl入力支援マスタに記載している "表示順" で並べ替えます
272 if ( .not #eof ) ~ end の処理で、項目値を配列変数に代入します。
 
  なお、手続き実行 prc項目値を配列変数に代入 ( &importTblNum , "リスト" , &取得リストDim ) とすることもできます。
引数 "リスト" は、表 &tbl入力支援マスタ の項目名です。プロシージャ [prc項目値を配列変数に代入] は共通処理です。 
293 終了 表 &importTblNum
297 編集表 &hwindow
 
  終了 表 の後では、編集表を指定しておきます
302 手続き定義終了
   
d:3-3 prc項目値を配列変数に代入( &m性別リストDim , &m血液型リストDim に値を取り込みます)
 
  引き続き、配列変数 &m性別リストDim , &m血液型リストDim に値を取り込むプロシージャを呼び出します。
 手続き実行 prc項目値を配列変数に代入 ( &importTblNum , "リスト" , &取得リストDim ) 
引数 "リスト" は、表 &tbl入力支援マスタ の項目名[リスト]のことです

共通プロシージャなので詳細は a:4-3 をご覧になってください
- 目次 -  

T トレース出力
ここでは 手続き prcマスターから候補を作成 に含まれる、トレース出力をサンプルにして解説します
   
  トレース出力はプログラムの途中で
・変数に取り込んだ値を確認するときに便利です
・構文:トレース出力  <計算式>|_<計算式>,… ですが、<計算式> は自由に書くことができます
   
t:1 基本設定
t:1-1 桐ヘルプより

■説明
•トレース出力ウィンドウに<計算式>の結果を文字列に変換して出力します。
•このコマンドは、イベントハンドラのデバッグ用として使用します。
•トレースウィンドウを使用するには、あらかじめ環境設定の[一括]タブを選択し、
 [高度な設定]ダイアログの[トレース出力ウィンドウを使用する(再起動時に有効)]のチェックをONにしておかなければいけません。
•トレース出力ウィンドウを表示していない場合または[トレース出力]を ON にしていない場合は、なにもしません。

■構文
トレース出力  <計算式>|_<計算式>,…

■パラメータ
<計算式>|_<計算式>,…トレース出力ウィンドウに出力する値または式を指定します。<計算式>の前に _ をつけると、計算元となった式も一緒に表示します。
t:1-2 コマンド "トレース出力" では
コマンドの後に記載したテキストや計算式(計算結果が表示されます。表番号やファイル名、その他いろいろ出力できます)を
トレース出力ウィンドウに表示します。エラーにならなければ 『何でも書いてよい』ということです。
実際には、トレース出力を使って 必要なところで必要な内容を表示するようにしましょう。
※"トレース出力" は、単に表示させるだけのコマンドだとお考え下さい。 
   
t:2 トレース出力内容の選択 の設定と 出力サンプル
  全てにチェックを入れていると、情報が多すぎるので次のように設定しましょう。

[表示] → [トレース出力ウィンドウの設定] → ・・・・



t:2-1  "Sample.WFX" を実行して処理をトレース出力ウィンドウに表示します

上記の設定のまま"Sample.WFX" を実行すると
トレース出力ウィンドウが表示されて、フォーム開始時に実行されるコマンドが出力されます。
ひと通りの処理が完了しアイドリング状態になったら
トレース出力の設定で、
[トレース出力を終了する] をチェックします

※トレース出力ウィンドウが非表示になります
  改めて下図のように
[メニュー] → [表示] から トレース出力ウィンドウチェックを入れると、トレース出力ウィンドウが再表示されます。



   
t:2-2 出力内容をメモ帳に貼り付けます
トレース出力ウィンドウ上で [右クリック] → [全て選択] → [コピー] で、メモ帳に貼り付けます



◇◇◇ この出力内容に必要な情報を [トレース出力] で追加することになります ◇◇◇
   
t:2-3 参考)トレース出力内容の選択 で、全てにチェックを入れていた場合
次のような出力内容になります

編集表(表番号も表示されています)の他、出力情報が増えていますが
必要な情報があるかどうかは ? ですね~


- 目次 -  
t:3 トレース出力コマンド は、必要な情報を得たい部分に設定します

関数で取り出した値(変数の値、表番号やファイル名など)を表示したりして、プログラムが期待通りに動いているかチェックします。
※パラメーター:<計算式>の前に _ をつけると、計算元となった式も一緒に表示します。
※<計算式>は広い意味で使われています。"文字列"も計算式です。

トレース出力ウィンドウに表示された中から、トレース出力コマンドを設定した場所を見つけるために、
チェックポイントとして目印に "★" や、
結果が出力される範囲だとわかる文章を解説として追加しておくと便利です。
t:3-1 トレース出力 の設定例
サンプルのプロシージャは [prcマスターから候補を作成] です。
赤で囲んだ部分と、アンダーラインの部分が、トレース出力コマンドの設定例 になります



t:3-2
トレース出力は以下のようになります
 
- 目次 -
t:3-3 設定例の解説

以下の出力サンプルでは、 "Sample.WFX" を開く前に"入力支援マスタ.tbx"(ダウンロードサンプルに含まれます)を開いています。
また "utx_list3_(1).tbx"(サンプルとは何の関係もありません) を開いています (^^♪
t:3-3-1



この部分ではトレース出力コマンドは使っていませんが、トレース出力ウィンドウでは以上のように出力されます

"&tbl入力支援マスタ" の値が "D:\Chapter10\入力支援マスタ.tbx" と表示され
"&グループ値" の値が "性別" と表示されています。変数に代入されている値が出力されています。
   
t:3-3-2
 


ここでは、トレース出力を開始と終了の文章で挟んでみました
&traceON = 1 と
条件 ( &traceON ) を組み合わせることで、トレース出力を ON・OFF するように設定できます。
* &traceON = 1 と アスタリスクを使って無効にすれば OFF ということです。
例)
条件 ( &traceON ) トレース出力 "★", "  ", _#is表, "  ", _#表ファイル名( #is表 )
としておけば、 ON・OFF スイッチを取り付けたことになりますね。
   
t:3-3-3



ここでは ファイル"入力支援マスタ..WFX(tbl)" を開いた後に "Sample.WFX" を開いています
つまり &openTblNum = #表番号取得 ( &tbl入力支援マスタ ) で、多重化するもとの表が確認できます。
★ トレース出力で、表番号が 4、ファイル名が "入力支援マスタ.tbx" と表示しています
★ そして多重化した編集表の表番号が 7、ファイル名が "入力支援マスタ.tbx" と表示されています

t:3-3-4



繰り返すごとに、配列変数に取り込んでいる値を出力しています。
※ここでは、どの範囲(取得グループ)を使っているかも表示させています。

t:3-3-5



終了 表 &importTblNum の後では、自動的に 『編集表は一番小さな表番号』 に切り替わります
ここでは
★ トレース出力で、表番号が 1、ファイル名が "utx_list3_(1).tbx" と表示されています

そして 編集表 &hwindow で、フォームの正しい編集対象表を指定します
★ トレース出力で、表番号が 5、ファイル名が "Sample..tbx" と表示されました

※複数の表を開いている時に、表を切り替えながら操作していると フォーム"Sample.wfx"の編集対象表が"Sample.tbx"以外になることは少なくありません

t:3-3-6 ◇次のサンプルは プロシージャ [prc項目値を配列変数に代入] を使用しています(このトレース出力設定はサンプル作成後 削除しています)




指定項目の項目値を取り出した結果が表示されています

t:3-3-7 ◇次のサンプルは "Sample.kex" とは別ファイルのプロシージャです




ここでの変数 &住所1、&住所2 は参照渡し となっています。
このプロシージャを呼び出したプロシージャに、ここで取得した値を戻します。
トレース出力で、取得した値を確かめています。
- 目次 -  
参考) 整形ユーティリティのご紹介

トレース出力をメモ帳で表示すると、行数が多くなると見通しが悪くなります。
【整形ユーティリティ】を使うと次のように必要な情報を判りやすく表示することができます
【整形ユーティリティ】は、ONnoji さんの[桐の釣魚大全] もしくは 多游さんの【多遊】の桐のホームページからダウンロードできます。
ONnoji さんのサイト、多游さんのサイトへのリンクは、トップページからご覧になってください。
  次のトレース出力整形結果をご覧になってください。トレース出力ウィンドウの内容が整理されて判りやすく表示されています。
プログラムを作成する際に、プロシージャの全体像そして指定したトレース出力で中途経過が見られると便利ですね。
またプログラムする際には、ここに表示される部分を押さえておけば良いともいえます。

   
- 目次 -  

番外編 (Chapter 10)、終わり、大変お疲れ様でした (^_^)ノ
  Special Thanks ONnojiさん、AKさん