プログラミング入門 (桐s-2024LT:ツールバー編)
Chapter9:復習&補足 (^_^)v | |
改定版 /更新日:2024年10月3日 |
プロシージャ:[手続き]、[一般手続き]、[イベントハンドラ]のこと |
0 | Capter1~8 まで学習してきましたが、視点を変えて学習内容を復習してみたいと思います。 | |||||||||||||||||||||||||||||||||||||||||||||||||||
1 | フォームを起動する際に、自動的にプロシージャ(手続き)を実行する <<コマンドボタン[cmdStartup]を準備しておいて、フォーム起動時に実行させます>> |
|||||||||||||||||||||||||||||||||||||||||||||||||||
1-1 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
1-1-1 | フォーム"住所録.wfx"を定義で開いて、コマンドボタン [cmdStartup] をワークスペースに配置します。属性は以下の通りです。 | |||||||||||||||||||||||||||||||||||||||||||||||||||
1-1-2 | [フォームの属性] → [オプション] → [実行コマンドの開始時]に 作成した [cmdStartup] ボタンを登録します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
1-2 |
ソースコードを書きます。 ここでは、フォーム起動時に保存した変数値を読込んで、その値でフッタ部分の表示/非表示を反映させます。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||
1-2-1 |
手続き定義開始 cmdStartupClick( ) 保存した変数値を読込むプロシージャ(手続き)とフッタ部分の表示/非表示を反映させるプロシージャを呼び出しています。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
1-2-2 |
手続き定義開始 prc変数読込( 文字列 &変数保存表 ) 保存している変数値を読込む処理です。"郵便番号簿.kex"からコピーしてくると良いでしょう(対象となる変数名は変更してください)。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
1-2-3 |
手続き定義開始 prc起動時フッタ表示( ) フッタ部分の表示/非表示を反映させます |
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
1-3 | できあがりは次のような動作になります。 | |||||||||||||||||||||||||||||||||||||||||||||||||||
フッタ表示の状態でフォームを閉じると、次に開いたときに フッタ表示状態になっています。 フッタを非表示の状態でフォームを閉じると、次に開いたときにフッタが非表示の状態となっています。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||
2 |
フォームを閉じる際に、自動的にプロシージャ(手続き)を実行する <<フォーム終了時実行コマンドボタンを登録しておきます。※応用方法がいくつか考えられます>> |
||||
ただ b) の[フォーム終了]イベント は実行させる内容によってはトラブルの原因になるようです。 『君子危うきに近寄らず』ということで、コマンドボタンを使用する方法がおススメです。 ※またこのサイトで紹介している INF_Framework を適用する場合 [フォーム終了]イベント を使用するには別途手順があります。 |
|||||
2-1 |
フォーム右上の [ X ]
(閉じる)ボタンを押すと、登録している終了時実行コマンドが起動します。 重要)別途コマンドボタン等でフォームを閉じた場合には、終了時実行コマンドは起動しません(実行されません)。 |
||||
2-1-1 |
次のサンプルでは、終了時実行コマンドに [cmdMainMenu]を登録しています。 このフォームでは [cmdMainMenu] はフォームを終了するためのコマンドボタンにもなっているので、最適なボタンを登録していることになりますね。 |
||||
|
|||||
2-2 |
応用例としてフォーム終了時のプロシージャ(手続き)を準備しておいて、 [X](閉じる)ボタンを押した際に自動実行させる。またその他のボタンを押した際には、終了時のプロシージャを実行するという方法が考えられます。 |
||||
2-2-1 | |||||
2-2-2 | |||||
2-2-3 |
フォーム終了時に押すコマンドボタンには、終了時に実行するプロシージャを登録しておきます。 |
||||
3 | 多重化して処理をおこなう | ||||||||||||||||||
ここまでの学習でも、多重化した処理をご紹介してきました。補足として次の例をご案内します。 | |||||||||||||||||||
3-1 |
変数値を保存している表ファイル"変数保存表.tbx" ですが、何らかの理由でファイルが開かれている場合にはエラーが発生します。 そこで次のように "変数保存表.tbx" がすでに開かれているときには、多重化して開きます。 ※ "変数保存表.tbx" は実際の作業時にユーザーが開く表ではないので本来は不要な処理ですね(ここでは学習の為ということです)。 |
||||||||||||||||||
3-1-1 |
"郵便番号簿.kex" を定義で開いて "プロシージャ prc変数読込( 文字列 &変数保存表 )" を次のように変更します。 ※"住所録.kex" も同様に変更します。 |
||||||||||||||||||
3-1-2 |
多重化した表番号を &importTblNum に代入します。
&openTblNum が "0" の場合、"変数保存表.tbx"を通常通り開いて 以上の処理で、"変数保存表.tbx" を通常通り開いても多重化して開いても、同じ変数名 "&importTblNum" に表番号を代入できます。 |
||||||||||||||||||
|
|||||||||||||||||||
3-2-1 | ライブラリ "Template.CMX" は次のように変更します。 | ||||||||||||||||||
3-2-2 |
多重化した表番号を &exportTblNumに代入します。
表番号を &exportTblNumに代入します。 以上の処理で、"変数保存表.tbx" を通常通り開いても多重化して開いても、同じ変数名 "&exportTblNum" に表番号を代入できます。 |
||||||||||||||||||
3-2-3 |
ここではコメント行にしています。特に必要な状況になった時には有効にしてください。 ※フォームウィンドウのハンドルと編集対象表の表番号は同値になります。 |
4 | その他(Tips) |
4-1 |
フォーム"郵便番号簿.wfx"を定義画面で開いて、テキストボックス "txt読み込みファイル名表示" を作成してください。 属性のソースは #ファイル名( &m読み込みファイル名 , 2 ) とします。 最後に ファイル選択の為の入力支援ボタンが付いている オブジェクト"txt読み込みファイル名"の上に重ねます。 ※出来上がったら、フォームを開いてその効果を確かめてください。 |
3-1-2 | |
以上で、この講座は終了です。お役に立てれば幸いです。
Chapter 9 終わり、お疲れ様でした (^_^)ノ | |
Special Thanks ONnojiさん、AKさん |
参考) | ※行番号は参考としてください |
サンプルコードをコピペしてうまく動作しないときには、一旦削除して手入力してください。 |
【住所録.kex】 | |
1 | 名札 メイン |
2 | |
3 | 変数宣言 局所,文字列 { &m編集対象表 = #一括パス名 + "住所録.tbx" } |
4 | オブジェクト操作 @フォーム.編集対象表 = &m編集対象表 /* 編集対象表は、メイン処理でのみ変更できます */ |
5 | |
6 | 変数宣言 局所,文字列 { &m変数保存表 = #一括パス名 + "変数保存表.tbx" } |
7 | |
8 | 変数宣言 局所, 文字列 { &m入力前値 , &m入力後値 } |
9 | 変数宣言 局所,文字列 { &m郵便番号 } |
10 | 変数宣言 局所,整数 { &mフッタ表示 = 1 } /* 初期値を設定しています */ |
11 | |
12 | ライブラリ #一括パス名 + "Template.cmx" |
13 | * |
14 | |
15 | 手続き定義開始 chkフッタ表示::ソース値更新() |
16 | 手続き実行 フッタ部を表示( ) |
17 | |
18 | 変数宣言 自動,文字列 { &ファイル名 = #ファイル名( &m編集対象表 , 2 ) } /* 2:ファイル名 */ |
19 | 変数宣言 自動,文字列 { &STRbak , &変数値 } |
20 | &STRbak = &STR /* &STR の値を 自動変数 &STRbak に退避 */ |
21 | |
22 | &STR = &ファイル名 + "," + "mフッタ表示" /* 保存変数名称:局所変数は使用するフォーム専用なので編集対象表名を付加。*/ |
23 | 手続き実行 変数書出( &STR , #文字列 ( &mフッタ表示 ) , &m変数保存表 ) |
24 | |
25 | &STR = &STRbak /* &STRbakの値を 組み込み変数 &STR に戻す */ |
26 | 手続き定義終了 |
27 | |
28 | 手続き定義開始 t郵便番号::入力前(参照 文字列 &編集文字列) |
29 | &m入力前値 = &編集文字列 /* 既存入力値を取得します。半角 です。 */ |
30 | 手続き定義終了 |
31 | |
32 | 手続き定義開始 t郵便番号::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続) |
33 | &編集文字列 = #半角 ( &編集文字列 ) /* 全角入力された場合には半角にします。 */ |
34 | &編集文字列 = #TRIM ( &編集文字列 , 4 ) /* 空白を取り除きます。 */ |
35 | &m入力後値 = &編集文字列 /* 半角にして空白を取り除いた値になります */ |
36 | &m郵便番号 = #文字置換( &編集文字列 , "-" , "" ) /* "-" が入力されている場合は、削除して &m郵便番号 に代入します。 */ |
37 | |
38 | if ( #文字数( &m郵便番号 ) = 7 ) /* 郵便番号は "-"がなければ7桁です */ |
39 | &編集文字列 = #部分列( &m郵便番号 , 1 , 3 ) + "-" + #右側文字列( &m郵便番号 ,4 ) |
40 | * 最初から3文字取り出した値と、4文字目から取り出した値を組み合わせ正しい位置に "-" を入力します。 |
41 | else |
42 | if ( &m入力後値 = #未定義 ) |
43 | * 未定義の場合何もしません。郵便番号を削除した場合に未定義になります。 |
44 | else |
45 | &編集文字列 = &m入力前値 |
46 | &入力継続 = 1 |
47 | * 入力した値が "-" を除いて7桁でない場合には、元の値に戻して入力を継続します( &入力継続 = 1 についてはイベントリファレンスを参照してください)。 |
48 | end |
49 | end |
50 | |
51 | * ここまでの処理で \ |
52 | &m入力前値:元々入力されていた値。&m入力後値:半角、空白を取り除いた値。 \ |
53 | &m郵便番号:"-" を除いた値。 &編集文字列(このイベント処理の引数):"-" を追加した値、※#文字数( &m郵便番号 ) = 7 の場合。 \ |
54 | となります。 |
55 | 手続き定義終了 |
56 | |
57 | 手続き定義開始 t郵便番号::編集開始() |
58 | メソッド呼び出し &this.編集選択位置設定( 1 ,-1 ) /* &this は、イベントが発生したオブジェクトの名前が格納されている定数です。*/ |
59 | 手続き定義終了 |
60 | |
61 | 手続き定義開始 t郵便番号::ソース値更新() |
62 | if ( &m入力後値 = &m入力前値 .or &m入力後値 = #未定義 ) |
63 | * 入力前と値が同じ場合、また入力値が削除された場合には何もしません。 |
64 | else |
65 | 手続き実行 prc住所検索() |
66 | end |
67 | |
68 | メソッド呼び出し @t住所2.フォーカス設定() |
69 | 手続き定義終了 |
70 | |
71 | 手続き定義開始 prc住所検索() |
72 | 変数宣言 自動,整数 { &myTblNum , &lookupTblNum } |
73 | 変数宣言 自動,文字列 { &住所1 , &住所2 } |
74 | &myTblNum = &hwindow /* &hwindowには現在のフォームの編集対象表番号が収納されています。 */ |
75 | |
76 | 表 "郵便番号簿.tbx" |
77 | &lookupTblNum = #IS表 |
78 | |
79 | 手続き実行 prc郵便番号簿検索( &lookupTblNum , &m郵便番号 , &住所1 , &住所2 ) |
80 | |
81 | 終了 表 &lookupTblNum /* 郵便番号簿を閉じる */ |
82 | |
83 | 編集表 &myTblNum /* 住所録の編集対象に戻る */ |
84 | |
85 | 変数宣言 自動,長整数{&更新モード} |
86 | メソッド呼び出し @フォーム.更新モード取得(&更新モード) |
87 | if ( &更新モード = 0 ) |
88 | 行訂正 [都道府県] = &住所1 , [住所1] = &住所2 |
89 | else |
90 | 項目値代入 [都道府県] = &住所1 , [住所1] = &住所2 |
91 | end |
92 | 手続き定義終了 |
93 | |
94 | 手続き定義開始 cmdテストデータ読み込みClick() |
95 | 変数宣言 自動,整数 { &myTblNum , &importTblNum } |
96 | &myTblNum = &hwindow /* &hwindowには現在のフォームの編集対象表番号が収納されています。 */ |
97 | 解除 * |
98 | 行削除 * , 圧縮 |
99 | |
100 | 表 "郵便番号簿.tbx" |
101 | &importTblNum = #IS表 |
102 | 絞り込み [住所1]{*"東京都"*} |
103 | 絞り込み [住所2]{*"千代田区"*} |
104 | |
105 | 編集表 &myTblNum /* 住所録に戻る */ |
106 | 読み込み 表,"郵便番号簿.tbx",{[郵便番号][郵便番号]} |
107 | |
108 | 終了 表 &importTblNum /* 郵便番号簿を閉じる */ |
109 | 確認 "完了しました" /* 終わりの目印ですね */ |
110 | 手続き定義終了 |
111 | |
112 | 手続き定義開始 cmd住所一括更新Click() |
113 | 変数宣言 自動, 数値 { &ans } |
114 | |
115 | 手続き実行 prc実行確認( "cmd住所一括更新Click()" , &ans ) |
116 | if ( &ans = 1 ) |
117 | 手続き実行 prc住所一括更新実行() |
118 | 確認 "完了しました" |
119 | end |
120 | 手続き定義終了 |
121 | |
122 | 手続き定義開始 prc住所一括更新実行() |
123 | 変数宣言 自動,整数 { &myTblNum } |
124 | &myTblNum = &hwindow /* &hwindowには現在のフォームの編集対象表番号が収納されています。 */ |
125 | 手続き実行 prc住所一括検索( &myTblNum ) |
126 | 編集表 &myTblNum /* 住所録の編集対象に戻る */ |
127 | ジャンプ 行番号 = 先頭 /* 処理が完了したら、先頭行に移動します */ |
128 | 手続き定義終了 |
129 | |
130 | 手続き定義開始 cmd住所多重化更新Click() |
131 | 変数宣言 自動, 数値 { &ans } |
132 | |
133 | 手続き実行 prc実行確認( "cmd住所多重化更新Click()" , &ans ) |
134 | if ( &ans = 1 ) |
135 | 手続き実行 prc住所多重化更新実行() |
136 | 確認 "完了しました" |
137 | end |
138 | 手続き定義終了 |
139 | |
140 | 手続き定義開始 prc住所多重化更新実行() |
141 | 変数宣言 自動,整数 { &multiTblNum } |
142 | 編集表 &hwindow /* &hwindowには現在のフォームの編集対象表番号が収納されています。 */ |
143 | 多重化 |
144 | &multiTblNum = #is表 /* 多重化した住所録の表番号を取得 */ |
145 | 手続き実行 prc住所一括検索( &multiTblNum ) |
146 | 終了 表 &multiTblNum /* 多重化した表を閉じる */ |
147 | 編集表 &hwindow /* 確実にもとの編集対象表に戻しておきます。 */ |
148 | ジャンプ 行番号 = 先頭 |
149 | 手続き定義終了 |
150 | |
151 | 手続き定義開始 prc郵便番号簿検索( 整数 &TblNum , 文字列 &郵便番号 , 参照 文字列 &住所1 , 参照 文字列 &住所2 ) |
152 | &住所1 = #u , &住所2 = #u /* 初期化します。 */ |
153 | 編集表 &TblNum /* 郵便番号簿に切り替えます */ |
154 | 検索 [郵便番号]{ &郵便番号 } |
155 | * &住所1 = #u , &住所2 = #u /* 検索する前に変数値を初期化します。 */ |
156 | if ( .not #eof) /* 終端行でなければ。つまり検索値が存在すれば。 */ |
157 | &住所1 = [住所1] , &住所2 = [住所2] + [住所3] |
158 | * else |
159 | * &住所1 = #u , &住所2 = #u /* 検索値がない場合、変数の値を初期化します。 */ |
160 | end |
161 | 手続き定義終了 |
162 | |
163 | 手続き定義開始 prc実行確認( 文字列 &title , 参照 数値 &ans ) |
164 | &ans = 0 /* 参照値の初期化 */ |
165 | 変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) } |
166 | 変数宣言 自動, 文字列 { &msg } |
167 | * 変数宣言 自動, 文字列 { &title, &msg } /* &title は、引数ですでに宣言済みです */ |
168 | * 変数宣言 自動, 数値 { &ans } /* 引数ですでに宣言済みです */ |
169 | * &title = "" /* &title の値は引数で受け取り済みです */ |
170 | &msg = &msg + " << 住所を更新します >>" |
171 | &msg = &msg + "\n" |
172 | &msg = &msg + "\n郵便番号から" |
173 | &msg = &msg + "\n都道府県と住所1を更新します。" |
174 | &msg = &msg + "\n" |
175 | &msg = &msg + "\n郵便番号の " + &WQ + "-" + &WQ +" を一旦取り除いて" |
176 | &msg = &msg + "\n郵便番号簿の住所で更新します。" |
177 | &msg = &msg + "\nその後新たに " + &WQ + "-" + &WQ +" を付け直します。" |
178 | &msg = &msg + "\n" |
179 | &msg = &msg + "\n実行しますか?" |
180 | メッセージボックス &title, &msg,ボタン指定 = 2,アイコン = ?,制御文字展開 = する,&ans |
181 | * アイコン = i|?|!|E| 、ボタン指定 = 1:[OK]のみ|2:[OK]と[キャンセル] |
182 | 手続き定義終了 |
183 | |
184 | 手続き定義開始 prc住所一括検索( 整数 ¤tTblNum ) |
185 | 変数宣言 自動,整数 { &lookupTblNum } |
186 | 変数宣言 自動,文字列 { &郵便番号 , &住所1 , &住所2 } |
187 | |
188 | 表 "郵便番号簿.tbx" /* 郵便番号簿を開く */ |
189 | &lookupTblNum = #IS表 /* 郵便番号簿の表番号を取得 */ |
190 | |
191 | 編集表 ¤tTblNum /* 使用する表を 住所録 に切り替える */ |
192 | 解除 * |
193 | ジャンプ 行番号 = 先頭 /* 先頭行から順次処理していきます */ |
194 | |
195 | 繰り返し ( .not #eof) /* 終端行でなければ。 */ |
196 | &郵便番号 = [郵便番号] |
197 | &郵便番号 = #文字置換( &郵便番号 , "-" , "" ) /* 郵便番号簿検索のため "-" を削除します。 */ |
198 | |
199 | 手続き実行 prc郵便番号簿検索( &lookupTblNum , &郵便番号 , &住所1 , &住所2 ) |
200 | |
201 | 編集表 ¤tTblNum /* 住所録の編集対象に戻る */ |
202 | &郵便番号 = #部分列( &郵便番号 , 1 , 3 ) + "-" + #右側文字列( &郵便番号 ,4 ) /* 郵便番号に "-" を挿入します。 */ |
203 | 変数宣言 自動,長整数{&更新モード} |
204 | メソッド呼び出し @フォーム.更新モード取得(&更新モード) |
205 | if ( &更新モード = 0 ) |
206 | 行訂正 [郵便番号] = &郵便番号 , [都道府県] = &住所1 , [住所1] = &住所2 |
207 | else |
208 | 項目値代入 [郵便番号] = &郵便番号 , [都道府県] = &住所1 , [住所1] = &住所2 |
209 | end |
210 | |
211 | ジャンプ 行番号 = 次行 |
212 | 繰り返し終了 |
213 | |
214 | 終了 表 &lookupTblNum /* 郵便番号簿を閉じる */ |
215 | 手続き定義終了 |
216 | |
217 | 手続き定義開始 cmd住所併合更新Click() |
218 | 変数宣言 自動, 数値 { &ans } |
219 | |
220 | 手続き実行 prc実行確認( "cmd住所併合更新Click()" , &ans ) |
221 | if ( &ans = 1 ) |
222 | 解除 * |
223 | 置換 [郵便番号] = #文字置換( [郵便番号] , "-" , "" ) |
224 | 併合 "郵便番号簿.tbx" , 置換 , {[郵便番号]照合[郵便番号],[都道府県]複写[住所1],[住所1]複写[住所2],[住所1]連結[住所3]} |
225 | 置換 [郵便番号] = #部分列( [郵便番号] , 1 , 3 ) + "-" + #右側文字列( [郵便番号] ,4 ) |
226 | 確認 "完了しました" |
227 | end |
228 | 手続き定義終了 |
229 | |
230 | 手続き定義開始 cmdStartupClick( ) |
231 | 手続き実行 prc変数読込( &m変数保存表 ) |
232 | 手続き実行 prc起動時フッタ表示( ) |
233 | 手続き定義終了 |
234 | |
235 | 手続き定義開始 prc変数読込( 文字列 &変数保存表 ) |
236 | 変数宣言 自動,文字列 { &ファイル名 = #ファイル名( &m編集対象表 , 2 ) } /* 2:ファイル名 */ |
237 | 変数宣言 自動,文字列 { &STRbak , &変数値 } |
238 | 変数宣言 自動,整数 { &importTblNum , &openTblNum } |
239 | &STRbak = &STR /* &STR の値を 自動変数 &STRbak に退避 */ |
240 | |
241 | &openTblNum = #表番号取得 ( &変数保存表 ) |
242 | if ( 0 < &openTblNum ) |
243 | 編集表 &openTblNum |
244 | 多重化 |
245 | &importTblNum = #IS表 |
246 | else |
247 | 表 &変数保存表 /* 変数保存表.tbx を開く */ |
248 | &importTblNum = #IS表 |
249 | end |
250 | |
251 | &STR = &ファイル名 + "," + "mフッタ表示" /* 局所変数は使用するフォーム専用となるので編集対象表名も検索値の一部です。*/ |
252 | 手続き実行 変数値代入整数( &STR , &mフッタ表示 ) |
253 | |
254 | 終了 表 &importTblNum /* 変数保存表.tbx を閉じる */ |
255 | &STR = &STRbak /* &STRbakの値を 組み込み変数 &STR に戻す */ |
256 | |
257 | 編集表 &hwindow /* 確実にもとの編集対象表に戻しておきます。 */ |
258 | メソッド呼び出し @フォーム.変数変更() |
259 | 手続き定義終了 |
260 | |
261 | 手続き定義開始 prc起動時フッタ表示( ) |
262 | if ( &mフッタ表示 = 1 ) |
263 | * フォームを開いて変数を読み込んだ値が "1" の時は何もしません(フォーム起動時のデフォルトがフッタ表示状態です)。 |
264 | else |
265 | 手続き実行 フッタ部を表示( ) |
266 | end |
267 | 手続き定義終了 |
268 | |
269 | 手続き定義開始 cmdExitClick() |
270 | 手続き実行 prcClose() |
271 | 手続き定義終了 |
272 | |
273 | 手続き定義開始 cmdMainMenuClick() |
274 | 手続き実行 prcClose() |
275 | 手続き定義終了 |
276 | |
277 | 手続き定義開始 prcClose() |
278 | * フォーム終了時に実行するコマンドを書きましょう。 |
279 | 手続き定義終了 |
参考) | ※行番号は参考としてください |
サンプルコードをコピペしてうまく動作しないときには、一旦削除して手入力してください。※プロシージャごとに処理すれば作業がしやすいでしょう。 |
【郵便番号簿.kex】 | |
1 | 名札 メイン |
2 | |
3 | 変数宣言 局所,文字列 { &m編集対象表 = #一括パス名 + "郵便番号簿.tbx" } |
4 | オブジェクト操作 @フォーム.編集対象表 = &m編集対象表 /* 編集対象表は、メイン処理でのみ変更できます */ |
5 | |
6 | 変数宣言 局所,文字列 { &m変数保存表 = #一括パス名 + "変数保存表.tbx" } |
7 | 変数宣言 局所,文字列 { &m読み込みファイル名 } |
8 | |
9 | ライブラリ #一括パス名 + "Template.cmx" |
10 | * |
11 | |
12 | 手続き定義開始 cmdフッタ表示非表示Click() |
13 | 手続き実行 フッタ部を表示() |
14 | 手続き定義終了 |
15 | |
16 | 手続き定義開始 cmd郵便番号簿更新Click() |
17 | 変数宣言 自動, 文字列 { &title, &msg } |
18 | 変数宣言 自動, 数値 { &ans } |
19 | &title = "cmd郵便番号簿更新Click()" |
20 | &msg = &msg + " << 郵便番号簿を更新します >>" |
21 | &msg = &msg + "\n" |
22 | &msg = &msg + "\n郵便番号ファイルから" |
23 | &msg = &msg + "\n郵便番号簿を更新します。" |
24 | &msg = &msg + "\n" |
25 | &msg = &msg + "\n郵便番号ファイルは" |
26 | &msg = &msg + "\n事前に郵便局のサイトからダウンロードして" |
27 | &msg = &msg + "\n展開しておいてください。" |
28 | &msg = &msg + "\n" |
29 | &msg = &msg + "\n必ず所定のファイルを指定してから実行してください。" |
30 | メッセージボックス &title, &msg,ボタン指定 = 2,アイコン = !,制御文字展開 = する,&ans |
31 | * アイコン = i|?|!|E| 、ボタン指定 = 1:[OK]のみ|2:[OK]と[キャンセル] |
32 | |
33 | if ( &ans = 1 ) |
34 | 解除 * /* データーが絞り込まれていたりを想定して、解除しておきます */ |
35 | 行削除 * , 圧縮 |
36 | 読み込み CSV,&m読み込みファイル名 , * |
37 | 確認 完了しました。 |
38 | end |
39 | 手続き定義終了 |
40 | |
41 | 手続き定義開始 txt読み込みファイル名::ソース値更新() |
42 | 変数宣言 自動,文字列 { &ファイル名 = #ファイル名( &m編集対象表 , 2 ) } /* 2:ファイル名 */ |
43 | 変数宣言 自動,文字列 { &STRbak , &変数値 } |
44 | &STRbak = &STR /* &STR の値を 自動変数 &STRbak に退避 */ |
45 | |
46 | &STR = &ファイル名 + "," + "m読み込みファイル名" /* 保存変数名称:局所変数は使用するフォーム専用なので編集対象表名を付加。*/ |
47 | * 固有変数の場合、編集対象表名を付加する必要はありません。付加するとトラブルの原因になると思います。 |
48 | &変数値 = #ファイル名( &m読み込みファイル名 , 1 ) /* 1:パス名とファイル名と拡張子 */ |
49 | |
50 | 手続き実行 変数書出( &STR , &変数値 , &m変数保存表 ) /* 変数名称、変数の値、変数を保存する表、の順に並べてみました。*/ |
51 | * 手続き実行 変数書出( &STR , #文字列( 文字列以外の変数値 ) , &m変数保存表 ) |
52 | * 変数の値が文字列以外の場合には、#文字列( &文字列以外の変数値 )と文字列に変換して保存します。 \ |
53 | そして値を変数に代入する際には #数値( &文字列以外の変数値 )といった具合に、本来のデータ型に変換します。 |
54 | |
55 | &STR = &STRbak /* &STRbakの値を 組み込み変数 &STR に戻す */ |
56 | 手続き定義終了 |
57 | |
58 | 手続き定義開始 cmdStartupClick( ) |
59 | 手続き実行 prc変数読込( &m変数保存表 ) |
60 | 手続き定義終了 |
61 | |
62 | 手続き定義開始 prc変数読込( 文字列 &変数保存表 ) |
63 | 変数宣言 自動,文字列 { &ファイル名 = #ファイル名( &m編集対象表 , 2 ) } /* 2:ファイル名 */ |
64 | 変数宣言 自動,文字列 { &STRbak , &変数値 } |
65 | 変数宣言 自動,整数 { &importTblNum , &openTblNum } |
66 | &STRbak = &STR /* &STR の値を 自動変数 &STRbak に退避 */ |
67 | |
68 | &openTblNum = #表番号取得 ( &変数保存表 ) |
69 | if ( 0 < &openTblNum ) |
70 | 編集表 &openTblNum |
71 | 多重化 |
72 | &importTblNum = #IS表 |
73 | else |
74 | 表 &変数保存表 /* 変数保存表.tbx を開く */ |
75 | &importTblNum = #IS表 |
76 | end |
77 | |
78 | &STR = &ファイル名 + "," + "m読み込みファイル名" /* 局所変数は使用するフォーム専用となるので編集対象表名も検索値の一部です。*/ |
79 | 手続き実行 変数値代入文字列( &STR , &m読み込みファイル名 ) /* 引数は 検索する値 , 値を代入する変数名 の順に並べてみました。 */ |
80 | * 手続き実行 変数値代入数値( "固有変数の場合ファイル名を付加していない" , &g数値型の固有変数名 ) |
81 | |
82 | 終了 表 &importTblNum /* 変数保存表.tbx を閉じる */ |
83 | &STR = &STRbak /* &STRbakの値を 組み込み変数 &STR に戻す */ |
84 | |
85 | 編集表 &hwindow /* 確実にもとの編集対象表に戻しておきます。 */ |
86 | メソッド呼び出し @フォーム.変数変更() |
87 | 手続き定義終了 |
参考) | ※行番号は参考としてください |
サンプルコードをコピペしてうまく動作しないときには、一旦削除して手入力してください。※プロシージャごとに処理すれば作業がしやすいでしょう。 |
【Template.CMX】 (ライブラリ) | |
***** バージョンとか日付やタイトル等を付けておくとよいかもしれません ***** | |
1 | * 2024年10月4日更新 |
2 | |
3 | 手続き定義開始 フッタ部を表示( ) |
4 | 変数宣言 自動,文字列{ §ionName } |
5 | 変数宣言 自動,整数 { &isSection, &visible } |
6 | |
7 | §ionName = "フォームフッタ部" |
8 | メソッド呼び出し @フォーム.オブジェクト検査( §ionName, &isSection ) |
9 | |
10 | if ( &isSection ) |
11 | オブジェクト操作 @フォームフッタ部{ &visible = 画面表示 } |
12 | &visible = .not &visible |
13 | オブジェクト操作 @フォームフッタ部{ 画面表示 = &visible } |
14 | end |
15 | 手続き定義終了 |
16 | |
17 | 手続き定義開始 変数書出( 文字列 &変数名 , 文字列 &変数値 , 文字列 &変数保存表 ) |
18 | 変数宣言 自動,整数 { &exportTblNum , &検索結果 } |
19 | 変数宣言 自動, 整数 { &openTblNum = #表番号取得 ( &変数保存表 ) } |
20 | |
21 | if ( 0 < &openTblNum ) |
22 | 編集表 &openTblNum |
23 | * メソッド呼び出し ハンドル = &openTblNum,@フォーム.更新モード設定( 0 ) /* <編集対象表があるフォーム>ではハンドルと表番号は同値です。*/ |
24 | 多重化 /* フォームが編集モードの場合、多重化できません。 */ |
25 | &exportTblNum = #IS表 |
26 | else |
27 | 表 &変数保存表 |
28 | &exportTblNum = #IS表 |
29 | end |
30 | |
31 | 検索 [変数名] { &変数名 } , 終了状態 = &検索結果 |
32 | if ( &検索結果 = 1 ) |
33 | 行訂正 [変数値] = &変数値 |
34 | else |
35 | 行追加 [変数名] = &変数名 , [変数値] = &変数値 |
36 | end |
37 | 終了 表 &exportTblNum /* "変数保存表.tbx" を閉じる */ |
38 | |
39 | 編集表 &hwindow /* 確実にもとの編集対象表に戻しておきます。 */ |
40 | 手続き定義終了 |
41 | |
42 | 手続き定義開始 変数値代入文字列( 文字列 &変数名 , 参照 文字列 &変数値 ) |
43 | 変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) } |
44 | 変数宣言 自動,文字列{ &表現式 } /* &表現式 をつかうことで、&変数名 の値を保持したままにできます */ |
45 | 変数宣言 自動,整数 { &検索結果 } |
46 | |
47 | &表現式 = "*" + &WQ + &変数名 + &WQ + "*" /* 準備した &表現式に 式の値を代入しています */ |
48 | 検索 [変数名] _ &表現式 , 終了状態 = &検索結果 |
49 | &変数値 = #u |
50 | if ( &検索結果 = 1 ) |
51 | &変数値 = [変数値] |
52 | end |
53 | 手続き定義終了 |
54 | |
55 | 手続き定義開始 変数値代入数値( 文字列 &変数名 , 参照 数値 &変数値 ) |
56 | 変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) } |
57 | 変数宣言 自動,文字列{ &表現式 } /* &表現式 をつかうことで、&変数名 の値を保持したままにできます */ |
58 | 変数宣言 自動,整数 { &検索結果 } |
59 | |
60 | &表現式 = "*" + &WQ + &変数名 + &WQ + "*" /* 準備した &表現式に 式の値を代入しています */ |
61 | 検索 [変数名] _ &表現式 , 終了状態 = &検索結果 |
62 | &変数値 = #u |
63 | if ( &検索結果 = 1 ) |
64 | &変数値 = #数値([変数値]) |
65 | end |
66 | 手続き定義終了 |
67 | |
68 | 手続き定義開始 変数値代入整数( 文字列 &変数名 , 参照 整数 &変数値 ) |
69 | 変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) } |
70 | 変数宣言 自動,文字列{ &表現式 } /* &表現式 をつかうことで、&変数名 の値を保持したままにできます */ |
71 | 変数宣言 自動,整数 { &検索結果 } |
72 | |
73 | &表現式 = "*" + &WQ + &変数名 + &WQ + "*" /* 準備した &表現式に 式の値を代入しています */ |
74 | 検索 [変数名] _ &表現式 , 終了状態 = &検索結果 |
75 | &変数値 = #u |
76 | if ( &検索結果 = 1 ) |
77 | &変数値 = #整数 ( [変数値] ) |
78 | end |
79 | 手続き定義終了 |