入力支援ボタンの履歴を登録、更新します。
1.検索した文字を 入力支援ボタンのリストに登録します。
2.検索した文字を 入力支援リストの一番上に移動します。
( リスト内の文字を選択した場合、その文字が一番上になります)
A) ひとつの検索項目が設定されたフォームで入力支援リストの履歴更新を設定する。
B) 複数の検索項目が設定されたフォームで入力支援リストの履歴更新を設定する。
・ 下図ではすでに入力済みの文字がいくつか並んでいますが、サンプルとして検索した文字列が履歴としてリストに登録されたものです。
----------------------
・ 定義画面で開いてみましょう。検索文字を入力する部分の属性は次のようになっています。
・ [入力時の操作] で 入力支援ボタンを利用できるようにしています。入力支援ボタンの属性は次の通りです。
自動終了にチェックを入れておきましょう。

----------------------
〇 利用するイベントは txt氏名検索 にセットします(入力支援ボタンのイベントではありません)。
ここでは 編集開始 と ソース値更新 を使用します。

・ 検索履歴は変数に保存します。値はフォームを閉じる際に保存して、開く際に復元します。
フォームでは、起動時と終了時の実行コマンドを利用しています。
☆ フォームを起動する際に 自動的に手続きを実行させる方法については→
こちら(クリックしてください) をご覧になってください。

・ Startup 、Close ボタンの属性は次の通りです。

〇 イベントファイルは次の通りです。
・ 名札メインでは 局所変数と、固有変数を宣言しています。

・ txt氏名検索 で次のイベントが実行されます。
青色のアンダーラインの部分ですが、&m氏名文字列 は氏名検索用の局所変数です。引数を使わなくても
絞り込み [氏名] { *&m氏名文字列* } で問題なく機能します。
ここでは直接 項目名と入力支援リストの変数 ( [氏名] 、&g氏名DIM )と記載しているので専用のソースコードとなります。
* この部分は、複数の検索項目が設定された場合のソースコードと比較してみてください。

・ 次のプロシージャは ONnoji さんから提供して頂きました。配列変数の要素値を登録、並べ替えする処理が書かれています。

----------------------
参考
| 1 | 名札 メイン |
| 2 | |
| 3 | 変数宣言 局所, 文字列 { &m氏名文字列 } |
| 4 | |
| 5 | 変数宣言 固有, 文字列 { &g氏名DIM[10] } |
| 6 | |
| 7 | * |
| 8 | |
| 9 | 手続き定義開始 cmdStartupClick( ) |
| 10 | 変数宣言 自動,整数{ &status } |
| 11 | 変数読み込み "History.vax",固有 , 終了状態 = &status |
| 12 | if ( &status <> 1 ) |
| 13 | 確認 "保存した変数の値が読み込めませんでした。終了状態 = " + #str( &status ) |
| 14 | end |
| 15 | 手続き定義終了 |
| 16 | |
| 17 | 手続き定義開始 cmdCloseClick( ) |
| 18 | 変数書き出し "History.vax",固有 |
| 19 | 手続き定義終了 |
| 20 | |
| 21 | |
| 22 | 手続き定義開始 txt氏名検索::編集開始() |
| 23 | 変数宣言 自動,文字列{ &objectName = &this } |
| 24 | メソッド呼び出し &objectName.編集選択位置設定( 1 ,-1 ) |
| 25 | 手続き定義終了 |
| 26 | |
| 27 | 手続き定義開始 txt氏名検索::ソース値更新() |
| 28 | if ( &m氏名文字列 <> #未定義 ) |
| 29 | 手続き実行 prc検索実行( &m氏名文字列 ) |
| 30 | end |
| 31 | 手続き定義終了 |
| 32 | |
| 33 | |
| 34 | 手続き定義開始 prc検索実行( 文字列 &検索文字列 ) |
| 35 | 解除 * |
| 36 | 絞り込み [氏名] { *&検索文字列* } |
| 37 | 手続き実行 prcHistoryDimSet( &検索文字列 , &g氏名DIM ) |
| 38 | 手続き定義終了 |
| 39 | |
| 40 | |
| 41 | 手続き定義開始 prcHistoryDimSet( 文字列 &string, 参照 文字列 &varDim[] ) |
| 42 | 変数宣言 自動,整数 { &top = 1, &bottom = #配列要素数( "varDim" ), &i, &next = 1, &before = -1, &found } |
| 43 | |
| 44 | if ( &varDim[ &top ] <> &string .and &top <> &bottom ) |
| 45 | |
| 46 | 繰り返し &i = &top + 1, &bottom, &next |
| 47 | |
| 48 | &found = &i |
| 49 | |
| 50 | if ( &varDim[ &i ] = &string ) |
| 51 | 繰り返し中止 |
| 52 | end |
| 53 | 繰り返し終了 |
| 54 | |
| 55 | 繰り返し &i = &found, &top + 1, &before |
| 56 | &varDim[ &i ] = &varDim[ &i - 1 ] |
| 57 | 繰り返し終了 |
| 58 | |
| 59 | end |
| 60 | |
| 61 | &varDim[ &top ] = &string |
| 62 | |
| 63 | 手続き定義終了 |
| 64 |
ここでは次のように、複数の入力支援リストを処理してみます。
----------------------
・ 定義画面で開いてみます。
・ 検索用のオブジェクト、入力支援リストの属性は次のようになります(まずは 氏名検索の部分です)。
・ 住所検索部分の属性です。
・ Memo検索の属性です。
----------------------
〇 利用するイベントには txt氏名検索、txt住所検索、txtMemo検索 の 編集開始 と、ソース値更新 をセットします。
・ 検索履歴は変数に保存します。値はフォームを閉じる際に保存して、開く際に復元します。
フォームでは、起動時と終了時の実行コマンドを利用しています。
☆ フォームを起動する際に 自動的に手続きを実行させる方法については→
こちら(クリックしてください) をご覧になってください。
・ Startup 、Close ボタンの属性は次の通りです。

〇 イベントファイルは次の通りです。
・ 名札メインでは 局所変数と、固有変数を宣言しています。
〇 txt氏名検索、txt住所検索、txtMemo検索 でつぎのイベントが実行されます。
各手続きで 引数を使うことで 同じ プロシージャ ”prc検索実行” を使用することができます。
*検索、入力支援リスト項目が一つのみの場合のソースコードと比較してみてください。
・ 次のプロシージャは ONnoji さんから提供して頂きました。配列変数の要素値を登録、並べ替えする処理が書かれています。
*引数を使うことで 検索項目、更新するリストが複数になっても 一つの場合とまったく同じプロシージャが利用できます。
----------------------
参考
| 1 | 名札 メイン |
| 2 | |
| 3 | 変数宣言 局所, 文字列 { &m氏名文字列 , &m住所文字列 , &mMemo文字列 } |
| 4 | |
| 5 | 変数宣言 固有, 文字列 { &g氏名DIM[10] , &g住所DIM[10] , &gMemoDIM[10] } |
| 6 | |
| 7 | * |
| 8 | |
| 9 | |
| 10 | 手続き定義開始 cmdStartupClick( ) |
| 11 | 変数宣言 自動,整数{ &status } |
| 12 | 変数読み込み "History.vax",固有 , 終了状態 = &status |
| 13 | if ( &status <> 1 ) |
| 14 | 確認 "保存した変数の値が読み込めませんでした。終了状態 = " + #str( &status ) |
| 15 | end |
| 16 | 手続き定義終了 |
| 17 | |
| 18 | 手続き定義開始 cmdCloseClick( ) |
| 19 | 変数書き出し "History.vax",固有 |
| 20 | 手続き定義終了 |
| 21 | |
| 22 | |
| 23 | 手続き定義開始 txt氏名検索::編集開始() |
| 24 | 変数宣言 自動,文字列{ &objectName = &this } |
| 25 | メソッド呼び出し &objectName.編集選択位置設定( 1 ,-1 ) |
| 26 | 手続き定義終了 |
| 27 | |
| 28 | 手続き定義開始 txt氏名検索::ソース値更新() |
| 29 | if ( &m氏名文字列 <> #未定義 ) |
| 30 | 手続き実行 prc検索実行( "氏名" , &m氏名文字列 , &g氏名DIM ) |
| 31 | end |
| 32 | 手続き定義終了 |
| 33 | |
| 34 | 手続き定義開始 txt住所検索::編集開始() |
| 35 | 変数宣言 自動,文字列{ &objectName = &this } |
| 36 | メソッド呼び出し &objectName.編集選択位置設定( 1 ,-1 ) |
| 37 | 手続き定義終了 |
| 38 | |
| 39 | 手続き定義開始 txt住所検索::ソース値更新() |
| 40 | if ( &m住所文字列 <> #未定義 ) |
| 41 | 手続き実行 prc検索実行( "住所" , &m住所文字列 , &g住所DIM ) |
| 42 | end |
| 43 | 手続き定義終了 |
| 44 | |
| 45 | 手続き定義開始 txtMemo検索::編集開始() |
| 46 | 変数宣言 自動,文字列{ &objectName = &this } |
| 47 | メソッド呼び出し &objectName.編集選択位置設定( 1 ,-1 ) |
| 48 | 手続き定義終了 |
| 49 | |
| 50 | 手続き定義開始 txtMemo検索::ソース値更新() |
| 51 | if ( &mMemo文字列 <> #未定義 ) |
| 52 | 手続き実行 prc検索実行( "Memo" , &mMemo文字列 , &gMemoDIM ) |
| 53 | end |
| 54 | 手続き定義終了 |
| 55 | |
| 56 | 手続き定義開始 prc検索実行( 文字列 &検索項目 , 文字列 &検索文字列 , 参照 文字列 &履歴DIM[] ) |
| 57 | 解除 * |
| 58 | 絞り込み &検索項目 { *&検索文字列* } |
| 59 | 手続き実行 prcHistoryDimSet( &検索文字列 , &履歴DIM ) |
| 60 | 手続き定義終了 |
| 61 | |
| 62 | |
| 63 | 手続き定義開始 prcHistoryDimSet( 文字列 &string, 参照 文字列 &varDim[] ) |
| 64 | 変数宣言 自動,整数 { &top = 1, &bottom = #配列要素数( "varDim" ), &i, &next = 1, &before = -1, &found } |
| 65 | |
| 66 | if ( &varDim[ &top ] <> &string .and &top <> &bottom ) |
| 67 | |
| 68 | 繰り返し &i = &top + 1, &bottom, &next |
| 69 | |
| 70 | &found = &i |
| 71 | |
| 72 | if ( &varDim[ &i ] = &string ) |
| 73 | 繰り返し中止 |
| 74 | end |
| 75 | 繰り返し終了 |
| 76 | |
| 77 | 繰り返し &i = &found, &top + 1, &before |
| 78 | &varDim[ &i ] = &varDim[ &i - 1 ] |
| 79 | 繰り返し終了 |
| 80 | |
| 81 | end |
| 82 | |
| 83 | &varDim[ &top ] = &string |
| 84 | |
| 85 | 手続き定義終了 |