プログラミング入門 (桐s-2024LT:ツールバー編)
Chapter2:データーを検索して自動入力させましょう | |
改定版 /更新日:2024年10月2日 |
プロシージャ:[手続き]、[一般手続き]、[イベントハンドラ]のこと |
ヒント | イベントファイルが使用できるようになっているか確認するには |
適当なフォームを定義で開いて ツールバー [書式]→ [定義画面の設定] で [詳細プロパティを使用する] にチェックが入っていればOKです。 ※一度設定すればOKです(桐自体の設定で、フォームごとの設定ではありません) |
1 |
ここでは郵便番号を入力して、郵便番号簿から住所を検索し自動入力させます。 ※郵便番号簿とリンクするのではありません(関数を使った表引き とは違います) |
|
2 | "住所録.wfx" に イベントファイルを設定します。 |
"住所録.wfx" を 定義で開いて 項目名:郵便番号の明細部の テキストオブジェクト をダブルクリックして、[オブジェクトの属性] を表示します。 続いて、イベントタブの イベント:[入力前] をダブルクリックします。 ※イベントファイルがない場合 ファイル名( ここでは "住所録.kex" ) を入力します(保存場所は 表、フォーム と同じフォルダを指定してください) ファイル名を入力して [OK] でイベントファイルが立ち上がります |
|
※拡張子は桐が自動付加してくれます。表、フォームには大文字で付加しますが、イベントファイルの拡張子は小文字( .kex )を付加するようです。 |
|
2-1 |
"住所録.kex" に [入力前]イベントバンドラが設定され、表示されます。 |
2-2 |
引き続き、[入力後]、[編集開始]、[ソース値更新] もダブルクリックしてイベントバンドラを設定します。 |
|||
2-3 |
次のようにできあがりました。 |
|||
2-4 |
フォーム"住所録.wfx" の [郵便番号] の明細行(テキストオブジェクト)の属性は次のようになっています。
|
|||
|
3 |
準備ができたので、次はプログラムコードを入力していきましょう(コメント部分は書かなくても構いません)。 頑張って入力してください。 |
||||
3-1 |
名札 メイン |
||||
|
|||||
編集対象表 をきちんと確定しておきましょう。 ここでは 局所変数を宣言しています。宣言できる変数には、共通、固有、局所そして自動変数があります。 イベント処理では局所変数を原則としましょう。 フォームが独立して動けるので変数を自分だけのものとしておくことがトラブル回避になります。 |
|||||
3-2 | テキストオブジェクト [t郵便番号] に設定したイベントプロシージャ(イベントバンドラ) | ||||
3-2-1 | t郵便番号::入力前(参照 文字列 &編集文字列) | ||||
|
|||||
&編集文字列 に入力されていた値が代入されているので、名札メイン で設定した、局所変数 "&m入力前値" に保存しておきます。 | |||||
3-2-2 | t郵便番号::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続) | ||||
|
|||||
ここでは、値を入力した際の全角や余計な空白を削除して 郵便番号のデータとして整形しています。 | |||||
|
|||||
3-2-3 | t郵便番号::編集開始() | ||||
|
|||||
入力時に値をすべて選択済みの状態にします。 [編集選択位置設定] についてはイベントリファレンスをご覧になってください。 ※ また &this も便利です。 |
|||||
3-2-4 | t郵便番号::ソース値更新() | ||||
|
|||||
ここでは入力した値が既に入力済みの値と同じだった場合と入力している値を削除した場合には何もせず、 そうでない場合に住所検索を実行するとしています。 また住所検索処理は別に準備している 一般プロシージャ(手続き) で実行します。 最後に都道府県と住所1を入力させたら、次の準備としてフォーカスを[住所2]に移動します。 |
|||||
3-3 | 一般手続き(プロシージャ):prc住所検索() | ||||||||||||||||||
郵便番号簿から住所を取得して自分(住所録)に値を入力する、実際の処理です。 [自分自身の"表"] と [検索する"表"] は、桐が自動的に割り当てる [表番号] を取得して区別します。 表番号は桐が自動的に 1~40までを割り当てます。 表は表番号で簡単に切り替えられるので、順を追って使用(処理)する表を設定します。 |
|||||||||||||||||||
|
|||||||||||||||||||
3-3-1 |
|
||||||||||||||||||
接頭辞に "prc" と付けていますが、これは ” 他から呼び出される 一般手続き(一般プロシージャ) ” と明確にわかるようにです。 また接頭辞に "cmd" と付けると、コマンドボタンを押した際の処理としておけば その処理から呼び出すのが "prc" で始まるプロシージャ。といった具合に整理できます。 ※"prc"で始まるプロシージャ は ひとつの機能 にするように心がけましょう。 汎用性につながりプログラムの使いまわしができるようになっていきます。まあ、先々の話です。 |
|||||||||||||||||||
3-3-2 |
|
||||||||||||||||||
ここでは 自動変数を使います。ここでのイベント処理が始まるときに宣言して、処理が終わればなくなってしまう使い捨て変数とお考え下さい。 | |||||||||||||||||||
|
|||||||||||||||||||
3-3-3 |
|
||||||||||||||||||
"住所録.tbx" の表番号を取得しています。 | |||||||||||||||||||
3-3-4 |
|
||||||||||||||||||
"郵便番号簿.tbx" を開いて表番号を取得しています(フォーム "郵便番号簿.wfx" は必要ないので開きません)。 | |||||||||||||||||||
3-3-5 |
|
||||||||||||||||||
検索コマンドは特別な指定をしていなければ表の最初から検索を始めます。 指定されたデータが存在しない場合、終端行に移動するので、終端行でなければ検索値と一致するものがあったということで その部分の所定項目からデーターを取得して、変数に代入します。 検索が終わったら "郵便番号簿.tbx" を閉じます。 |
|||||||||||||||||||
3-3-6 |
|
||||||||||||||||||
処理対象とする表 "住所録.tbx" をきちんと指定して、郵便番号簿から取得した値を所定の項目に入力させます。 | |||||||||||||||||||
3-3-7 |
次の構文ではフォームの更新モード(表示か編集)を調べて、それに応じて必要なコマンドを使用するようにしています。 一種の定型文だとお考え下さい。 |
||||||||||||||||||
|
|||||||||||||||||||
それでは保存終了して、住所録フォームで郵便番号を入力して住所が表示されるか確かめてください。 |
Chapter 2 終わり、お疲れ様でした (^_^)ノ | |
Special Thanks ONnojiさん、AKさん |
参考) | ※行番号は参考としてください |
サンプルコードをコピペしてうまく動作しないときには、一旦削除して手入力してください。※プロシージャごとに処理すれば作業がしやすいでしょう。 |
1 | 名札 メイン |
2 | |
3 | オブジェクト操作 @フォーム.編集対象表 = #一括パス名 + "住所録.tbx" /* 編集対象表は、メイン処理でのみ変更できます */ |
4 | |
5 | 変数宣言 局所,文字列 { &m入力前値 , &m入力後値 } |
6 | 変数宣言 局所,文字列 { &m郵便番号 } |
7 | |
8 | * |
9 | |
10 | 手続き定義開始 t郵便番号::入力前(参照 文字列 &編集文字列) |
11 | &m入力前値 = &編集文字列 /* 既存入力値を取得します。半角 です。 */ |
12 | 手続き定義終了 |
13 | |
14 | 手続き定義開始 t郵便番号::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続) |
15 | &編集文字列 = #半角 ( &編集文字列 ) /* 全角入力された場合には半角にします。 */ |
16 | &編集文字列 = #TRIM( &編集文字列 , 4 ) /* 空白を取り除きます。 */ |
17 | &m入力後値 = &編集文字列 /* 半角にして空白を取り除いた値になります */ |
18 | &m郵便番号 = #文字置換( &編集文字列 , "-" , "" ) /* "-" が入力されている場合は、削除して &m郵便番号 に代入します。 */ |
19 | |
20 | if ( #文字数( &m郵便番号 ) = 7 ) /* 郵便番号は "-"がなければ7桁です */ |
21 | &編集文字列 = #部分列( &m郵便番号 , 1 , 3 ) + "-" + #右側文字列( &m郵便番号 ,4 ) |
22 | * 最初から3文字取り出した値と、4文字目から取り出した値を組み合わせ正しい位置に "-" を入力します。 |
23 | else |
24 | if ( &m入力後値 = #未定義 ) |
25 | * 未定義の場合何もしません。郵便番号を削除した場合に未定義になります。 |
26 | else |
27 | &編集文字列 = &m入力前値 |
28 | &入力継続 = 1 |
29 | * 入力した値が "-" を除いて7桁でない場合には、元の値に戻して入力を継続します( &入力継続 = 1 についてはイベントリファレンスを参照してください)。 |
30 | end |
31 | end |
32 | |
33 | * ここまでの処理で \ |
34 | &m入力前値:元々入力されていた値。&m入力後値:半角、空白を取り除いた値。 \ |
35 | &m郵便番号:"-" を除いた値。 &編集文字列(このイベント処理の引数):"-" を追加した値、*#文字数( &m郵便番号 ) = 7 の場合。 \ |
36 | となります。 |
37 | 手続き定義終了 |
38 | |
39 | 手続き定義開始 t郵便番号::編集開始() |
40 | メソッド呼び出し &this.編集選択位置設定( 1 ,-1 ) /* &this は、イベントが発生したオブジェクトの名前が格納されている定数です。*/ |
41 | 手続き定義終了 |
42 | |
43 | 手続き定義開始 t郵便番号::ソース値更新() |
44 | if ( &m入力後値 = &m入力前値 .or &m入力後値 = #未定義 ) |
45 | * 入力前と値が同じ場合、また入力値が削除された場合には何もしません。 |
46 | else |
47 | 手続き実行 prc住所検索() |
48 | end |
49 | |
50 | メソッド呼び出し @t住所2.フォーカス設定() |
51 | 手続き定義終了 |
52 | |
53 | 手続き定義開始 prc住所検索() |
54 | 変数宣言 自動,整数 { &myTblNum , &lookupTblNum } |
55 | 変数宣言 自動,文字列 { &住所1 , &住所2 } |
56 | &myTblNum = &hwindow /* &hwindowには現在のフォームの編集対象表番号が収納されています。 */ |
57 | |
58 | 表 "郵便番号簿.tbx" |
59 | &lookupTblNum = #IS表 |
60 | |
61 | 検索 [郵便番号] { &m郵便番号 } |
62 | if ( .not #eof) /* 終端行でなければ。つまり検索値が存在すれば。 */ |
63 | &住所1 = [住所1] , &住所2 = [住所2] + [住所3] |
64 | end |
65 | |
66 | 終了 表 &lookupTblNum /* 郵便番号簿を閉じる */ |
67 | |
68 | 編集表 &myTblNum /* 住所録の編集対象に戻る */ |
69 | |
70 | 変数宣言 自動,長整数{&更新モード} |
71 | メソッド呼び出し @フォーム.更新モード取得(&更新モード) |
72 | if ( &更新モード = 0 ) |
73 | 行訂正 [都道府県] = &住所1 , [住所1] = &住所2 |
74 | else |
75 | 項目値代入 [都道府県] = &住所1 , [住所1] = &住所2 |
76 | end |
77 | 手続き定義終了 |